gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 1.76 kB
JavaScript
/*! Copyright 2023-2024 the gnablib contributors MPL-1.1 */
import{ScalingUint8Array as n}from"../primitive/TypedArrayExt.js";import{sNum as t}from"../safe/safe.js";export const ascii85={fromBytes:function(n,e){let o=79;(null==e?void 0:e.lineLength)&&(t("opts.lineLength",e.lineLength).natural().throwNot(),o=e.lineLength);let l=!1;(null==e?void 0:e.pad)&&(l=!0);let i="",r=0;function u(n){return String.fromCodePoint(n+33)}function s(n,t,e,o){let l=n<<24|t<<16|e<<8|o;const i=l%85;l=l/85|0;const r=l%85;l=l/85|0;const s=l%85;l=l/85|0;const c=l%85;l=l/85|0;return u(l%85)+u(c)+u(s)+u(r)+u(i)}function c(n){"!!!!!"===n&&(n="z");const t=o-r;t>5?(i+=n,r+=5):5===t?(i+=n+"\r\n",r=0):(i+=n.substring(0,t)+"\r\n"+n.substring(t),r=5-t)}let f=0;const g=n.length-3;for(;f<g;)c(s(n[f++],n[f++],n[f++],n[f++]));if(f<n.length){const t=n.length-f+1,e=s(n[f++],f<n.length?n[f++]:0,f<n.length?n[f++]:0,0);c(l?e:e.substring(0,t))}return i},toBytes:function(t){var e,o,l,i;const r=new n(t.length+8);let u=0,s=0;function c(n){return n.charCodeAt(0)-33}function f(){let n=t[u++];do{if(" "!==n&&"\t"!==n&&"\n"!==n&&"\r"!==n&&"\f"!==n)return n;n=t[u++]}while(u<t.length)}const g=t.length-4;for(;u<g;){const n=f();if("z"===n){r[s++]=0,r[s++]=0,r[s++]=0,r[s++]=0;continue}let t=85*c(n);t=85*(t+c(f())),t=85*(t+c(f())),t=85*(t+c(f())),t+=c(f()),r[s++]=t>>>24,r[s++]=t>>16&255,r[s++]=t>>8&255,r[s++]=255&t}for(;u<t.length;){const n=f();if("z"===n){r[s++]=0,r[s++]=0,r[s++]=0,r[s++]=0;continue}const g=t.length-u;let h=85*c(n);h=85*(h+c(null!==(e=f())&&void 0!==e?e:"u")),h=85*(h+c(null!==(o=f())&&void 0!==o?o:"u")),h=85*(h+c(null!==(l=f())&&void 0!==l?l:"u")),h+=c(null!==(i=f())&&void 0!==i?i:"u"),r[s++]=h>>>24,r[s++]=h>>16&255,r[s++]=h>>8&255,r[s++]=255&h,s-=4-g}return r.clone(0,s)}};