zip.js (1297B)
1 import {JSUnzip} from '~/vendored/github.com/augustl/js-unzip/js-unzip'; 2 import jsInflate from './jsInflate'; 3 import {decode866} from './codePages'; 4 import parseGeoFile from '../parseGeoFile'; 5 6 function parseZip(txt, _unused_name) { 7 let unzipper; 8 try { 9 unzipper = new JSUnzip(txt); 10 } catch (e) { 11 return null; 12 } 13 if (!unzipper.isZipFile()) { 14 return null; 15 } 16 try { 17 unzipper.readEntries(); 18 } catch (e) { 19 return null; 20 } 21 var geodata_array = []; 22 for (var i = 0; i < unzipper.entries.length; i++) { 23 var entry = unzipper.entries[i]; 24 var uncompressed; 25 if (entry.compressionMethod === 0) { 26 uncompressed = entry.data; 27 } else if (entry.compressionMethod === 8) { 28 uncompressed = jsInflate(entry.data, entry.uncompressedSize); 29 } else { 30 return null; 31 } 32 var file_name = decode866(entry.fileName); 33 var geodata = parseGeoFile(file_name, uncompressed); 34 for (let item of geodata) { 35 if (item.error === 'UNSUPPORTED' && item.name.match(/(\.(pdf|doc|txt|jpg))|\/$/ui)) { 36 continue; 37 } 38 geodata_array.push(item); 39 } 40 } 41 return geodata_array; 42 } 43 44 export default parseZip;