@cmtlyt/string-zip
Version:
2 lines (1 loc) • 2.19 kB
JavaScript
"use strict";const base=require("@cmtlyt/base");function p(e,n){let r,i=0;const c=36**n;do r=base.getRandomString(n);while(e.includes(r)&&++i<c);return r}function u(e){return"#"}function x(e,n,r="#",i={}){const c=new RegExp(`(^{.*?(.{${n}})})|({.*?(.{${n}})}$)`),s=r.length+2;for(let t=0;t++<e.length;){const g=e.slice(t,t+n+s);if(e.includes(g,t+n+s))for(let a=t+n+s+1;a++<e.length;){const S=e.slice(t,a);if(!e.includes(S,a)){const m=p(Object.keys(i),n),f=e.slice(t,a-1);if(c.test(f))break;i[m]=f,e=e.replace(new RegExp(f.replace(/([[{(?)\\])/g,"\\$1"),"g"),`{${r}${m}}`),t=t+9;break}}}return e}function zipSync(e,n=6){const r={},i=x(e,n,u(),r);return JSON.stringify({cache:r,source:i,keyLength:n})}const{run:zip}=base.createWorkerFunc(zipSync,[x,u,p,base.getRandomString],{reuse:!1});function d(e,n="#"){const{keyLength:r,cache:i}=e;let{source:c}=e;const s=new RegExp(`{${n}(.{${r}})}`,"g");let t=s.exec(c);for(;t;){const[g,a]=Array.from(t);c=c.replace(new RegExp(g,"g"),i[a]),t=s.exec(c)}return c}function unzipSync(e){const n=JSON.parse(e);return d(n,u())}const{run:unzip}=base.createWorkerFunc(unzipSync,[d,u,p,base.getRandomString],{reuse:!1});function createZip(e){return base.createWorkerFunc(zipSync,[x,u,p,base.getRandomString],{...e,needPost:!1}).run}function createUnzip(e){return base.createWorkerFunc(unzipSync,[d,u,p,base.getRandomString],{...e,needPost:!1}).run}const o=base.cacheByReturn(()=>base.caniuse("TextEncoder")&&base.caniuse("ReadableStream")&&base.caniuse("ArrayBuffer")&&base.caniuse("Uint8Array")&&base.caniuse("btoa")&&base.caniuse("atob")&&base.caniuse("TextDecoder"));async function gzip(e,n=6){if(!base.caniuse("CompressionStream")||!o())return zipSync(e,n);const r=base.stringToStream(e).pipeThrough(new CompressionStream("gzip"));return base.streamToBase64String(r)}async function unGzip(e){if(!base.caniuse("DecompressionStream")||!o())return unzipSync(e);const n=base.base64StringToStream(e).pipeThrough(new DecompressionStream("gzip"));return base.streamToString(n)}exports.createUnzip=createUnzip,exports.createZip=createZip,exports.gzip=gzip,exports.unGzip=unGzip,exports.unzip=unzip,exports.unzipSync=unzipSync,exports.zip=zip,exports.zipSync=zipSync;