UNPKG

uint8arrays

Version:

Utility functions to make dealing with Uint8Arrays easier

18 lines (14 loc) 15.2 kB
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Uint8arrays = factory()}(typeof self !== 'undefined' ? self : this, function () { var Uint8arrays=(()=>{var ne=Object.defineProperty;var Te=r=>ne(r,"__esModule",{value:!0});var l=(r,e)=>{Te(r);for(var t in e)ne(r,t,{get:e[t],enumerable:!0})};var qt={};l(qt,{compare:()=>ie,concat:()=>ae,equals:()=>ce,fromString:()=>Le,toString:()=>Me,xor:()=>Ne});function ie(r,e){for(let t=0;t<r.byteLength;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return r.byteLength>e.byteLength?1:r.byteLength<e.byteLength?-1:0}function ae(r,e){e||(e=r.reduce((o,n)=>o+n.length,0));let t=new Uint8Array(e),s=0;for(let o of r)t.set(o,s),s+=o.length;return t}function ce(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var X={};l(X,{identity:()=>Re});function Be(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),s=0;s<t.length;s++)t[s]=255;for(var o=0;o<r.length;o++){var n=r.charAt(o),a=n.charCodeAt(0);if(t[a]!==255)throw new TypeError(n+" is ambiguous");t[a]=o}var d=r.length,f=r.charAt(0),U=Math.log(d)/Math.log(256),b=Math.log(256)/Math.log(d);function D(i){if(i instanceof Uint8Array||(ArrayBuffer.isView(i)?i=new Uint8Array(i.buffer,i.byteOffset,i.byteLength):Array.isArray(i)&&(i=Uint8Array.from(i))),!(i instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(i.length===0)return"";for(var p=0,A=0,m=0,g=i.length;m!==g&&i[m]===0;)m++,p++;for(var y=(g-m)*b+1>>>0,u=new Uint8Array(y);m!==g;){for(var x=i[m],E=0,w=y-1;(x!==0||E<A)&&w!==-1;w--,E++)x+=256*u[w]>>>0,u[w]=x%d>>>0,x=x/d>>>0;if(x!==0)throw new Error("Non-zero carry");A=E,m++}for(var j=y-A;j!==y&&u[j]===0;)j++;for(var k=f.repeat(p);j<y;++j)k+=r.charAt(u[j]);return k}function V(i){if(typeof i!="string")throw new TypeError("Expected String");if(i.length===0)return new Uint8Array;var p=0;if(i[p]!==" "){for(var A=0,m=0;i[p]===f;)A++,p++;for(var g=(i.length-p)*U+1>>>0,y=new Uint8Array(g);i[p];){var u=t[i.charCodeAt(p)];if(u===255)return;for(var x=0,E=g-1;(u!==0||x<m)&&E!==-1;E--,x++)u+=d*y[E]>>>0,y[E]=u%256>>>0,u=u/256>>>0;if(u!==0)throw new Error("Non-zero carry");m=x,p++}if(i[p]!==" "){for(var w=g-m;w!==g&&y[w]===0;)w++;for(var j=new Uint8Array(A+(g-w)),k=A;w!==g;)j[k++]=y[w++];return j}}}function Oe(i){var p=V(i);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:D,decodeUnsafe:V,decode:Oe}}var Ve=Be,ke=Ve,de=ke;var Xt=new Uint8Array(0);var he=(r,e)=>{if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0},S=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")};var fe=r=>new TextEncoder().encode(r),pe=r=>new TextDecoder().decode(r);var ue=class{constructor(e,t,s){this.name=e,this.prefix=t,this.baseEncode=s}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},le=class{constructor(e,t,s){this.name=e,this.prefix=t,this.baseDecode=s}decode(e){if(typeof e=="string")switch(e[0]){case this.prefix:return this.baseDecode(e.slice(1));default:throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)}else throw Error("Can only multibase decode strings")}or(e){let t={[this.prefix]:this,...e.decoders||{[e.prefix]:e}};return new q(t)}},q=class{constructor(e){this.decoders=e}or(e){let t=e.decoders||{[e.prefix]:e};return new q({...this.decoders,...t})}decode(e){let t=e[0],s=this.decoders[t];if(s)return s.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},me=class{constructor(e,t,s,o){this.name=e,this.prefix=t,this.baseEncode=s,this.baseDecode=o,this.encoder=new ue(e,t,s),this.decoder=new le(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},$=({name:r,prefix:e,encode:t,decode:s})=>new me(r,e,t,s),C=({prefix:r,name:e,alphabet:t})=>{let{encode:s,decode:o}=de(t,e);return $({prefix:r,name:e,encode:s,decode:n=>S(o(n))})},qe=(r,e,t,s)=>{let o={};for(let b=0;b<e.length;++b)o[e[b]]=b;let n=r.length;for(;r[n-1]==="=";)--n;let a=new Uint8Array(n*t/8|0),d=0,f=0,U=0;for(let b=0;b<n;++b){let D=o[r[b]];if(D===void 0)throw new SyntaxError(`Non-${s} character`);f=f<<t|D,d+=t,d>=8&&(d-=8,a[U++]=255&f>>d)}if(d>=t||255&f<<8-d)throw new SyntaxError("Unexpected end of data");return a},$e=(r,e,t)=>{let s=e[e.length-1]==="=",o=(1<<t)-1,n="",a=0,d=0;for(let f=0;f<r.length;++f)for(d=d<<8|r[f],a+=8;a>t;)a-=t,n+=e[o&d>>a];if(a&&(n+=e[o&d<<t-a]),s)for(;n.length*t&7;)n+="=";return n},c=({name:r,prefix:e,bitsPerChar:t,alphabet:s})=>$({prefix:e,name:r,encode(o){return $e(o,s,t)},decode(o){return qe(o,s,t,r)}});var Re=$({prefix:"\0",name:"identity",encode:r=>pe(r),decode:r=>fe(r)});var G={};l(G,{base2:()=>Pe});var Pe=c({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var K={};l(K,{base8:()=>Fe});var Fe=c({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Q={};l(Q,{base10:()=>Je});var Je=C({prefix:"9",name:"base10",alphabet:"0123456789"});var H={};l(H,{base16:()=>Xe,base16upper:()=>Ge});var Xe=c({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Ge=c({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var W={};l(W,{base32:()=>z,base32hex:()=>We,base32hexpad:()=>Ye,base32hexpadupper:()=>_e,base32hexupper:()=>Ze,base32pad:()=>Qe,base32padupper:()=>He,base32upper:()=>Ke,base32z:()=>et});var z=c({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Ke=c({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Qe=c({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),He=c({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),We=c({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Ze=c({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Ye=c({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),_e=c({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),et=c({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Z={};l(Z,{base36:()=>tt,base36upper:()=>rt});var tt=C({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),rt=C({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Y={};l(Y,{base58btc:()=>v,base58flickr:()=>st});var v=C({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),st=C({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var _={};l(_,{base64:()=>ot,base64pad:()=>nt,base64url:()=>it,base64urlpad:()=>at});var ot=c({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),nt=c({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),it=c({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),at=c({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var te={};l(te,{sha256:()=>At,sha512:()=>Ut});var ct=ge,we=128,dt=127,ht=~dt,ft=Math.pow(2,31);function ge(r,e,t){e=e||[],t=t||0;for(var s=t;r>=ft;)e[t++]=r&255|we,r/=128;for(;r&ht;)e[t++]=r&255|we,r>>>=7;return e[t]=r|0,ge.bytes=t-s+1,e}var pt=ee,bt=128,ye=127;function ee(r,e){var t=0,e=e||0,s=0,o=e,n,a=r.length;do{if(o>=a)throw ee.bytes=0,new RangeError("Could not decode varint");n=r[o++],t+=s<28?(n&ye)<<s:(n&ye)*Math.pow(2,s),s+=7}while(n>=bt);return ee.bytes=o-e,t}var ut=Math.pow(2,7),lt=Math.pow(2,14),mt=Math.pow(2,21),wt=Math.pow(2,28),gt=Math.pow(2,35),yt=Math.pow(2,42),xt=Math.pow(2,49),vt=Math.pow(2,56),jt=Math.pow(2,63),St=function(r){return r<ut?1:r<lt?2:r<mt?3:r<wt?4:r<gt?5:r<yt?6:r<xt?7:r<vt?8:r<jt?9:10},Et={encode:ct,decode:pt,encodingLength:St},Ct=Et,M=Ct;var N=r=>[M.decode(r),M.decode.bytes],I=(r,e,t=0)=>(M.encode(r,e,t),e),L=r=>M.encodingLength(r);var R=(r,e)=>{let t=e.byteLength,s=L(r),o=s+L(t),n=new Uint8Array(o+t);return I(r,n,0),I(t,n,s),n.set(e,o),new O(r,t,e,n)},ve=r=>{let e=S(r),[t,s]=N(e),[o,n]=N(e.subarray(s)),a=e.subarray(s+n);if(a.byteLength!==o)throw new Error("Incorrect length");return new O(t,o,a,e)},je=(r,e)=>r===e?!0:r.code===e.code&&r.size===e.size&&he(r.bytes,e.bytes),O=class{constructor(e,t,s,o){this.code=e,this.size=t,this.digest=s,this.bytes=o}};var T=({name:r,code:e,encode:t})=>new Ee(r,e,t),Ee=class{constructor(e,t,s){this.name=e,this.code=t,this.encode=s}async digest(e){if(e instanceof Uint8Array){let t=await this.encode(e);return R(this.code,t)}else throw Error("Unknown type, must be binary type")}};var Ae=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),At=T({name:"sha2-256",code:18,encode:Ae("SHA-256")}),Ut=T({name:"sha2-512",code:19,encode:Ae("SHA-512")});var re={};l(re,{identity:()=>Dt});var Dt=T({name:"identity",code:0,encode:r=>S(r)});var h=class{constructor(e,t,s,o){this.code=t,this.version=e,this.multihash=s,this.bytes=o,this.byteOffset=o.byteOffset,this.byteLength=o.byteLength,this.asCID=this,this._baseCache=new Map,Object.defineProperties(this,{byteOffset:F,byteLength:F,code:P,version:P,multihash:P,bytes:P,_baseCache:F,asCID:F})}toV0(){switch(this.version){case 0:return this;default:{let{code:e,multihash:t}=this;if(e!==B)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Ot)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return h.createV0(t)}}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,s=R(e,t);return h.createV1(this.code,s)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}equals(e){return e&&this.code===e.code&&this.version===e.version&&je(this.multihash,e.multihash)}toString(e){let{bytes:t,version:s,_baseCache:o}=this;switch(s){case 0:return Mt(t,o,e||v.encoder);default:return Nt(t,o,e||z.encoder)}}toJSON(){return{code:this.code,version:this.version,hash:this.multihash.bytes}}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return"CID("+this.toString()+")"}static isCID(e){return Bt(/^0\.0/,Vt),!!(e&&(e[De]||e.asCID===e))}get toBaseEncodedString(){throw new Error("Deprecated, use .toString()")}get codec(){throw new Error('"codec" property is deprecated, use integer "code" property instead')}get buffer(){throw new Error("Deprecated .buffer property, use .bytes to get Uint8Array instead")}get multibaseName(){throw new Error('"multibaseName" property is deprecated')}get prefix(){throw new Error('"prefix" property is deprecated')}static asCID(e){if(e instanceof h)return e;if(e!=null&&e.asCID===e){let{version:t,code:s,multihash:o,bytes:n}=e;return new h(t,s,o,n||Ue(t,s,o.bytes))}else if(e!=null&&e[De]===!0){let{version:t,multihash:s,code:o}=e,n=ve(s);return h.create(t,o,n)}else return null}static create(e,t,s){if(typeof t!="number")throw new Error("String codecs are no longer supported");switch(e){case 0:{if(t!==B)throw new Error(`Version 0 CID must use dag-pb (code: ${B}) block encoding`);return new h(e,t,s,s.bytes)}case 1:{let o=Ue(e,t,s.bytes);return new h(e,t,s,o)}default:throw new Error("Invalid version")}}static createV0(e){return h.create(0,B,e)}static createV1(e,t){return h.create(1,e,t)}static decode(e){let[t,s]=h.decodeFirst(e);if(s.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=h.inspectBytes(e),s=t.size-t.multihashSize,o=S(e.subarray(s,s+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let n=o.subarray(t.multihashSize-t.digestSize),a=new O(t.multihashCode,t.digestSize,n,o);return[t.version===0?h.createV0(a):h.createV1(t.codec,a),e.subarray(t.size)]}static inspectBytes(e){let t=0,s=()=>{let[D,V]=N(e.subarray(t));return t+=V,D},o=s(),n=B;if(o===18?(o=0,t=0):o===1&&(n=s()),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let a=t,d=s(),f=s(),U=t+f,b=U-a;return{version:o,codec:n,multihashCode:d,digestSize:f,multihashSize:b,size:U}}static parse(e,t){let[s,o]=Lt(e,t),n=h.decode(o);return n._baseCache.set(s,e),n}},Lt=(r,e)=>{switch(r[0]){case"Q":{let t=e||v;return[v.prefix,t.decode(`${v.prefix}${r}`)]}case v.prefix:{let t=e||v;return[v.prefix,t.decode(r)]}case z.prefix:{let t=e||z;return[z.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},Mt=(r,e,t)=>{let{prefix:s}=t;if(s!==v.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(s);if(o==null){let n=t.encode(r).slice(1);return e.set(s,n),n}else return o},Nt=(r,e,t)=>{let{prefix:s}=t,o=e.get(s);if(o==null){let n=t.encode(r);return e.set(s,n),n}else return o},B=112,Ot=18,Ue=(r,e,t)=>{let s=L(r),o=s+L(e),n=new Uint8Array(o+t.byteLength);return I(r,n,0),I(e,n,s),n.set(t,o),n},De=Symbol.for("@ipld/js-cid/CID"),P={writable:!1,configurable:!1,enumerable:!0},F={writable:!1,enumerable:!1,configurable:!1},Tt="0.0.0-dev",Bt=(r,e)=>{if(r.test(Tt))console.warn(e);else throw new Error(e)},Vt=`CID.isCID(v) is deprecated and will be removed in the next major release. Following code pattern: if (CID.isCID(value)) { doSomethingWithCID(value) } Is replaced with: const cid = CID.asCID(value) if (cid) { // Make sure to use cid instead of value doSomethingWithCID(cid) } `;var se={...X,...G,...K,...Q,...H,...W,...Z,...Y,..._},Sr={...te,...re};function ze(r,e,t,s){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:s}}}var Ie=ze("utf8","u",r=>{let e=new TextDecoder("utf8");return"u"+e.decode(r)},r=>new TextEncoder().encode(r.substring(1))),oe=ze("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=new Uint8Array(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),kt={utf8:Ie,"utf-8":Ie,hex:se.base16,latin1:oe,ascii:oe,binary:oe,...se},J=kt;function Le(r,e="utf8"){let t=J[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function Me(r,e="utf8"){let t=J[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function Ne(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=new Uint8Array(r.length);for(let s=0;s<r.length;s++)t[s]=r[s]^e[s];return t}return qt;})(); return Uint8arrays}));