UNPKG

libarchive

Version:

Multi-format archive and compression library

1 lines 21.4 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.libarchive=t():e.libarchive=t()}(global,()=>(()=>{"use strict";var __webpack_modules__={24:e=>{e.exports=require("node:fs")},161:e=>{e.exports=require("node:os")},570:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{Pi:()=>getScriptDirectory,Qo:()=>PathSep,a8:()=>getFileStats,ed:()=>MkdirCache});var node_path__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(760),node_path__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__),node_fs__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(24),node_fs__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__),node_os__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(161),node_os__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(node_os__WEBPACK_IMPORTED_MODULE_2__),FileSystem,PathSep;function getScriptDirectory(){return eval("__dirname")}!function(e){e.createNode=function(e){const t={mkdir:node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.mkdir,open:node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.open,readFile:node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.readFile};if(e?.withMkdirCache){const e=new MkdirCache;t.mkdir=(t,r)=>e.mkdir(t,r)}return t}}(FileSystem||(FileSystem={})),function(e){let t;function r(){if(!t){const e=[node_path__WEBPACK_IMPORTED_MODULE_0___default().win32.sep,node_path__WEBPACK_IMPORTED_MODULE_0___default().posix.sep],r=[node_path__WEBPACK_IMPORTED_MODULE_0___default().posix.sep,node_path__WEBPACK_IMPORTED_MODULE_0___default().win32.sep],_="win32"===node_os__WEBPACK_IMPORTED_MODULE_2___default().platform()?e:r;t={native:_,win32:e,posix:r}}return t}e.representPathAsNative=function(e){const t=r().native;return e.replaceAll(t[1],t[0])},e.representPathAsPosix=function(e){const t=r().posix;return e.replaceAll(t[1],t[0])},e.representPathAsWin32=function(e){const t=r().win32;return e.replaceAll(t[1],t[0])}}(PathSep||(PathSep={}));class MkdirCache{_dirMap=new Map;async mkdir(e,t){let r=this._dirMap.get(e);if(null!==r)return void 0===r&&(r=await node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.mkdir(e,t),this._dirMap.set(e,void 0===r?null:r)),r}}async function getFileStatsImpl(e,t,r){for(const _ of t){const t=node_path__WEBPACK_IMPORTED_MODULE_0___default().join(r,PathSep.representPathAsNative(_)),i=await node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.stat(t),a={name:_,filepath:t,stat:i};if(e.push(a),i.isDirectory()){a.name+=node_path__WEBPACK_IMPORTED_MODULE_0___default().posix.sep;const i=(await node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.readdir(t)).map(e=>node_path__WEBPACK_IMPORTED_MODULE_0___default().join(_,e));await getFileStatsImpl(e,i,r)}}return e}async function getFileStats(e,t){return getFileStatsImpl([],e.map(e=>PathSep.representPathAsPosix(e)),PathSep.representPathAsNative(t))}},760:e=>{e.exports=require("node:path")}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var __webpack_exports__={};__webpack_require__.d(__webpack_exports__,{default:()=>NodeLibrary});var external_node_path_=__webpack_require__(760),external_node_path_default=__webpack_require__.n(external_node_path_),external_node_fs_=__webpack_require__(24),external_node_fs_default=__webpack_require__.n(external_node_fs_);const external_node_url_namespaceObject=require("node:url");var external_node_url_default=__webpack_require__.n(external_node_url_namespaceObject);class ArchiveBuffer{_context;_byteOffset;_byteLength;constructor(e,t,r){this._context=e,this._byteOffset=t,this._byteLength=r}release(){this._context.archive_buffer_free(this._byteOffset)}get buffer(){return this._context.memoryBuffer}get byteOffset(){return this._byteOffset}get byteLength(){return this._byteLength}}class ArchiveCallbacks{_map=new Map;get(e){const t=this._map.get(e);if(!t)throw Error(`Handle ${e} does not exists`);return t}set(e,t){if(!e)throw Error("Handle is null");if(this._map.has(e))throw Error(`Handle ${e} is registred`);this._map.set(e,t)}delete(e){this._map.delete(e)}}class ArchiveContext{_native;_memory;_callbacks=new ArchiveCallbacks;_readBuffer=new Uint8Array;constructor(e,t){this._native=e,this._memory=t}get memoryBuffer(){return this._memory.buffer}archive_version(){return this._native.archive_version()}archive_version_details(){return this._native.archive_version_details()}archive_setlocale(e){return this._native.archive_setlocale(e)}archive_errno(e){return this._native.archive_errno(e)}archive_error_string(e){return this._native.archive_error_string(e)}archive_open_handler(e){const t=this._callbacks.get(e);return t.opener?t.opener():0}archive_read_handler(e,t,r){if(!this._readBuffer.length){const t=this._callbacks.get(e);if(!t.reader)return 0;const r=t.reader();if(!r)return 0;this._readBuffer=new Uint8Array(r)}const _=Math.min(r,this._readBuffer.length),i=new Uint8Array(this._memory.buffer,t,_);for(let e=0;e<_;e++)i[e]=this._readBuffer[e];return this._readBuffer=this._readBuffer.slice(_),_}archive_read_last_error(e){return this._native.archive_read_last_error(e)}archive_write_handler(e,t,r){const _=this._callbacks.get(e);return _.writer&&_.writer(new ArchiveBuffer(this,t,r)),r}archive_close_handler(e){const t=this._callbacks.get(e);return t.closer?t.closer():0}archive_read_new(){const e=this._native.archive_read_new();if(e){const t={};this._callbacks.set(e,t)}return e}archive_read_free(e){this._callbacks.delete(e),this._native.archive_read_free(e)}archive_read_add_passphrase(e,t){return this._native.archive_read_add_passphrase(e,t)}archive_read_support_filter_all(e){return this._native.archive_read_support_filter_all(e)}archive_read_support_format_all(e){return this._native.archive_read_support_format_all(e)}archive_read_open(e){return this._native.archive_read_open(e)}archive_read_close(e){return this._native.archive_read_close(e)}archive_read_next_header(e){return this._native.archive_read_next_header(e)}archive_read_data(e,t,r){return this._native.archive_read_data(e,t,r)}archive_read_data_skip(e){return this._native.archive_read_data_skip(e)}archive_read_set_open_callback(e,t){this._callbacks.get(e).opener=t}archive_read_set_read_callback(e,t){this._callbacks.get(e).reader=t}archive_read_set_close_callback(e,t){this._callbacks.get(e).closer=t}archive_write_new(){const e=this._native.archive_write_new();if(e){const t={};this._callbacks.set(e,t)}return e}archive_write_free(e){this._callbacks.delete(e),this._native.archive_write_free(e)}archive_write_set_options(e,t){return this._native.archive_write_set_options(e,t)}archive_write_set_passphrase(e,t){return this._native.archive_write_set_passphrase(e,t)}archive_write_set_format_by_name(e,t){return this._native.archive_write_set_format_by_name(e,t)}archive_write_add_filter_by_name(e,t){return this._native.archive_write_add_filter_by_name(e,t)}archive_write_set_format_filter_by_ext(e,t){return this._native.archive_write_set_format_filter_by_ext(e,t)}archive_write_set_open_callback(e,t){this._callbacks.get(e).opener=t}archive_write_set_write_callback(e,t){this._callbacks.get(e).writer=t}archive_write_set_close_callback(e,t){this._callbacks.get(e).closer=t}archive_write_open(e){return this._native.archive_write_open(e)}archive_write_close(e){return this._native.archive_write_close(e)}archive_write_header(e,t){return this._native.archive_write_header(e,t)}archive_write_data(e,t,r){return this._native.archive_write_data(e,t,r)}archive_entry_new(){return this._native.archive_entry_new()}archive_entry_free(e){this._native.archive_entry_free(e)}archive_entry_pathname(e){return this._native.archive_entry_pathname(e)}archive_entry_pathname_w(e){return this._native.archive_entry_pathname_w(e)}archive_entry_pathname_utf8(e){return this._native.archive_entry_pathname_utf8(e)}archive_entry_set_pathname_utf8(e,t){this._native.archive_entry_set_pathname_utf8(e,t)}archive_entry_size(e){const t=this._native.archive_entry_size_lo(e);return 4294967296*this._native.archive_entry_size_hi(e)+t}archive_entry_set_size(e,t){this._native.archive_entry_set_size(e,0,t)}archive_entry_size_is_set(e){return this._native.archive_entry_size_is_set(e)}archive_entry_mode(e){return this._native.archive_entry_mode(e)}archive_entry_set_mode(e,t){this._native.archive_entry_set_mode(e,t)}archive_buffer_new(e){return this._native.archive_buffer_new(e)}archive_buffer_free(e){this._native.archive_buffer_free(e)}archive_buffer_from(e){const t=(new TextEncoder).encode(e+"\0"),r=this._native.archive_buffer_new(t.length);return r&&new Uint8Array(this._memory.buffer,r,t.length).set(t),r}}const ARCHIVE_OK=0,ARCHIVE_RETRY=-10,ARCHIVE_WARN=-20,ARCHIVE_FAILED=-25,ARCHIVE_FATAL=-30,AE_IFMT=61440,AE_IFREG=32768,AE_IFLNK=40960,AE_IFSOCK=49152,AE_IFCHR=8192,AE_IFBLK=24576,AE_IFDIR=16384,AE_IFIFO=4096,NO_MEMORY="No Memory";var StringExtras;function errorCodeToString(e){switch(e){case ARCHIVE_OK:return"ARCHIVE_OK";case ARCHIVE_RETRY:return"ARCHIVE_RETRY";case ARCHIVE_WARN:return"ARCHIVE_WARN";case ARCHIVE_FAILED:return"ARCHIVE_FAILED";case ARCHIVE_FATAL:return"ARCHIVE_FATAL"}if(e<0)return"ARCHIVE_"+-e;throw new Error(`Error code ${e} must be negative`)}!function(e){e.fromBuffer=function(e,t,r){let _;if(void 0===r)for(r=0,_=new Uint8Array(e,t);_[r];)r++;if(_=new Uint8Array(e,t,r),e instanceof SharedArrayBuffer){const e=new Uint8Array(r);e.set(_),_=e}return new TextDecoder("utf-8").decode(_)}}(StringExtras||(StringExtras={}));class ArchiveEntry{_context;_entry;constructor(e,t){this._context=e,this._entry=t}release(){this._context.archive_entry_free(this._entry)}get memoryOffset(){return this._entry}get pathname(){const e=this._context.archive_entry_pathname_utf8(this._entry);if(e)return StringExtras.fromBuffer(this._context.memoryBuffer,e);const t=this._context.archive_entry_pathname(this._entry);return t?StringExtras.fromBuffer(this._context.memoryBuffer,t):void 0}set pathname(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);this._context.archive_entry_set_pathname_utf8(this._entry,t)}get size(){if(this._context.archive_entry_size_is_set(this._entry))return this._context.archive_entry_size(this._entry)}set size(e){this._context.archive_entry_set_size(this._entry,e)}get mode(){return this._context.archive_entry_mode(this._entry)}set mode(e){this._context.archive_entry_set_mode(this._entry,e)}}class ArchiveBase{_context;_archive;constructor(e,t){this._context=e,this._archive=t}get memoryOffset(){return this._archive}get errno(){return this._context.archive_errno(this._archive)}get errorString(){const e=this._context.archive_error_string(this._archive);return StringExtras.fromBuffer(this._context.memoryBuffer,e)}}class ArchiveRead extends ArchiveBase{constructor(e,t){super(e,t)}release(){this._context.archive_read_free(this._archive)}supportFilterAll(){return this._context.archive_read_support_filter_all(this._archive)}supportFormatAll(){return this._context.archive_read_support_format_all(this._archive)}addPassphrase(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_read_add_passphrase(this._archive,t);if(this._context.archive_buffer_free(t),r!=ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(r)})}open(){const e=this._context.archive_read_open(this._archive);if(e!==ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(e)})}close(){this._context.archive_read_close(this._archive)}nextHeader(){const e=this._context.archive_read_next_header(this._archive);if(e)return new ArchiveEntry(this._context,e);const t=this._context.archive_read_last_error(this._archive);if(t!==ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(t)})}dataRead(e,t,r){t=e.byteOffset+(t||0),r=r||e.byteLength;const _=this._context.archive_read_data(this._archive,t,r);if(_<0)throw new Error(this.errorString,{cause:errorCodeToString(_)});return _}dataSkip(){return this._context.archive_read_data_skip(this._archive)}set onopen(e){this._context.archive_read_set_open_callback(this._archive,e)}set onread(e){this._context.archive_read_set_read_callback(this._archive,e)}set onclose(e){this._context.archive_read_set_close_callback(this._archive,e)}}class ArchiveWrite extends ArchiveBase{constructor(e,t){super(e,t)}release(){this._context.archive_write_free(this._archive)}set format(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_write_set_format_by_name(this._archive,t);if(this._context.archive_buffer_free(t),r!=ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(r)})}set options(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_write_set_options(this._archive,t);if(this._context.archive_buffer_free(t),r!=ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(r)})}set passphrase(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_write_set_passphrase(this._archive,t);if(this._context.archive_buffer_free(t),r!=ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(r)})}addFilter(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_write_add_filter_by_name(this._archive,t);if(this._context.archive_buffer_free(t),r!=ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(r)})}setFormatFilterByExt(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_write_set_format_filter_by_ext(this._archive,t);if(this._context.archive_buffer_free(t),r!=ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(r)})}set onopen(e){this._context.archive_write_set_open_callback(this._archive,e)}set onwrite(e){this._context.archive_write_set_write_callback(this._archive,e)}set onclose(e){this._context.archive_write_set_open_callback(this._archive,e)}open(){const e=this._context.archive_write_open(this._archive);if(e!==ARCHIVE_OK)throw new Error(this.errorString,{cause:errorCodeToString(e)})}close(){this._context.archive_write_close(this._archive)}writeHeader(e){return this._context.archive_write_header(this._archive,e.memoryOffset)}writeData(e,t,r){t=e.byteOffset+(t||0),r=r||e.byteLength-t;const _=this._context.archive_write_data(this._archive,t,r);if(_<0)throw new Error(this.errorString,{cause:errorCodeToString(_)});return _}}class Archive{_context;_version="";_versionDetails="";constructor(e){this._context=e}get version(){if(!this._version){const e=this._context.archive_version();this._version=StringExtras.fromBuffer(this._context.memoryBuffer,e)}return this._version}get versionDetails(){if(!this._versionDetails){const e=this._context.archive_version_details();this._versionDetails=StringExtras.fromBuffer(this._context.memoryBuffer,e)}return this._versionDetails}setlocale(e){const t=this._context.archive_buffer_from(e);if(!t)throw new Error(NO_MEMORY);const r=this._context.archive_setlocale(t);if(r)return StringExtras.fromBuffer(this._context.memoryBuffer,r)}newRead(){const e=this._context.archive_read_new();if(!e)throw new Error(NO_MEMORY);return new ArchiveRead(this._context,e)}newWrite(){const e=this._context.archive_write_new();if(!e)throw new Error(NO_MEMORY);return new ArchiveWrite(this._context,e)}newEntry(){const e=this._context.archive_entry_new();if(!e)throw new Error(NO_MEMORY);return new ArchiveEntry(this._context,e)}newBuffer(e){const t=this._context.archive_buffer_new(e);if(!t)throw new Error(NO_MEMORY);return new ArchiveBuffer(this._context,t,e)}static async instantiate(e){let t;const r={env:{archive_open_handler:e=>t.archive_open_handler(e),archive_read_handler:(e,r,_)=>t.archive_read_handler(e,r,_),archive_write_handler:(e,r,_)=>t.archive_write_handler(e,r,_),archive_close_handler:e=>t.archive_close_handler(e)}},_=(await WebAssembly.instantiate(e,r)).instance.exports;return t=new ArchiveContext(_,_.memory),new Archive(t)}}var FileSystem=__webpack_require__(570),ArchiveOperations;async function fetchBuffer(e){if(!e.startsWith("http://")&&!e.startsWith("https://")){const t=e.startsWith("file://")?external_node_url_default().fileURLToPath(e):e;return await external_node_fs_default().promises.readFile(t)}const t=await fetch(e);return Buffer.from(await t.arrayBuffer())}async function newArchiveContext(e){return"string"==typeof e&&(e=await fetchBuffer(e)),Archive.instantiate(e)}let g_archive;async function getArchiveContext(e){if(void 0!==e)return newArchiveContext(e);if(!g_archive){const e=external_node_path_default().join((0,FileSystem.Pi)(),"libarchive.wasm");g_archive=await newArchiveContext(e)}return g_archive}function setlocale(e,t,r){if(void 0===t&&(t=process.env.LANG||process.env.LANGUAGE||process.env.LC_ALL||process.env.LC_MESSAGES),void 0!==t){const _=e.setlocale(t);r&&void 0===_&&console.warn(`Unable to set locale ${t}`)}}!function(e){e.decompress=async function(e,t,r){const _=e.newRead();_.supportFilterAll(),_.supportFormatAll();const i=[t];_.onread=()=>i.shift(),_.open();const a=e.newBuffer(4092);for(;;){const e=_.nextHeader();if(!e)break;const t=e.pathname;if(!t){_.dataSkip();continue}const i={pathname:t,size:e.size,mode:e.mode};let n=0;const s=e.mode&AE_IFMT;if(s===AE_IFDIR){const e=r.dirEntry(i);e instanceof Promise&&await e}else if(s===AE_IFREG){const s=r.fileEntry(i);let o=s instanceof Promise?await s:s;for(n=e.size||0;n>0;){let e=_.dataRead(a);for(;e;){const t=o.writeData(a.buffer,a.byteOffset,e),r=t instanceof Promise?await t:t;e-=r,n-=r}}0!=_.dataRead(a)&&console.warn(`${t} file has wrong data size (${n})`);continue}0==n&&_.dataSkip()}a.release(),_.close(),_.release()},e.compress=async function(e,t,r){const _=e.newWrite();_.setFormatFilterByExt(r);const i=e.newBuffer(8192),a=new Array;_.onwrite=e=>{a.push(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength))};const n=async()=>{for(;;){const e=a.shift();if(!e)return;let r=0,_=e.byteLength;for(;_;){const i=t.writeData(e,r,_),a=i instanceof Promise?await i:i;r+=a,_-=a}}};for(_.open();;){const r=t.nextEntry(),a=r instanceof Promise?await r:r;if(!a)break;const s=e.newEntry();if(s.pathname=a.pathname,s.mode=a.mode,void 0!==a.size&&(s.size=a.size),_.writeHeader(s),a.size){let e=a.size;for(;e;){const t=a.readData(i.buffer,i.byteOffset,i.byteLength),r=t instanceof Promise?await t:t;_.writeData(i,0,r),e-=r}}s.release(),await n()}_.close(),await n(),i.release(),_.release()}}(ArchiveOperations||(ArchiveOperations={}));const libarchive=Object.assign(getArchiveContext,{ARCHIVE_OK,ARCHIVE_RETRY,ARCHIVE_WARN,ARCHIVE_FAILED,ARCHIVE_FATAL,AE_IFMT,AE_IFREG,AE_IFLNK,AE_IFSOCK,AE_IFCHR,AE_IFBLK,AE_IFDIR,AE_IFIFO,async decompress(e,t,r){const _=r&&r.verbose;"string"==typeof e&&(e=await fetchBuffer(e));const i=external_node_path_default().resolve(t?FileSystem.Qo.representPathAsNative(t):""),a=new FileSystem.ed,n={async dirEntry(e){_&&console.log("x",e.pathname);const t=external_node_path_default().join(i,FileSystem.Qo.representPathAsNative(e.pathname));await a.mkdir(t,{recursive:!0})},async fileEntry(e){_&&console.log("x",e.pathname);const t=external_node_path_default().join(i,FileSystem.Qo.representPathAsNative(e.pathname)),r=external_node_path_default().dirname(t);let n;await a.mkdir(r,{recursive:!0});let s=e.size||0;return{async writeData(e,r,_){if(!s||s<_)throw new Error(`Invalid size ${_} used`);n||(n=await external_node_fs_default().promises.open(t,"w"));const i=new Uint8Array(e,r,_),{bytesWritten:a}=await n.write(i);return s-=a,s||await n.close(),a}}}},s=await getArchiveContext(r?.moduleUrl);return setlocale(s,r?.locale,r?.verbose),ArchiveOperations.decompress(s,e,n)},async compress(e,t,r){const _=r&&r.verbose,i=r&&r.directory||process.cwd(),a=await external_node_fs_default().promises.open(t,"w"),n=await(0,FileSystem.a8)([e].flat(),i),s={async nextEntry(){let e,t,r=n.shift();for(;;){if(!r)return;if(r.stat.isFile())e=r.stat.size;else if(!r.stat.isDirectory()){_&&console.warn(r.name,"skipped");continue}_&&console.log(r.name);break}return{pathname:r.name,mode:r.stat.mode,size:e,async readData(_,i,a){if(!e)throw new Error("No Data");t||(t=await external_node_fs_default().promises.open(r.filepath,"r"));const n=new Uint8Array(_,i,Math.min(a,e)),{bytesRead:s}=await t.read(n);return e-=s,e||await t.close(),s}}},async writeData(e,t,r){const{bytesWritten:_}=await a.write(new Uint8Array(e,t,r));return _}},o=await getArchiveContext(r?.moduleUrl);setlocale(o,r?.locale,r?.verbose);const c=await ArchiveOperations.compress(o,s,t);return await a.close(),c}}),NodeLibrary=libarchive;return __webpack_exports__=__webpack_exports__.default,__webpack_exports__})());