unzipit 1.4.1 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,6 +15,7 @@ Random access unzip library for browser and node based JavaScript
15
15
  # How to use
16
16
 
17
17
  Live Example: [https://jsfiddle.net/greggman/awez4sd7/](https://jsfiddle.net/greggman/awez4sd7/)
18
+ Live Parallel Example: [https://jsfiddle.net/greggman/cgdjm07f/](https://jsfiddle.net/greggman/cgdjm07f/)
18
19
 
19
20
  ## without workers
20
21
 
@@ -63,6 +64,23 @@ async function readFiles(url) {
63
64
  }
64
65
  ```
65
66
 
67
+ ## In Parallel
68
+
69
+ ```js
70
+ import {unzip, setOptions} from 'unzipit';
71
+
72
+ setOptions({workerURL: 'path/to/unzipit-worker.module.js'});
73
+
74
+ async function readFiles(url) {
75
+ const {entries} = await unzipit.unzip(url);
76
+ const names = Object.keys(entries);
77
+ const blobs = await Promise.all(Object.values(entries).map(e => e.blob()));
78
+
79
+ // names and blobs are now parallel arrays so do whatever you want.
80
+ const blobsByName = Object.fromEntries(names.map((name, i) => [name, blobs[i]]));
81
+ }
82
+ ```
83
+
66
84
  You can also pass a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob),
67
85
  [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer),
68
86
  [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer),
@@ -476,6 +494,21 @@ The zip standard predates unicode so it's possible and apparently not uncommon f
476
494
  to have non-unicode names. `entry.nameBytes` contains the raw bytes of the filename.
477
495
  so you are free to decode the name using your own methods. See example above.
478
496
 
497
+ ## Filename issues in general.
498
+
499
+ unzipit doesn't and can't know if a filename is valid for your use case. A zip file
500
+ can have any name with any characters in the filename data. All unzipit can do is give you
501
+ the filename as a string from the zip file. It's up to you do deal with it, for example
502
+ to strip out or replace characters in the filename that are incompatible with your OS.
503
+ For example [this zip file](https://github.com/greggman/unzipit/files/10998616/problem-filenames.zip)
504
+ has these filenames: `'this#file\\name%is&iffy'`, `'???And This one???'`, `'fo:oo'` which
505
+ I believe are problematic on Windows. A user found a file with double slashes as in `foo//bar`
506
+ so you'll need to decide what to do with that.
507
+
508
+ There is also the issue a user could make a malicious filename. For example "../../.bash_profile"
509
+ on the hope that some program doesn't check the names and just uses the paths as is.
510
+ If you're going to use unzipit to create files you should check and sanitize your paths.
511
+
479
512
  ## ArrayBuffer and SharedArrayBuffer caveats
480
513
 
481
514
  If you pass in an `ArrayBuffer` or `SharedArrayBuffer` you need to keep the data unchanged
@@ -1,4 +1,4 @@
1
- /* unzipit@1.4.1, license MIT */
1
+ /* unzipit@1.4.3, license MIT */
2
2
  (function (factory) {
3
3
  typeof define === 'function' && define.amd ? define(factory) :
4
4
  factory();
@@ -1,4 +1,4 @@
1
- /* unzipit@1.4.1, license MIT */
1
+ /* unzipit@1.4.3, license MIT */
2
2
  'use strict';(function(w){"function"===typeof define&&define.amd?define(w):w()})(function(){function w(a,b){var e=a.length;if(b<=e)return a;b=new Uint8Array(Math.max(e<<1,b));b.set(a,0);return b}function X(a,b,e,g){for(var f=0,c=0,m=g.length>>>1;c<e;){var p=a[c+b];g[c<<1]=0;g[(c<<1)+1]=p;p>f&&(f=p);c++}for(;c<m;)g[c<<1]=0,g[(c<<1)+1]=0,c++;return f}function z(a,b){var e=a.length,g,f;var c=d.bl_count;for(f=0;f<=b;f++)c[f]=0;for(f=1;f<e;f+=2)c[a[f]]++;f=d.next_code;var m=0;c[0]=0;for(g=1;g<=b;g++)m=
3
3
  m+c[g-1]<<1,f[g]=m;for(b=0;b<e;b+=2)c=a[b+1],0!=c&&(a[b]=f[c],f[c]++)}function A(a,b,e){for(var g=a.length,f=d.rev15,c=0;c<g;c+=2)if(0!=a[c+1]){var m=a[c+1],p=c>>1<<4|m,t=b-m;m=a[c]<<t;for(t=m+(1<<t);m!=t;)e[f[m]>>>15-b]=p,m++}}function Y(a,b){for(var e=d.rev15,g=15-b,f=0;f<a.length;f+=2)a[f]=e[a[f]<<b-a[f+1]]>>>g}function x(a,b,e){return(a[b>>>3]|a[(b>>>3)+1]<<8)>>>(b&7)&(1<<e)-1}function K(a,b,e){return(a[b>>>3]|a[(b>>>3)+1]<<8|a[(b>>>3)+2]<<16)>>>(b&7)&(1<<e)-1}function L(a,b){return(a[b>>>3]|
4
4
  a[(b>>>3)+1]<<8|a[(b>>>3)+2]<<16)>>>(b&7)}function fa(a){return a.arrayBuffer?a.arrayBuffer():new Promise((b,e)=>{const g=new FileReader;g.addEventListener("loadend",()=>{b(g.result)});g.addEventListener("error",e);g.readAsArrayBuffer(a)})}async function ha(a){a=await fa(a);return new Uint8Array(a)}const d=function(){var a=Uint16Array,b=Uint32Array;return{next_code:new a(16),bl_count:new a(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,
@@ -1,4 +1,4 @@
1
- /* unzipit@1.4.1, license MIT */
1
+ /* unzipit@1.4.3, license MIT */
2
2
  function inflate(data, buf) {
3
3
  var u8=Uint8Array;
4
4
  if(data[0]==3 && data[1]==0) return (buf ? buf : new u8(0));
package/dist/unzipit.d.ts CHANGED
@@ -47,8 +47,10 @@ export type UnzipitOptions = {
47
47
 
48
48
  export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array;
49
49
 
50
- export class HTTPRangeReader {
51
- constructor(url: string);
50
+ export class HTTPRangeReader implements Reader {
51
+ constructor(url: string);
52
+ getLength(): Promise<number>;
53
+ read(offset: number, size: number): Promise<Uint8Array>;
52
54
  }
53
55
 
54
56
  export function unzip(src: string | ArrayBuffer | TypedArray | Blob | Reader): Promise<ZipInfo>;
package/dist/unzipit.js CHANGED
@@ -1,4 +1,4 @@
1
- /* unzipit@1.4.1, license MIT */
1
+ /* unzipit@1.4.3, license MIT */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
4
4
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
@@ -430,7 +430,7 @@
430
430
  }
431
431
 
432
432
  function dynamicRequire(mod, request) {
433
- return mod.require ? mod.require(request) : undefined;
433
+ return mod.require ? mod.require(request) : {};
434
434
  }
435
435
 
436
436
  const workerHelper = (function() {
@@ -1,4 +1,4 @@
1
- /* unzipit@1.4.1, license MIT */
1
+ /* unzipit@1.4.3, license MIT */
2
2
  'use strict';(function(z,G){"object"===typeof exports&&"undefined"!==typeof module?G(exports):"function"===typeof define&&define.amd?define(["exports"],G):(z="undefined"!==typeof globalThis?globalThis:z||self,G(z.unzipit={}))})(this,function(z){function G(a){return a.arrayBuffer?a.arrayBuffer():new Promise((b,c)=>{const e=new FileReader;e.addEventListener("loadend",()=>{b(e.result)});e.addEventListener("error",c);e.readAsArrayBuffer(a)})}async function na(a){a=await G(a);return new Uint8Array(a)}
3
3
  function aa(a){return"undefined"!==typeof Blob&&a instanceof Blob}function I(a){return"undefined"!==typeof SharedArrayBuffer&&a instanceof SharedArrayBuffer}function R(a,b){var c=a.length;if(b<=c)return a;b=new Uint8Array(Math.max(c<<1,b));b.set(a,0);return b}function oa(a,b,c,e,d,h){for(var k=ba,f=ca,l=0;l<c;){var n=a[f(e,d)&b];d+=n&15;var u=n>>>4;if(15>=u)h[l]=u,l++;else{var x=n=0;16==u?(x=3+k(e,d,2),d+=2,n=h[l-1]):17==u?(x=3+k(e,d,3),d+=3):18==u&&(x=11+k(e,d,7),d+=7);for(u=l+x;l<u;)h[l]=n,l++}}return d}
4
4
  function da(a,b,c,e){for(var d=0,h=0,k=e.length>>>1;h<c;){var f=a[h+b];e[h<<1]=0;e[(h<<1)+1]=f;f>d&&(d=f);h++}for(;h<k;)e[h<<1]=0,e[(h<<1)+1]=0,h++;return d}function J(a,b){var c=a.length,e,d;var h=g.bl_count;for(d=0;d<=b;d++)h[d]=0;for(d=1;d<c;d+=2)h[a[d]]++;d=g.next_code;var k=0;h[0]=0;for(e=1;e<=b;e++)k=k+h[e-1]<<1,d[e]=k;for(b=0;b<c;b+=2)h=a[b+1],0!=h&&(a[b]=d[h],d[h]++)}function K(a,b,c){for(var e=a.length,d=g.rev15,h=0;h<e;h+=2)if(0!=a[h+1]){var k=a[h+1],f=h>>1<<4|k,l=b-k;k=a[h]<<l;for(l=k+
@@ -24,7 +24,7 @@ this.length=parseInt(a.headers.get("content-length"));if(Number.isNaN(this.lengt
24
24
  bl_count:new a(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new a(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new b(32),flmap:new a(512),
25
25
  fltree:[],fdmap:new a(32),fdtree:[],lmap:new a(32768),ltree:[],ttree:[],dmap:new a(32768),dtree:[],imap:new a(512),itree:[],rev15:new a(32768),lhst:new b(286),dhst:new b(30),ihst:new b(19),lits:new b(15E3),strt:new a(65536),prev:new a(32768)}}();(function(){function a(e,d,h){for(;0!=d--;)e.push(0,h)}for(var b=0;32768>b;b++){var c=b;c=(c&2863311530)>>>1|(c&1431655765)<<1;c=(c&3435973836)>>>2|(c&858993459)<<2;c=(c&4042322160)>>>4|(c&252645135)<<4;c=(c&4278255360)>>>8|(c&16711935)<<8;g.rev15[b]=(c>>>
26
26
  16|c<<16)>>>17}for(b=0;32>b;b++)g.ldef[b]=g.of0[b]<<3|g.exb[b],g.ddef[b]=g.df0[b]<<4|g.dxb[b];a(g.fltree,144,8);a(g.fltree,112,9);a(g.fltree,24,7);a(g.fltree,8,8);J(g.fltree,9);K(g.fltree,9,g.flmap);ea(g.fltree,9);a(g.fdtree,32,5);J(g.fdtree,5);K(g.fdtree,5,g.fdmap);ea(g.fdtree,5);a(g.itree,19,0);a(g.ltree,286,0);a(g.dtree,30,0);a(g.ttree,320,0)})();const ma={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,e=0;8>e;e++)c=c&1?3988292384^c>>>1:c>>>1;a[b]=c}return a}(),update:function(a,
27
- b,c,e){for(var d=0;d<e;d++)a=ma.table[(a^b[c+d])&255]^a>>>8;return a},crc:function(a,b,c){return ma.update(4294967295,a,b,c)^4294967295}},y={numWorkers:1,workerURL:"",useWorkers:!1};let ta=0,U=0,P=!0;const O=[],D=[],B=[],N=new Map,V=function(){if(Ca){const {Worker:a}=module.require?module.require("worker_threads"):void 0;return{async createWorker(b){return new a(b)},addEventListener(b,c){b.on("message",e=>{c({target:b,data:e})})},async terminate(b){await b.terminate()}}}return{async createWorker(a){try{return await T(a)}catch(c){console.warn("could not load worker:",
27
+ b,c,e){for(var d=0;d<e;d++)a=ma.table[(a^b[c+d])&255]^a>>>8;return a},crc:function(a,b,c){return ma.update(4294967295,a,b,c)^4294967295}},y={numWorkers:1,workerURL:"",useWorkers:!1};let ta=0,U=0,P=!0;const O=[],D=[],B=[],N=new Map,V=function(){if(Ca){const {Worker:a}=module.require?module.require("worker_threads"):{};return{async createWorker(b){return new a(b)},addEventListener(b,c){b.on("message",e=>{c({target:b,data:e})})},async terminate(b){await b.terminate()}}}return{async createWorker(a){try{return await T(a)}catch(c){console.warn("could not load worker:",
28
28
  a)}let b;try{const c=await fetch(a,{mode:"cors"});if(!c.ok)throw Error(`could not load: ${a}`);b=await c.text();a=URL.createObjectURL(new Blob([b],{type:"application/javascript"}));const e=await T(a);y.workerURL=a;return e}catch(c){console.warn("could not load worker via fetch:",a)}if(void 0!==b)try{a=`data:application/javascript;base64,${btoa(b)}`;const c=await T(a);y.workerURL=a;return c}catch(c){console.warn("could not load worker via dataURI")}console.warn("workers will not be used");throw Error("can not start workers");
29
29
  },addEventListener(a,b){a.addEventListener("message",b)},async terminate(a){a.terminate()}}}();class za{constructor(a,b){this._reader=a;this._rawEntry=b;this.name=b.name;this.nameBytes=b.nameBytes;this.size=b.uncompressedSize;this.compressedSize=b.compressedSize;this.comment=b.comment;this.commentBytes=b.commentBytes;this.compressionMethod=b.compressionMethod;a=b.lastModFileDate;var c=b.lastModFileTime;this.lastModDate=new Date((a>>9&127)+1980,(a>>5&15)-1,a&31,c>>11&31,c>>5&63,2*(c&31),0);this.isDirectory=
30
30
  0===b.uncompressedSize&&b.name.endsWith("/");this.encrypted=!!(b.generalPurposeBitFlag&1);this.externalFileAttributes=b.externalFileAttributes;this.versionMadeBy=b.versionMadeBy}async blob(a="application/octet-stream"){return await Ba(this._reader,this._rawEntry,a)}async arrayBuffer(){return await Aa(this._reader,this._rawEntry)}async text(){const a=await this.arrayBuffer();return M(new Uint8Array(a))}async json(){const a=await this.text();return JSON.parse(a)}}const ya={unsigned(){return 0}},va=
@@ -47,8 +47,10 @@ export type UnzipitOptions = {
47
47
 
48
48
  export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array;
49
49
 
50
- export class HTTPRangeReader {
51
- constructor(url: string);
50
+ export class HTTPRangeReader implements Reader {
51
+ constructor(url: string);
52
+ getLength(): Promise<number>;
53
+ read(offset: number, size: number): Promise<Uint8Array>;
52
54
  }
53
55
 
54
56
  export function unzip(src: string | ArrayBuffer | TypedArray | Blob | Reader): Promise<ZipInfo>;
@@ -1,4 +1,4 @@
1
- /* unzipit@1.4.1, license MIT */
1
+ /* unzipit@1.4.3, license MIT */
2
2
  /* global SharedArrayBuffer, process */
3
3
 
4
4
  function readBlobAsArrayBuffer(blob) {
@@ -424,7 +424,7 @@ function startWorker(url) {
424
424
  }
425
425
 
426
426
  function dynamicRequire(mod, request) {
427
- return mod.require ? mod.require(request) : undefined;
427
+ return mod.require ? mod.require(request) : {};
428
428
  }
429
429
 
430
430
  const workerHelper = (function() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unzipit",
3
- "version": "1.4.1",
3
+ "version": "1.4.3",
4
4
  "description": "random access unzip library for JavaScript",
5
5
  "main": "dist/unzipit.js",
6
6
  "module": "dist/unzipit.module.js",