diff --git a/django_file_form/static/file_form/file_form.js b/django_file_form/static/file_form/file_form.js index fb0841f7..ca579b4a 100644 --- a/django_file_form/static/file_form/file_form.js +++ b/django_file_form/static/file_form/file_form.js @@ -3588,7 +3588,7 @@ * * @author Dan Kogai (https://github.com/dankogai) */ - const version = '3.7.7'; + const version = '3.7.8'; /** * @deprecated use lowercase `version`. */ @@ -3742,17 +3742,24 @@ if (!b64re.test(asc)) throw new TypeError('malformed base64.'); asc += '=='.slice(2 - (asc.length & 3)); - let u24, bin = '', r1, r2; + let u24, r1, r2; + let binArray = []; // use array to avoid minor gc in loop for (let i = 0; i < asc.length;) { u24 = b64tab[asc.charAt(i++)] << 18 | b64tab[asc.charAt(i++)] << 12 | (r1 = b64tab[asc.charAt(i++)]) << 6 | (r2 = b64tab[asc.charAt(i++)]); - bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) - : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) - : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); + if (r1 === 64) { + binArray.push(_fromCC(u24 >> 16 & 255)); + } + else if (r2 === 64) { + binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255)); + } + else { + binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255)); + } } - return bin; + return binArray.join(''); }; /** * does what `window.atob` of web browsers do. diff --git a/django_file_form/static/file_form/file_form.js.map b/django_file_form/static/file_form/file_form.js.map index 3ce2d983..94fc3472 100644 --- a/django_file_form/static/file_form/file_form.js.map +++ b/django_file_form/static/file_form/file_form.js.map @@ -1 +1 @@ -{"version":3,"file":"file_form.js","sources":["../../../frontend/src/auto_init_file_forms.ts","../../../frontend/node_modules/mime/dist/types/standard.js","../../../frontend/node_modules/mime/dist/src/Mime.js","../../../frontend/node_modules/mime/dist/src/index_lite.js","../../../frontend/node_modules/picomatch/lib/constants.js","../../../frontend/node_modules/picomatch/lib/utils.js","../../../frontend/node_modules/picomatch/lib/scan.js","../../../frontend/node_modules/picomatch/lib/parse.js","../../../frontend/node_modules/picomatch/lib/picomatch.js","../../../frontend/node_modules/picomatch/posix.js","../../../frontend/src/accepted_file_types.ts","../../../frontend/src/drop_area.ts","../../../frontend/node_modules/escape-html/index.js","../../../frontend/src/util.ts","../../../frontend/src/render_upload_file.ts","../../../frontend/src/uploads/base_upload.ts","../../../frontend/node_modules/url-join/lib/url-join.js","../../../frontend/src/uploads/s3_utils.ts","../../../frontend/src/uploads/s3_upload.ts","../../../frontend/node_modules/tus-js-client/lib/error.js","../../../frontend/node_modules/tus-js-client/lib/logger.js","../../../frontend/node_modules/tus-js-client/lib/noopUrlStorage.js","../../../frontend/node_modules/js-base64/base64.mjs","../../../frontend/node_modules/requires-port/index.js","../../../frontend/node_modules/querystringify/index.js","../../../frontend/node_modules/url-parse/index.js","../../../frontend/node_modules/tus-js-client/lib/uuid.js","../../../frontend/node_modules/tus-js-client/lib/upload.js","../../../frontend/node_modules/tus-js-client/lib/browser/isReactNative.js","../../../frontend/node_modules/tus-js-client/lib/browser/uriToBlob.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/isCordova.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/readAsByteArray.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/FileSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/StreamSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileReader.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileSignature.js","../../../frontend/node_modules/tus-js-client/lib/browser/httpStack.js","../../../frontend/node_modules/tus-js-client/lib/browser/urlStorage.js","../../../frontend/node_modules/tus-js-client/lib/browser/index.js","../../../frontend/src/uploads/tus_utils.ts","../../../frontend/src/uploads/tus_upload.ts","../../../frontend/src/uploads/uploaded_file.ts","../../../frontend/src/file_field.ts","../../../frontend/src/init_upload_fields.ts","../../../frontend/src/init_form_set.ts","../../../frontend/src/file_form.ts"],"sourcesContent":["const findForm = (element: Element): HTMLElement | null => {\n const parent = element.parentElement;\n\n if (!parent) {\n return null;\n }\n\n if (parent.tagName === \"FORM\") {\n return parent;\n }\n\n return findForm(parent);\n};\n\nconst unique = (values: unknown[]): unknown[] =>\n Array.from(new Set(values).values());\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nconst autoInitFileForms = (): void => {\n const initUploadFields = window.initUploadFields as () => void; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n\n const forms = unique(\n Array.from(document.querySelectorAll(\".dff-uploader\")).map(findForm)\n );\n forms.forEach(initUploadFields);\n};\n\nexport default autoInitFileForms;\n","const types = {\n 'application/andrew-inset': ['ez'],\n 'application/appinstaller': ['appinstaller'],\n 'application/applixware': ['aw'],\n 'application/appx': ['appx'],\n 'application/appxbundle': ['appxbundle'],\n 'application/atom+xml': ['atom'],\n 'application/atomcat+xml': ['atomcat'],\n 'application/atomdeleted+xml': ['atomdeleted'],\n 'application/atomsvc+xml': ['atomsvc'],\n 'application/atsc-dwd+xml': ['dwd'],\n 'application/atsc-held+xml': ['held'],\n 'application/atsc-rsat+xml': ['rsat'],\n 'application/automationml-aml+xml': ['aml'],\n 'application/automationml-amlx+zip': ['amlx'],\n 'application/bdoc': ['bdoc'],\n 'application/calendar+xml': ['xcs'],\n 'application/ccxml+xml': ['ccxml'],\n 'application/cdfx+xml': ['cdfx'],\n 'application/cdmi-capability': ['cdmia'],\n 'application/cdmi-container': ['cdmic'],\n 'application/cdmi-domain': ['cdmid'],\n 'application/cdmi-object': ['cdmio'],\n 'application/cdmi-queue': ['cdmiq'],\n 'application/cpl+xml': ['cpl'],\n 'application/cu-seeme': ['cu'],\n 'application/cwl': ['cwl'],\n 'application/dash+xml': ['mpd'],\n 'application/dash-patch+xml': ['mpp'],\n 'application/davmount+xml': ['davmount'],\n 'application/dicom': ['dcm'],\n 'application/docbook+xml': ['dbk'],\n 'application/dssc+der': ['dssc'],\n 'application/dssc+xml': ['xdssc'],\n 'application/ecmascript': ['ecma'],\n 'application/emma+xml': ['emma'],\n 'application/emotionml+xml': ['emotionml'],\n 'application/epub+zip': ['epub'],\n 'application/exi': ['exi'],\n 'application/express': ['exp'],\n 'application/fdf': ['fdf'],\n 'application/fdt+xml': ['fdt'],\n 'application/font-tdpfr': ['pfr'],\n 'application/geo+json': ['geojson'],\n 'application/gml+xml': ['gml'],\n 'application/gpx+xml': ['gpx'],\n 'application/gxf': ['gxf'],\n 'application/gzip': ['gz'],\n 'application/hjson': ['hjson'],\n 'application/hyperstudio': ['stk'],\n 'application/inkml+xml': ['ink', 'inkml'],\n 'application/ipfix': ['ipfix'],\n 'application/its+xml': ['its'],\n 'application/java-archive': ['jar', 'war', 'ear'],\n 'application/java-serialized-object': ['ser'],\n 'application/java-vm': ['class'],\n 'application/javascript': ['*js'],\n 'application/json': ['json', 'map'],\n 'application/json5': ['json5'],\n 'application/jsonml+json': ['jsonml'],\n 'application/ld+json': ['jsonld'],\n 'application/lgr+xml': ['lgr'],\n 'application/lost+xml': ['lostxml'],\n 'application/mac-binhex40': ['hqx'],\n 'application/mac-compactpro': ['cpt'],\n 'application/mads+xml': ['mads'],\n 'application/manifest+json': ['webmanifest'],\n 'application/marc': ['mrc'],\n 'application/marcxml+xml': ['mrcx'],\n 'application/mathematica': ['ma', 'nb', 'mb'],\n 'application/mathml+xml': ['mathml'],\n 'application/mbox': ['mbox'],\n 'application/media-policy-dataset+xml': ['mpf'],\n 'application/mediaservercontrol+xml': ['mscml'],\n 'application/metalink+xml': ['metalink'],\n 'application/metalink4+xml': ['meta4'],\n 'application/mets+xml': ['mets'],\n 'application/mmt-aei+xml': ['maei'],\n 'application/mmt-usd+xml': ['musd'],\n 'application/mods+xml': ['mods'],\n 'application/mp21': ['m21', 'mp21'],\n 'application/mp4': ['*mp4', '*mpg4', 'mp4s', 'm4p'],\n 'application/msix': ['msix'],\n 'application/msixbundle': ['msixbundle'],\n 'application/msword': ['doc', 'dot'],\n 'application/mxf': ['mxf'],\n 'application/n-quads': ['nq'],\n 'application/n-triples': ['nt'],\n 'application/node': ['cjs'],\n 'application/octet-stream': [\n 'bin',\n 'dms',\n 'lrf',\n 'mar',\n 'so',\n 'dist',\n 'distz',\n 'pkg',\n 'bpk',\n 'dump',\n 'elc',\n 'deploy',\n 'exe',\n 'dll',\n 'deb',\n 'dmg',\n 'iso',\n 'img',\n 'msi',\n 'msp',\n 'msm',\n 'buffer',\n ],\n 'application/oda': ['oda'],\n 'application/oebps-package+xml': ['opf'],\n 'application/ogg': ['ogx'],\n 'application/omdoc+xml': ['omdoc'],\n 'application/onenote': [\n 'onetoc',\n 'onetoc2',\n 'onetmp',\n 'onepkg',\n 'one',\n 'onea',\n ],\n 'application/oxps': ['oxps'],\n 'application/p2p-overlay+xml': ['relo'],\n 'application/patch-ops-error+xml': ['xer'],\n 'application/pdf': ['pdf'],\n 'application/pgp-encrypted': ['pgp'],\n 'application/pgp-keys': ['asc'],\n 'application/pgp-signature': ['sig', '*asc'],\n 'application/pics-rules': ['prf'],\n 'application/pkcs10': ['p10'],\n 'application/pkcs7-mime': ['p7m', 'p7c'],\n 'application/pkcs7-signature': ['p7s'],\n 'application/pkcs8': ['p8'],\n 'application/pkix-attr-cert': ['ac'],\n 'application/pkix-cert': ['cer'],\n 'application/pkix-crl': ['crl'],\n 'application/pkix-pkipath': ['pkipath'],\n 'application/pkixcmp': ['pki'],\n 'application/pls+xml': ['pls'],\n 'application/postscript': ['ai', 'eps', 'ps'],\n 'application/provenance+xml': ['provx'],\n 'application/pskc+xml': ['pskcxml'],\n 'application/raml+yaml': ['raml'],\n 'application/rdf+xml': ['rdf', 'owl'],\n 'application/reginfo+xml': ['rif'],\n 'application/relax-ng-compact-syntax': ['rnc'],\n 'application/resource-lists+xml': ['rl'],\n 'application/resource-lists-diff+xml': ['rld'],\n 'application/rls-services+xml': ['rs'],\n 'application/route-apd+xml': ['rapd'],\n 'application/route-s-tsid+xml': ['sls'],\n 'application/route-usd+xml': ['rusd'],\n 'application/rpki-ghostbusters': ['gbr'],\n 'application/rpki-manifest': ['mft'],\n 'application/rpki-roa': ['roa'],\n 'application/rsd+xml': ['rsd'],\n 'application/rss+xml': ['rss'],\n 'application/rtf': ['rtf'],\n 'application/sbml+xml': ['sbml'],\n 'application/scvp-cv-request': ['scq'],\n 'application/scvp-cv-response': ['scs'],\n 'application/scvp-vp-request': ['spq'],\n 'application/scvp-vp-response': ['spp'],\n 'application/sdp': ['sdp'],\n 'application/senml+xml': ['senmlx'],\n 'application/sensml+xml': ['sensmlx'],\n 'application/set-payment-initiation': ['setpay'],\n 'application/set-registration-initiation': ['setreg'],\n 'application/shf+xml': ['shf'],\n 'application/sieve': ['siv', 'sieve'],\n 'application/smil+xml': ['smi', 'smil'],\n 'application/sparql-query': ['rq'],\n 'application/sparql-results+xml': ['srx'],\n 'application/sql': ['sql'],\n 'application/srgs': ['gram'],\n 'application/srgs+xml': ['grxml'],\n 'application/sru+xml': ['sru'],\n 'application/ssdl+xml': ['ssdl'],\n 'application/ssml+xml': ['ssml'],\n 'application/swid+xml': ['swidtag'],\n 'application/tei+xml': ['tei', 'teicorpus'],\n 'application/thraud+xml': ['tfi'],\n 'application/timestamped-data': ['tsd'],\n 'application/toml': ['toml'],\n 'application/trig': ['trig'],\n 'application/ttml+xml': ['ttml'],\n 'application/ubjson': ['ubj'],\n 'application/urc-ressheet+xml': ['rsheet'],\n 'application/urc-targetdesc+xml': ['td'],\n 'application/voicexml+xml': ['vxml'],\n 'application/wasm': ['wasm'],\n 'application/watcherinfo+xml': ['wif'],\n 'application/widget': ['wgt'],\n 'application/winhlp': ['hlp'],\n 'application/wsdl+xml': ['wsdl'],\n 'application/wspolicy+xml': ['wspolicy'],\n 'application/xaml+xml': ['xaml'],\n 'application/xcap-att+xml': ['xav'],\n 'application/xcap-caps+xml': ['xca'],\n 'application/xcap-diff+xml': ['xdf'],\n 'application/xcap-el+xml': ['xel'],\n 'application/xcap-ns+xml': ['xns'],\n 'application/xenc+xml': ['xenc'],\n 'application/xfdf': ['xfdf'],\n 'application/xhtml+xml': ['xhtml', 'xht'],\n 'application/xliff+xml': ['xlf'],\n 'application/xml': ['xml', 'xsl', 'xsd', 'rng'],\n 'application/xml-dtd': ['dtd'],\n 'application/xop+xml': ['xop'],\n 'application/xproc+xml': ['xpl'],\n 'application/xslt+xml': ['*xsl', 'xslt'],\n 'application/xspf+xml': ['xspf'],\n 'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'],\n 'application/yang': ['yang'],\n 'application/yin+xml': ['yin'],\n 'application/zip': ['zip'],\n 'application/zip+dotlottie': ['lottie'],\n 'audio/3gpp': ['*3gpp'],\n 'audio/aac': ['adts', 'aac'],\n 'audio/adpcm': ['adp'],\n 'audio/amr': ['amr'],\n 'audio/basic': ['au', 'snd'],\n 'audio/midi': ['mid', 'midi', 'kar', 'rmi'],\n 'audio/mobile-xmf': ['mxmf'],\n 'audio/mp3': ['*mp3'],\n 'audio/mp4': ['m4a', 'mp4a', 'm4b'],\n 'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'],\n 'audio/ogg': ['oga', 'ogg', 'spx', 'opus'],\n 'audio/s3m': ['s3m'],\n 'audio/silk': ['sil'],\n 'audio/wav': ['wav'],\n 'audio/wave': ['*wav'],\n 'audio/webm': ['weba'],\n 'audio/xm': ['xm'],\n 'font/collection': ['ttc'],\n 'font/otf': ['otf'],\n 'font/ttf': ['ttf'],\n 'font/woff': ['woff'],\n 'font/woff2': ['woff2'],\n 'image/aces': ['exr'],\n 'image/apng': ['apng'],\n 'image/avci': ['avci'],\n 'image/avcs': ['avcs'],\n 'image/avif': ['avif'],\n 'image/bmp': ['bmp', 'dib'],\n 'image/cgm': ['cgm'],\n 'image/dicom-rle': ['drle'],\n 'image/dpx': ['dpx'],\n 'image/emf': ['emf'],\n 'image/fits': ['fits'],\n 'image/g3fax': ['g3'],\n 'image/gif': ['gif'],\n 'image/heic': ['heic'],\n 'image/heic-sequence': ['heics'],\n 'image/heif': ['heif'],\n 'image/heif-sequence': ['heifs'],\n 'image/hej2k': ['hej2'],\n 'image/ief': ['ief'],\n 'image/jaii': ['jaii'],\n 'image/jais': ['jais'],\n 'image/jls': ['jls'],\n 'image/jp2': ['jp2', 'jpg2'],\n 'image/jpeg': ['jpg', 'jpeg', 'jpe'],\n 'image/jph': ['jph'],\n 'image/jphc': ['jhc'],\n 'image/jpm': ['jpm', 'jpgm'],\n 'image/jpx': ['jpx', 'jpf'],\n 'image/jxl': ['jxl'],\n 'image/jxr': ['jxr'],\n 'image/jxra': ['jxra'],\n 'image/jxrs': ['jxrs'],\n 'image/jxs': ['jxs'],\n 'image/jxsc': ['jxsc'],\n 'image/jxsi': ['jxsi'],\n 'image/jxss': ['jxss'],\n 'image/ktx': ['ktx'],\n 'image/ktx2': ['ktx2'],\n 'image/pjpeg': ['jfif'],\n 'image/png': ['png'],\n 'image/sgi': ['sgi'],\n 'image/svg+xml': ['svg', 'svgz'],\n 'image/t38': ['t38'],\n 'image/tiff': ['tif', 'tiff'],\n 'image/tiff-fx': ['tfx'],\n 'image/webp': ['webp'],\n 'image/wmf': ['wmf'],\n 'message/disposition-notification': ['disposition-notification'],\n 'message/global': ['u8msg'],\n 'message/global-delivery-status': ['u8dsn'],\n 'message/global-disposition-notification': ['u8mdn'],\n 'message/global-headers': ['u8hdr'],\n 'message/rfc822': ['eml', 'mime', 'mht', 'mhtml'],\n 'model/3mf': ['3mf'],\n 'model/gltf+json': ['gltf'],\n 'model/gltf-binary': ['glb'],\n 'model/iges': ['igs', 'iges'],\n 'model/jt': ['jt'],\n 'model/mesh': ['msh', 'mesh', 'silo'],\n 'model/mtl': ['mtl'],\n 'model/obj': ['obj'],\n 'model/prc': ['prc'],\n 'model/step': ['step', 'stp', 'stpnc', 'p21', '210'],\n 'model/step+xml': ['stpx'],\n 'model/step+zip': ['stpz'],\n 'model/step-xml+zip': ['stpxz'],\n 'model/stl': ['stl'],\n 'model/u3d': ['u3d'],\n 'model/vrml': ['wrl', 'vrml'],\n 'model/x3d+binary': ['*x3db', 'x3dbz'],\n 'model/x3d+fastinfoset': ['x3db'],\n 'model/x3d+vrml': ['*x3dv', 'x3dvz'],\n 'model/x3d+xml': ['x3d', 'x3dz'],\n 'model/x3d-vrml': ['x3dv'],\n 'text/cache-manifest': ['appcache', 'manifest'],\n 'text/calendar': ['ics', 'ifb'],\n 'text/coffeescript': ['coffee', 'litcoffee'],\n 'text/css': ['css'],\n 'text/csv': ['csv'],\n 'text/html': ['html', 'htm', 'shtml'],\n 'text/jade': ['jade'],\n 'text/javascript': ['js', 'mjs'],\n 'text/jsx': ['jsx'],\n 'text/less': ['less'],\n 'text/markdown': ['md', 'markdown'],\n 'text/mathml': ['mml'],\n 'text/mdx': ['mdx'],\n 'text/n3': ['n3'],\n 'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'],\n 'text/richtext': ['rtx'],\n 'text/rtf': ['*rtf'],\n 'text/sgml': ['sgml', 'sgm'],\n 'text/shex': ['shex'],\n 'text/slim': ['slim', 'slm'],\n 'text/spdx': ['spdx'],\n 'text/stylus': ['stylus', 'styl'],\n 'text/tab-separated-values': ['tsv'],\n 'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'],\n 'text/turtle': ['ttl'],\n 'text/uri-list': ['uri', 'uris', 'urls'],\n 'text/vcard': ['vcard'],\n 'text/vtt': ['vtt'],\n 'text/wgsl': ['wgsl'],\n 'text/xml': ['*xml'],\n 'text/yaml': ['yaml', 'yml'],\n 'video/3gpp': ['3gp', '3gpp'],\n 'video/3gpp2': ['3g2'],\n 'video/h261': ['h261'],\n 'video/h263': ['h263'],\n 'video/h264': ['h264'],\n 'video/iso.segment': ['m4s'],\n 'video/jpeg': ['jpgv'],\n 'video/jpm': ['*jpm', '*jpgm'],\n 'video/mj2': ['mj2', 'mjp2'],\n 'video/mp2t': ['ts', 'm2t', 'm2ts', 'mts'],\n 'video/mp4': ['mp4', 'mp4v', 'mpg4'],\n 'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'],\n 'video/ogg': ['ogv'],\n 'video/quicktime': ['qt', 'mov'],\n 'video/webm': ['webm'],\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map((ext) => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred)\n continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string')\n return null;\n const last = path.replace(/^.*[/\\\\]/s, '').toLowerCase();\n const ext = last.replace(/^.*\\./s, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath)\n return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string')\n return null;\n type = type?.split?.(';')[0];\n return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n }\n getAllExtensions(type) {\n if (typeof type !== 'string')\n return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes)._freeze();\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","import mime from \"mime/lite\";\nimport picomatch from \"picomatch/posix\";\n\nconst parseInputAccept = (inputAccept: string): [string[], string[]] => {\n const extensions: string[] = [];\n const mimeTypes: string[] = [];\n\n inputAccept\n .split(\",\")\n .map(mimeType => mimeType.trim())\n .filter(Boolean)\n .forEach(fileType => {\n if (fileType.startsWith(\".\")) {\n extensions.push(`*${fileType}`);\n } else {\n mimeTypes.push(fileType);\n }\n });\n\n return [extensions, mimeTypes];\n};\n\nclass AcceptedFileTypes {\n private extensions: string[];\n private mimeTypes: string[];\n\n constructor(inputAccept: string) {\n const [extensions, mimeTypes] = parseInputAccept(inputAccept);\n\n this.extensions = extensions;\n this.mimeTypes = mimeTypes;\n }\n\n public isAccepted(fileName: string): boolean {\n if (this.extensions.length === 0 && this.mimeTypes.length === 0) {\n return true;\n }\n return (\n this.isMimeTypeAccepted(mime.getType(fileName)) ||\n this.isExtensionAccepted(fileName)\n );\n }\n\n private isExtensionAccepted(fileName: string): boolean {\n if (this.extensions.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(fileName, this.extensions, { nocase: true });\n }\n\n private isMimeTypeAccepted(mimeType: null | string): boolean {\n if (!mimeType || this.mimeTypes.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(mimeType, this.mimeTypes);\n }\n}\n\nexport default AcceptedFileTypes;\n","import AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\n\nconst getEntriesFromDirectory = async (\n directoryEntry: FileSystemDirectoryEntry\n): Promise =>\n new Promise((resolve, reject) => {\n directoryEntry.createReader().readEntries(resolve, reject);\n });\n\nconst getFileFromFileSystemFileEntry = async (\n fileEntry: FileSystemFileEntry\n): Promise =>\n new Promise((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\nconst getFilesFromFileSystemEntries = async (\n entries: FileSystemEntry[]\n): Promise => {\n const result: File[] = [];\n\n for (const entry of entries) {\n const filesFromEntry = await getFilesFromFileSystemEntry(entry);\n filesFromEntry.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromFileSystemEntry = async (\n entry: FileSystemEntry\n): Promise => {\n const result: File[] = [];\n\n if (entry.isFile) {\n const file = await getFileFromFileSystemFileEntry(\n entry as FileSystemFileEntry\n );\n result.push(file);\n } else if (entry.isDirectory) {\n const entriesFromDirectory = await getEntriesFromDirectory(\n entry as FileSystemDirectoryEntry\n );\n const files = await getFilesFromFileSystemEntries(entriesFromDirectory);\n files.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromDataTransfer = async (\n dataTransfer: DataTransfer\n): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (dataTransfer.items) {\n const files: File[] = [];\n\n for (const item of dataTransfer.items) {\n const fileSystemEntry = item.webkitGetAsEntry();\n if (fileSystemEntry) {\n const filesFromEntry = await getFilesFromFileSystemEntry(\n fileSystemEntry\n );\n filesFromEntry.forEach(file => files.push(file));\n } else {\n const file = item.getAsFile();\n\n if (file) {\n files.push(file);\n }\n }\n }\n\n return files;\n } else {\n // backwards compatibility\n return [...dataTransfer.files];\n }\n};\n\nclass DropArea {\n acceptedFileTypes: AcceptedFileTypes;\n container: Element;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n\n constructor({\n container,\n inputAccept,\n onUploadFiles,\n renderer\n }: {\n container: Element;\n inputAccept: string;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n }) {\n this.container = container;\n this.onUploadFiles = onUploadFiles;\n this.acceptedFileTypes = new AcceptedFileTypes(inputAccept);\n this.renderer = renderer;\n\n container.addEventListener(\"dragenter\", () => {\n container.classList.add(\"dff-dropping\");\n });\n container.addEventListener(\"dragleave\", () => {\n container.classList.remove(\"dff-dropping\");\n });\n container.addEventListener(\"dragover\", e => {\n container.classList.add(\"dff-dropping\");\n e.preventDefault();\n });\n container.addEventListener(\"drop\", this.onDrop);\n }\n\n onDrop = (e: Event): void => {\n const dragEvent = e as DragEvent;\n this.container.classList.remove(\"dff-dropping\");\n dragEvent.preventDefault();\n dragEvent.stopPropagation();\n\n const uploadFiles = async (): Promise => {\n try {\n if (dragEvent.dataTransfer) {\n const files = await getFilesFromDataTransfer(dragEvent.dataTransfer);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.renderer.setErrorInvalidFiles(invalidFiles);\n void this.onUploadFiles(acceptedFiles);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n void uploadFiles();\n };\n}\n\nexport default DropArea;\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","export const formatBytes = (bytes: number, decimals: number): string => {\n if (bytes === 0) {\n return \"0 Bytes\";\n }\n\n const k = 1024;\n const dm = decimals <= 0 ? 0 : decimals || 2;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const n = parseFloat((bytes / k ** i).toFixed(dm));\n const size = sizes[i];\n\n if (size == null) {\n return \"\";\n } else {\n return `${n.toString()} ${size}`;\n }\n};\n\nexport const getInputNameWithPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? `${prefix}-${fieldName}` : fieldName);\n\nconst getInputNameWithoutPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? fieldName.slice(prefix.length + 1) : fieldName);\n\nexport const findInput = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): HTMLInputElement | null => {\n const inputNameWithPrefix = getInputNameWithPrefix(fieldName, prefix);\n const input = form.querySelector(`[name=\"${inputNameWithPrefix}\"]`);\n\n if (!input) {\n return null;\n }\n\n return input as HTMLInputElement;\n};\n\nexport const getUploadsFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-uploads`;\n\nexport const getInputValueForFormAndPrefix = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): string | undefined => findInput(form, fieldName, prefix)?.value;\n\nexport const getMetadataFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-metadata`;\n","import escape from \"escape-html\";\n\nimport { formatBytes } from \"./util.ts\";\n\nclass RenderUploadFile {\n container: Element;\n errors: Element;\n input: HTMLInputElement;\n translations: Record;\n\n constructor({\n input,\n parent,\n skipRequired,\n translations\n }: {\n input: HTMLInputElement;\n parent: Element;\n skipRequired: boolean;\n translations: Record;\n }) {\n this.container = this.createFilesContainer(parent);\n this.errors = this.createErrorContainer(parent);\n this.input = input;\n this.translations = translations;\n\n if (skipRequired) {\n this.input.required = false;\n }\n }\n\n public addNewUpload(filename: string, uploadIndex: number): HTMLElement {\n const div = this.addFile(filename, uploadIndex);\n\n const progressSpan = document.createElement(\"span\");\n progressSpan.className = \"dff-progress\";\n\n const innerSpan = document.createElement(\"span\");\n innerSpan.className = \"dff-progress-inner\";\n\n progressSpan.appendChild(innerSpan);\n div.appendChild(progressSpan);\n\n const cancelLink = document.createElement(\"a\");\n cancelLink.className = \"dff-cancel\";\n\n this.setTextContent(cancelLink, this.getTranslation(\"Cancel\"));\n cancelLink.setAttribute(\"data-index\", uploadIndex.toString());\n cancelLink.href = \"#\";\n div.appendChild(cancelLink);\n\n return div;\n }\n\n public addUploadedFile(\n filename: string,\n uploadIndex: number,\n filesize?: number\n ): HTMLElement {\n const element = this.addFile(filename, uploadIndex);\n this.setSuccess(uploadIndex, filesize);\n return element;\n }\n\n public clearInput(): void {\n const { input } = this;\n\n input.value = \"\";\n }\n\n public deleteFile(index: number): void {\n const div = this.findFileDiv(index);\n\n if (div) {\n div.remove();\n }\n }\n\n public disableCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.classList.add(\"dff-disabled\");\n }\n }\n\n public disableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.add(\"dff-disabled\");\n }\n }\n\n public findFileDiv(index: number): HTMLElement | null {\n return this.container.querySelector(`.dff-file-id-${index.toString()}`);\n }\n\n public removeDropHint(): void {\n const dropHint = this.container.querySelector(\".dff-drop-hint\");\n\n if (dropHint) {\n dropHint.remove();\n }\n }\n\n public renderDropHint(): void {\n if (this.container.querySelector(\".dff-drop-hint\")) {\n return;\n }\n\n const dropHint = document.createElement(\"div\");\n dropHint.className = \"dff-drop-hint\";\n this.setTextContent(dropHint, this.getTranslation(\"Drop your files here\"));\n\n this.container.appendChild(dropHint);\n }\n\n public setDeleteFailed(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Delete failed\"));\n\n this.enableDelete(index);\n }\n\n public setError(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Upload failed\"));\n\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-fail\");\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public setErrorInvalidFiles(files: File[]): void {\n const errorsMessages = document.createElement(\"ul\");\n\n for (const file of files) {\n const msg = document.createElement(\"li\");\n const invalidFileTypeMessage = this.getTranslation(\"Invalid file type\");\n this.setTextContent(msg, `${file.name}: ${invalidFileTypeMessage}`);\n msg.className = \"dff-error\";\n errorsMessages.appendChild(msg);\n }\n\n this.errors.replaceChildren(errorsMessages);\n this.clearInput();\n }\n\n public setSuccess(index: number, size?: number): void {\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-success\");\n\n if (size != null) {\n const fileSizeInfo = document.createElement(\"span\");\n this.setTextContent(fileSizeInfo, formatBytes(size, 2));\n fileSizeInfo.className = \"dff-filesize\";\n\n el.appendChild(fileSizeInfo);\n }\n\n const deleteLink = document.createElement(\"a\");\n this.setTextContent(deleteLink, this.getTranslation(\"Delete\"));\n deleteLink.className = \"dff-delete\";\n deleteLink.setAttribute(\"data-index\", index.toString());\n deleteLink.href = \"#\";\n\n el.appendChild(deleteLink);\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public updateProgress(index: number, percentage: string): void {\n const el = this.container.querySelector(`.dff-file-id-${index.toString()}`);\n if (el) {\n const innerProgressSpan = el.querySelector(\".dff-progress-inner\");\n\n if (innerProgressSpan) {\n (innerProgressSpan as HTMLElement).style.width = `${percentage}%`;\n }\n }\n }\n\n private addFile(filename: string, uploadIndex: number): HTMLElement {\n const div = document.createElement(\"div\");\n div.className = `dff-file dff-file-id-${uploadIndex.toString()}`;\n\n const nameSpan = document.createElement(\"span\");\n nameSpan.innerHTML = escape(filename);\n nameSpan.className = \"dff-filename\";\n nameSpan.setAttribute(\"data-index\", uploadIndex.toString());\n\n div.appendChild(nameSpan);\n this.container.appendChild(div);\n\n this.input.required = false;\n return div;\n }\n\n private createErrorContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-invalid-files\";\n parent.appendChild(div);\n return div;\n };\n\n private createFilesContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-files\";\n parent.appendChild(div);\n\n return div;\n };\n\n private enableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.remove(\"dff-disabled\");\n }\n }\n\n private findCancelSpan(index: number): HTMLElement | null {\n const el = this.findFileDiv(index);\n\n if (!el) {\n return null;\n }\n\n return el.querySelector(\".dff-cancel\");\n }\n\n private findDeleteLink(index: number): HTMLElement | null {\n const div = this.findFileDiv(index);\n if (!div) {\n return div;\n }\n\n return div.querySelector(\".dff-delete\");\n }\n\n private getTranslation(key: string) {\n return this.translations[key] ?? key;\n }\n\n private removeCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.remove();\n }\n }\n\n private removeProgress(index: number): void {\n const el = this.findFileDiv(index);\n\n if (el) {\n const progressSpan = el.querySelector(\".dff-progress\");\n\n if (progressSpan) {\n progressSpan.remove();\n }\n }\n }\n\n private setErrorMessage(index: number, message: string): void {\n const el = this.findFileDiv(index);\n if (!el) {\n return;\n }\n\n const originalMessageSpan = el.querySelector(\".dff-error\");\n if (originalMessageSpan) {\n originalMessageSpan.remove();\n }\n\n const span = document.createElement(\"span\");\n span.classList.add(\"dff-error\");\n this.setTextContent(span, message);\n\n el.appendChild(span);\n }\n\n private setTextContent(element: HTMLElement, text: string) {\n element.append(document.createTextNode(text));\n }\n}\n\nexport default RenderUploadFile;\n","export interface InitialExistingFile {\n name: string;\n size: number;\n type: \"existing\";\n}\nexport type InitialFile =\n | InitialExistingFile\n | InitialPlaceholderFile\n | InitialS3File\n | InitialTusFile;\n\nexport interface InitialPlaceholderFile {\n id: string;\n name: string;\n size: number;\n type: \"placeholder\";\n}\n\nexport interface InitialS3File {\n id: string;\n name: string;\n original_name: string;\n size: number;\n type: \"s3\";\n}\n\nexport interface InitialTusFile {\n id: string;\n name: string;\n size: number;\n type: \"tus\";\n url: string;\n}\n\nexport type UploadType =\n | \"existing\"\n | \"placeholder\"\n | \"s3\"\n | \"tus\"\n | \"uploadedS3\"\n | \"uploadedTus\";\n\ninterface UploadParameters {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n}\n\ntype UploadStatus = \"done\" | \"error\" | \"uploading\";\n\nabstract class BaseUpload {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n\n constructor({ name, status, type, uploadIndex }: UploadParameters) {\n this.name = name;\n this.status = status;\n this.type = type;\n this.uploadIndex = uploadIndex;\n }\n\n public async abort(): Promise {\n //\n }\n public async delete(): Promise {\n //\n }\n\n public abstract getId(): string | undefined;\n public abstract getInitialFile(): InitialFile;\n public abstract getSize(): number | undefined;\n}\n\nexport default BaseUpload;\n","function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n}\n\nexport default function urlJoin() {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n}\n","import urljoin from \"url-join\";\n\nexport interface LocationInfo {\n location: string;\n}\n\nexport interface MultipartUpload {\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport interface Part {\n ETag: string;\n PartNumber: number;\n}\n\nexport interface UrlInfo {\n url: string;\n}\n\nexport const MB = 1024 * 1024;\n\ninterface AbortMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport const abortMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n uploadId\n}: AbortMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, `?key=${filename}`);\n return fetch(url, {\n headers: headers,\n method: \"delete\"\n }).then(response => {\n return response.json();\n });\n};\n\ninterface CompleteMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n parts: Part[];\n uploadId: string;\n}\n\nexport const completeMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n parts,\n uploadId\n}: CompleteMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, \"complete\", `?key=${filename}`);\n return fetch(url, {\n body: JSON.stringify({\n parts: parts\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as LocationInfo;\n });\n};\n\ninterface CreateMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n}\n\nexport const createMultipartUpload = ({\n csrfToken,\n endpoint,\n file,\n s3UploadDir\n}: CreateMultipartUploadParameters): Promise => {\n const headers = new Headers({\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n \"X-CSRFToken\": csrfToken\n });\n return fetch(endpoint, {\n body: JSON.stringify({\n contentType: file.type,\n filename: file.name,\n s3UploadDir: s3UploadDir\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as MultipartUpload;\n });\n};\n\nexport const getChunkSize = (file: File): number =>\n Math.ceil(file.size / 10000);\n\ninterface PrepareUploadPartParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n number: number;\n uploadId: string;\n}\n\nexport const prepareUploadPart = ({\n csrfToken,\n endpoint,\n key,\n number,\n uploadId\n}: PrepareUploadPartParameters): Promise => {\n const filename = encodeURIComponent(key);\n const headers = new Headers({ \"X-CSRFToken\": csrfToken });\n const url = urljoin(\n endpoint,\n uploadId,\n number.toString(),\n `?key=${filename}`\n );\n return fetch(url, {\n headers: headers,\n method: \"get\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as UrlInfo;\n });\n};\n\nexport const remove = (arr: unknown[], el: unknown): void => {\n const i = arr.indexOf(el);\n if (i !== -1) {\n arr.splice(i, 1);\n }\n};\n","// The following code is adapted from https://github.com/transloadit/uppy/blob/master/packages/%40uppy/aws-s3-multipart/src/MultipartUploader.js\n// which is released under a MIT License (https://github.com/transloadit/uppy/blob/master/LICENSE)\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport {\n abortMultipartUpload,\n completeMultipartUpload,\n createMultipartUpload,\n getChunkSize,\n MB,\n MultipartUpload,\n Part,\n prepareUploadPart,\n remove,\n UrlInfo\n} from \"./s3_utils.ts\";\n\ninterface ChunkState {\n busy: boolean;\n done: boolean;\n etag?: string;\n uploaded: number;\n}\n\ninterface S3UploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n uploadIndex: number;\n}\n\nclass S3Upload extends BaseUpload {\n public onError?: (error: unknown) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n\n private chunks: Blob[];\n private chunkState: ChunkState[];\n private createdPromise: Promise;\n private csrfToken: string;\n private endpoint: string;\n private file: File;\n private key: null | string;\n private parts: Part[];\n private s3UploadDir: string;\n private uploadId: null | string;\n private uploading: XMLHttpRequest[];\n\n constructor({\n csrfToken,\n endpoint,\n file,\n s3UploadDir,\n uploadIndex\n }: S3UploadParameters) {\n super({ name: file.name, status: \"uploading\", type: \"s3\", uploadIndex });\n\n this.csrfToken = csrfToken;\n this.endpoint = endpoint;\n this.file = file;\n this.s3UploadDir = s3UploadDir;\n\n this.key = null;\n this.uploadId = null;\n this.parts = [];\n\n // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n // upload was created already. That also ensures that the sequencing is right\n // (so the `OP` definitely happens if the upload is created).\n //\n // This mostly exists to make `abortUpload` work well: only sending the abort request if\n // the upload was already created, and if the createMultipartUpload request is still in flight,\n // aborting it immediately after it finishes.\n this.createdPromise = Promise.reject(new Error());\n this.chunks = [];\n this.chunkState = [];\n this.uploading = [];\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n\n this.initChunks();\n\n this.createdPromise.catch(() => ({})); // silence uncaught rejection warning\n }\n\n public async abort(): Promise {\n this.uploading.slice().forEach(xhr => {\n xhr.abort();\n });\n this.uploading = [];\n\n await this.createdPromise;\n\n if (this.key && this.uploadId) {\n await abortMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n uploadId: this.uploadId\n });\n }\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getId(): string | undefined {\n return this.uploadId ?? undefined;\n }\n\n public getInitialFile(): InitialFile {\n return {\n id: this.uploadId ?? \"\",\n name: this.key ?? \"\",\n original_name: this.file.name,\n size: this.file.size,\n type: \"s3\"\n };\n }\n\n public getSize(): number {\n return this.file.size;\n }\n\n public start(): void {\n void this.createUpload();\n }\n\n private completeUpload(): Promise {\n // Parts may not have completed uploading in sorted order, if limit > 1.\n this.parts.sort((a, b) => a.PartNumber - b.PartNumber);\n\n if (!this.uploadId || !this.key) {\n return Promise.resolve();\n }\n\n return completeMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n parts: this.parts,\n uploadId: this.uploadId\n }).then(\n () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n },\n (err: unknown) => {\n this.handleError(err as Error);\n }\n );\n }\n\n private createUpload(): Promise {\n this.createdPromise = createMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n file: this.file,\n s3UploadDir: this.s3UploadDir\n });\n return this.createdPromise\n .then((result: MultipartUpload | null) => {\n const valid =\n typeof result === \"object\" &&\n result &&\n typeof result.uploadId === \"string\" &&\n typeof result.key === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.\"\n );\n }\n\n this.key = result.key;\n this.uploadId = result.uploadId;\n\n this.uploadParts();\n })\n .catch((err: unknown) => {\n this.handleError(err);\n });\n }\n\n private handleError(error: unknown): void {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n }\n\n private initChunks(): void {\n const chunks: Blob[] = [];\n const desiredChunkSize = getChunkSize(this.file);\n // at least 5MB per request, at most 10k requests\n const minChunkSize = Math.max(5 * MB, Math.ceil(this.file.size / 10000));\n const chunkSize = Math.max(desiredChunkSize, minChunkSize);\n\n for (let i = 0; i < this.file.size; i += chunkSize) {\n const end = Math.min(this.file.size, i + chunkSize);\n chunks.push(this.file.slice(i, end));\n }\n\n this.chunks = chunks;\n this.chunkState = chunks.map(() => ({\n busy: false,\n done: false,\n uploaded: 0\n }));\n }\n\n private onPartComplete(index: number, etag: string): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.etag = etag;\n state.done = true;\n }\n\n const part = {\n ETag: etag,\n PartNumber: index + 1\n };\n this.parts.push(part);\n\n this.uploadParts();\n }\n\n private onPartProgress(index: number, sent: number): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.uploaded = sent;\n }\n\n if (this.onProgress) {\n const totalUploaded = this.chunkState.reduce((n, c) => n + c.uploaded, 0);\n this.onProgress(totalUploaded, this.file.size);\n }\n }\n\n private uploadPart(index: number): Promise {\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = true;\n }\n\n if (!this.key || !this.uploadId) {\n return Promise.resolve();\n }\n\n return prepareUploadPart({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n number: index + 1,\n uploadId: this.uploadId\n })\n .then(result => {\n const valid =\n typeof result === \"object\" && typeof result.url === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.\"\n );\n }\n return result;\n })\n .then(\n ({ url }: UrlInfo) => {\n this.uploadPartBytes(index, url);\n },\n (err: unknown) => {\n this.handleError(err);\n }\n );\n }\n\n private uploadPartBytes(index: number, url: string): void {\n const body = this.chunks[index];\n const xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", url, true);\n xhr.responseType = \"text\";\n\n this.uploading.push(xhr);\n\n xhr.upload.addEventListener(\"progress\", ev => {\n if (!ev.lengthComputable) {\n return;\n }\n\n this.onPartProgress(index, ev.loaded);\n });\n\n xhr.addEventListener(\"abort\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n if (xhr.status < 200 || xhr.status >= 300) {\n this.handleError(new Error(\"Non 2xx\"));\n return;\n }\n\n this.onPartProgress(index, body?.size ?? 0);\n\n // NOTE This must be allowed by CORS.\n const etag = xhr.getResponseHeader(\"ETag\");\n if (etag === null) {\n this.handleError(\n new Error(\n \"AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.\"\n )\n );\n return;\n }\n\n this.onPartComplete(index, etag);\n });\n\n xhr.addEventListener(\"error\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n const error = new Error(\"Unknown error\");\n this.handleError(error);\n });\n xhr.send(body);\n }\n\n private uploadParts(): void {\n const need = 1 - this.uploading.length;\n if (need === 0) {\n return;\n }\n\n // All parts are uploaded.\n if (this.chunkState.every(state => state.done)) {\n void this.completeUpload();\n return;\n }\n\n const candidates = [];\n for (let i = 0; i < this.chunkState.length; i++) {\n const state = this.chunkState[i];\n\n if (!state || state.done || state.busy) {\n continue;\n }\n\n candidates.push(i);\n if (candidates.length >= need) {\n break;\n }\n }\n\n candidates.forEach(index => {\n void this.uploadPart(index);\n });\n }\n}\n\nexport default S3Upload;\n","class DetailedError extends Error {\n constructor(message, causingErr = null, req = null, res = null) {\n super(message)\n\n this.originalRequest = req\n this.originalResponse = res\n this.causingError = causingErr\n\n if (causingErr != null) {\n message += `, caused by ${causingErr.toString()}`\n }\n\n if (req != null) {\n const requestId = req.getHeader('X-Request-ID') || 'n/a'\n const method = req.getMethod()\n const url = req.getURL()\n const status = res ? res.getStatus() : 'n/a'\n const body = res ? res.getBody() || '' : 'n/a'\n message += `, originated from request (method: ${method}, url: ${url}, response code: ${status}, response text: ${body}, request id: ${requestId})`\n }\n this.message = message\n }\n}\n\nexport default DetailedError\n","let isEnabled = false\n\nexport function enableDebugLog() {\n isEnabled = true\n}\n\nexport function log(msg) {\n if (!isEnabled) return\n console.log(msg)\n}\n","export default class NoopUrlStorage {\n listAllUploads() {\n return Promise.resolve([])\n }\n\n findUploadsByFingerprint(_fingerprint) {\n return Promise.resolve([])\n }\n\n removeUpload(_urlStorageKey) {\n return Promise.resolve()\n }\n\n addUpload(_fingerprint, _upload) {\n return Promise.resolve(null)\n }\n}\n","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.7';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, bin = '', r1, r2;\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n }\n return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n const v = c === 'x' ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n}\n","import { Base64 } from 'js-base64'\nimport URL from 'url-parse'\nimport DetailedError from './error.js'\nimport { log } from './logger.js'\nimport uuid from './uuid.js'\n\nconst PROTOCOL_TUS_V1 = 'tus-v1'\nconst PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03'\nconst PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05'\n\nconst defaultOptions = {\n endpoint: null,\n\n uploadUrl: null,\n metadata: {},\n metadataForPartialUploads: {},\n fingerprint: null,\n uploadSize: null,\n\n onProgress: null,\n onChunkComplete: null,\n onSuccess: null,\n onError: null,\n onUploadUrlAvailable: null,\n\n overridePatchMethod: false,\n headers: {},\n addRequestId: false,\n onBeforeRequest: null,\n onAfterResponse: null,\n onShouldRetry: defaultOnShouldRetry,\n\n chunkSize: Number.POSITIVE_INFINITY,\n retryDelays: [0, 1000, 3000, 5000],\n parallelUploads: 1,\n parallelUploadBoundaries: null,\n storeFingerprintForResuming: true,\n removeFingerprintOnSuccess: false,\n uploadLengthDeferred: false,\n uploadDataDuringCreation: false,\n\n urlStorage: null,\n fileReader: null,\n httpStack: null,\n\n protocol: PROTOCOL_TUS_V1,\n}\n\nclass BaseUpload {\n constructor(file, options) {\n // Warn about removed options from previous versions\n if ('resume' in options) {\n console.log(\n 'tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.',\n )\n }\n\n // The default options will already be added from the wrapper classes.\n this.options = options\n\n // Cast chunkSize to integer\n this.options.chunkSize = Number(this.options.chunkSize)\n\n // The storage module used to store URLs\n this._urlStorage = this.options.urlStorage\n\n // The underlying File/Blob object\n this.file = file\n\n // The URL against which the file will be uploaded\n this.url = null\n\n // The underlying request object for the current PATCH request\n this._req = null\n\n // The fingerpinrt for the current file (set after start())\n this._fingerprint = null\n\n // The key that the URL storage returned when saving an URL with a fingerprint,\n this._urlStorageKey = null\n\n // The offset used in the current PATCH request\n this._offset = null\n\n // True if the current PATCH request has been aborted\n this._aborted = false\n\n // The file's size in bytes\n this._size = null\n\n // The Source object which will wrap around the given file and provides us\n // with a unified interface for getting its size and slice chunks from its\n // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n this._source = null\n\n // The current count of attempts which have been made. Zero indicates none.\n this._retryAttempt = 0\n\n // The timeout's ID which is used to delay the next retry\n this._retryTimeout = null\n\n // The offset of the remote upload before the latest attempt was started.\n this._offsetBeforeRetry = 0\n\n // An array of BaseUpload instances which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploads = null\n\n // An array of upload URLs which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploadUrls = null\n }\n\n /**\n * Use the Termination extension to delete an upload from the server by sending a DELETE\n * request to the specified upload URL. This is only possible if the server supports the\n * Termination extension. If the `options.retryDelays` property is set, the method will\n * also retry if an error ocurrs.\n *\n * @param {String} url The upload's URL which will be terminated.\n * @param {object} options Optional options for influencing HTTP requests.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n static terminate(url, options = {}) {\n const req = openRequest('DELETE', url, options)\n\n return sendRequest(req, null, options)\n .then((res) => {\n // A 204 response indicates a successfull request\n if (res.getStatus() === 204) {\n return\n }\n\n throw new DetailedError('tus: unexpected response while terminating upload', null, req, res)\n })\n .catch((err) => {\n if (!(err instanceof DetailedError)) {\n err = new DetailedError('tus: failed to terminate upload', err, req, null)\n }\n\n if (!shouldRetry(err, 0, options)) {\n throw err\n }\n\n // Instead of keeping track of the retry attempts, we remove the first element from the delays\n // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n // We recursively call the terminate function will removing elements from the retryDelays array.\n const delay = options.retryDelays[0]\n const remainingDelays = options.retryDelays.slice(1)\n const newOptions = {\n ...options,\n retryDelays: remainingDelays,\n }\n return new Promise((resolve) => setTimeout(resolve, delay)).then(() =>\n BaseUpload.terminate(url, newOptions),\n )\n })\n }\n\n findPreviousUploads() {\n return this.options\n .fingerprint(this.file, this.options)\n .then((fingerprint) => this._urlStorage.findUploadsByFingerprint(fingerprint))\n }\n\n resumeFromPreviousUpload(previousUpload) {\n this.url = previousUpload.uploadUrl || null\n this._parallelUploadUrls = previousUpload.parallelUploadUrls || null\n this._urlStorageKey = previousUpload.urlStorageKey\n }\n\n start() {\n const { file } = this\n\n if (!file) {\n this._emitError(new Error('tus: no file or stream to upload provided'))\n return\n }\n\n if (\n ![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(\n this.options.protocol,\n )\n ) {\n this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`))\n return\n }\n\n if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'))\n return\n }\n\n const { retryDelays } = this.options\n if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'))\n return\n }\n\n if (this.options.parallelUploads > 1) {\n // Test which options are incompatible with parallel uploads.\n for (const optionName of ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']) {\n if (this.options[optionName]) {\n this._emitError(\n new Error(`tus: cannot use the ${optionName} option when parallelUploads is enabled`),\n )\n return\n }\n }\n }\n\n if (this.options.parallelUploadBoundaries) {\n if (this.options.parallelUploads <= 1) {\n this._emitError(\n new Error(\n 'tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled',\n ),\n )\n return\n }\n if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n this._emitError(\n new Error(\n 'tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`',\n ),\n )\n return\n }\n }\n\n this.options\n .fingerprint(file, this.options)\n .then((fingerprint) => {\n if (fingerprint == null) {\n log(\n 'No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.',\n )\n } else {\n log(`Calculated fingerprint: ${fingerprint}`)\n }\n\n this._fingerprint = fingerprint\n\n if (this._source) {\n return this._source\n }\n return this.options.fileReader.openFile(file, this.options.chunkSize)\n })\n .then((source) => {\n this._source = source\n\n // First, we look at the uploadLengthDeferred option.\n // Next, we check if the caller has supplied a manual upload size.\n // Finally, we try to use the calculated size from the source object.\n if (this.options.uploadLengthDeferred) {\n this._size = null\n } else if (this.options.uploadSize != null) {\n this._size = Number(this.options.uploadSize)\n if (Number.isNaN(this._size)) {\n this._emitError(new Error('tus: cannot convert `uploadSize` option into a number'))\n return\n }\n } else {\n this._size = this._source.size\n if (this._size == null) {\n this._emitError(\n new Error(\n \"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\",\n ),\n )\n return\n }\n }\n\n // If the upload was configured to use multiple requests or if we resume from\n // an upload which used multiple requests, we start a parallel upload.\n if (this.options.parallelUploads > 1 || this._parallelUploadUrls != null) {\n this._startParallelUpload()\n } else {\n this._startSingleUpload()\n }\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a parallelized upload, where one file is split into\n * multiple request which are run in parallel.\n *\n * @api private\n */\n _startParallelUpload() {\n const totalSize = this._size\n let totalProgress = 0\n this._parallelUploads = []\n\n const partCount =\n this._parallelUploadUrls != null\n ? this._parallelUploadUrls.length\n : this.options.parallelUploads\n\n // The input file will be split into multiple slices which are uploaded in separate\n // requests. Here we get the start and end position for the slices.\n const parts =\n this.options.parallelUploadBoundaries ?? splitSizeIntoParts(this._source.size, partCount)\n\n // Attach URLs from previous uploads, if available.\n if (this._parallelUploadUrls) {\n parts.forEach((part, index) => {\n part.uploadUrl = this._parallelUploadUrls[index] || null\n })\n }\n\n // Create an empty list for storing the upload URLs\n this._parallelUploadUrls = new Array(parts.length)\n\n // Generate a promise for each slice that will be resolve if the respective\n // upload is completed.\n const uploads = parts.map((part, index) => {\n let lastPartProgress = 0\n\n return this._source.slice(part.start, part.end).then(\n ({ value }) =>\n new Promise((resolve, reject) => {\n // Merge with the user supplied options but overwrite some values.\n const options = {\n ...this.options,\n // If available, the partial upload should be resumed from a previous URL.\n uploadUrl: part.uploadUrl || null,\n // We take manually care of resuming for partial uploads, so they should\n // not be stored in the URL storage.\n storeFingerprintForResuming: false,\n removeFingerprintOnSuccess: false,\n // Reset the parallelUploads option to not cause recursion.\n parallelUploads: 1,\n // Reset this option as we are not doing a parallel upload.\n parallelUploadBoundaries: null,\n metadata: this.options.metadataForPartialUploads,\n // Add the header to indicate the this is a partial upload.\n headers: {\n ...this.options.headers,\n 'Upload-Concat': 'partial',\n },\n // Reject or resolve the promise if the upload errors or completes.\n onSuccess: resolve,\n onError: reject,\n // Based in the progress for this partial upload, calculate the progress\n // for the entire final upload.\n onProgress: (newPartProgress) => {\n totalProgress = totalProgress - lastPartProgress + newPartProgress\n lastPartProgress = newPartProgress\n this._emitProgress(totalProgress, totalSize)\n },\n // Wait until every partial upload has an upload URL, so we can add\n // them to the URL storage.\n onUploadUrlAvailable: () => {\n this._parallelUploadUrls[index] = upload.url\n // Test if all uploads have received an URL\n if (this._parallelUploadUrls.filter((u) => Boolean(u)).length === parts.length) {\n this._saveUploadInUrlStorage()\n }\n },\n }\n\n const upload = new BaseUpload(value, options)\n upload.start()\n\n // Store the upload in an array, so we can later abort them if necessary.\n this._parallelUploads.push(upload)\n }),\n )\n })\n\n let req\n // Wait until all partial uploads are finished and we can send the POST request for\n // creating the final upload.\n Promise.all(uploads)\n .then(() => {\n req = this._openRequest('POST', this.options.endpoint)\n req.setHeader('Upload-Concat', `final;${this._parallelUploadUrls.join(' ')}`)\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n return this._sendRequest(req, null)\n })\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n this._emitSuccess(res)\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n * uploaded in a sequential matter.\n *\n * @api private\n */\n _startSingleUpload() {\n // Reset the aborted flag when the upload is started or else the\n // _performUpload will stop before sending a request if the upload has been\n // aborted previously.\n this._aborted = false\n\n // The upload had been started previously and we should reuse this URL.\n if (this.url != null) {\n log(`Resuming upload from previous URL: ${this.url}`)\n this._resumeUpload()\n return\n }\n\n // A URL has manually been specified, so we try to resume\n if (this.options.uploadUrl != null) {\n log(`Resuming upload from provided URL: ${this.options.uploadUrl}`)\n this.url = this.options.uploadUrl\n this._resumeUpload()\n return\n }\n\n // An upload has not started for the file yet, so we start a new one\n log('Creating a new upload')\n this._createUpload()\n }\n\n /**\n * Abort any running request and stop the current upload. After abort is called, no event\n * handler will be invoked anymore. You can use the `start` method to resume the upload\n * again.\n * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n * current upload from the server.\n *\n * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n abort(shouldTerminate) {\n // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n if (this._parallelUploads != null) {\n for (const upload of this._parallelUploads) {\n upload.abort(shouldTerminate)\n }\n }\n\n // Stop any current running request.\n if (this._req !== null) {\n this._req.abort()\n // Note: We do not close the file source here, so the user can resume in the future.\n }\n this._aborted = true\n\n // Stop any timeout used for initiating a retry.\n if (this._retryTimeout != null) {\n clearTimeout(this._retryTimeout)\n this._retryTimeout = null\n }\n\n if (!shouldTerminate || this.url == null) {\n return Promise.resolve()\n }\n\n return (\n BaseUpload.terminate(this.url, this.options)\n // Remove entry from the URL storage since the upload URL is no longer valid.\n .then(() => this._removeFromUrlStorage())\n )\n }\n\n _emitHttpError(req, res, message, causingErr) {\n this._emitError(new DetailedError(message, causingErr, req, res))\n }\n\n _emitError(err) {\n // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n if (this._aborted) return\n\n // Check if we should retry, when enabled, before sending the error to the user.\n if (this.options.retryDelays != null) {\n // We will reset the attempt counter if\n // - we were already able to connect to the server (offset != null) and\n // - we were able to upload a small chunk of data to the server\n const shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry\n if (shouldResetDelays) {\n this._retryAttempt = 0\n }\n\n if (shouldRetry(err, this._retryAttempt, this.options)) {\n const delay = this.options.retryDelays[this._retryAttempt++]\n\n this._offsetBeforeRetry = this._offset\n\n this._retryTimeout = setTimeout(() => {\n this.start()\n }, delay)\n return\n }\n }\n\n if (typeof this.options.onError === 'function') {\n this.options.onError(err)\n } else {\n throw err\n }\n }\n\n /**\n * Publishes notification if the upload has been successfully completed.\n *\n * @param {object} lastResponse Last HTTP response.\n * @api private\n */\n _emitSuccess(lastResponse) {\n if (this.options.removeFingerprintOnSuccess) {\n // Remove stored fingerprint and corresponding endpoint. This causes\n // new uploads of the same file to be treated as a different file.\n this._removeFromUrlStorage()\n }\n\n if (typeof this.options.onSuccess === 'function') {\n this.options.onSuccess({ lastResponse })\n }\n }\n\n /**\n * Publishes notification when data has been sent to the server. This\n * data may not have been accepted by the server yet.\n *\n * @param {number} bytesSent Number of bytes sent to the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitProgress(bytesSent, bytesTotal) {\n if (typeof this.options.onProgress === 'function') {\n this.options.onProgress(bytesSent, bytesTotal)\n }\n }\n\n /**\n * Publishes notification when a chunk of data has been sent to the server\n * and accepted by the server.\n * @param {number} chunkSize Size of the chunk that was accepted by the server.\n * @param {number} bytesAccepted Total number of bytes that have been\n * accepted by the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n if (typeof this.options.onChunkComplete === 'function') {\n this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal)\n }\n }\n\n /**\n * Create a new upload using the creation extension by sending a POST\n * request to the endpoint. After successful creation the file will be\n * uploaded\n *\n * @api private\n */\n _createUpload() {\n if (!this.options.endpoint) {\n this._emitError(new Error('tus: unable to create upload because no endpoint is provided'))\n return\n }\n\n const req = this._openRequest('POST', this.options.endpoint)\n\n if (this.options.uploadLengthDeferred) {\n req.setHeader('Upload-Defer-Length', '1')\n } else {\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n let promise\n if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n this._offset = 0\n promise = this._addChunkToRequest(req)\n } else {\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', '?0')\n }\n promise = this._sendRequest(req, null)\n }\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n if (this._size === 0) {\n // Nothing to upload and file was successfully created\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._saveUploadInUrlStorage().then(() => {\n if (this.options.uploadDataDuringCreation) {\n this._handleUploadResponse(req, res)\n } else {\n this._offset = 0\n this._performUpload()\n }\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to create upload', err)\n })\n }\n\n /*\n * Try to resume an existing upload. First a HEAD request will be sent\n * to retrieve the offset. If the request fails a new upload will be\n * created. In the case of a successful response the file will be uploaded.\n *\n * @api private\n */\n _resumeUpload() {\n const req = this._openRequest('HEAD', this.url)\n const promise = this._sendRequest(req, null)\n\n promise\n .then((res) => {\n const status = res.getStatus()\n if (!inStatusCategory(status, 200)) {\n // If the upload is locked (indicated by the 423 Locked status code), we\n // emit an error instead of directly starting a new upload. This way the\n // retry logic can catch the error and will retry the upload. An upload\n // is usually locked for a short period of time and will be available\n // afterwards.\n if (status === 423) {\n this._emitHttpError(req, res, 'tus: upload is currently locked; retry later')\n return\n }\n\n if (inStatusCategory(status, 400)) {\n // Remove stored fingerprint and corresponding endpoint,\n // on client errors since the file can not be found\n this._removeFromUrlStorage()\n }\n\n if (!this.options.endpoint) {\n // Don't attempt to create a new upload if no endpoint is provided.\n this._emitHttpError(\n req,\n res,\n 'tus: unable to resume upload (new upload cannot be created without an endpoint)',\n )\n return\n }\n\n // Try to create a new upload\n this.url = null\n this._createUpload()\n return\n }\n\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n const length = Number.parseInt(res.getHeader('Upload-Length'), 10)\n if (\n Number.isNaN(length) &&\n !this.options.uploadLengthDeferred &&\n this.options.protocol === PROTOCOL_TUS_V1\n ) {\n this._emitHttpError(req, res, 'tus: invalid or missing length value')\n return\n }\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n this._saveUploadInUrlStorage().then(() => {\n // Upload has already been completed and we do not need to send additional\n // data to the server\n if (offset === length) {\n this._emitProgress(length, length)\n this._emitSuccess(res)\n return\n }\n\n this._offset = offset\n this._performUpload()\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to resume upload', err)\n })\n }\n\n /**\n * Start uploading the file using PATCH requests. The file will be divided\n * into chunks as specified in the chunkSize option. During the upload\n * the onProgress event handler may be invoked multiple times.\n *\n * @api private\n */\n _performUpload() {\n // If the upload has been aborted, we will not send the next PATCH request.\n // This is important if the abort method was called during a callback, such\n // as onChunkComplete or onProgress.\n if (this._aborted) {\n return\n }\n\n let req\n\n // Some browser and servers may not support the PATCH method. For those\n // cases, you can tell tus-js-client to use a POST request with the\n // X-HTTP-Method-Override header for simulating a PATCH request.\n if (this.options.overridePatchMethod) {\n req = this._openRequest('POST', this.url)\n req.setHeader('X-HTTP-Method-Override', 'PATCH')\n } else {\n req = this._openRequest('PATCH', this.url)\n }\n\n req.setHeader('Upload-Offset', `${this._offset}`)\n const promise = this._addChunkToRequest(req)\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while uploading chunk')\n return\n }\n\n this._handleUploadResponse(req, res)\n })\n .catch((err) => {\n // Don't emit an error if the upload was aborted manually\n if (this._aborted) {\n return\n }\n\n this._emitHttpError(req, null, `tus: failed to upload chunk at offset ${this._offset}`, err)\n })\n }\n\n /**\n * _addChunktoRequest reads a chunk from the source and sends it using the\n * supplied request object. It will not handle the response.\n *\n * @api private\n */\n _addChunkToRequest(req) {\n const start = this._offset\n let end = this._offset + this.options.chunkSize\n\n req.setProgressHandler((bytesSent) => {\n this._emitProgress(start + bytesSent, this._size)\n })\n\n if (this.options.protocol === PROTOCOL_TUS_V1) {\n req.setHeader('Content-Type', 'application/offset+octet-stream')\n } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Content-Type', 'application/partial-upload')\n }\n\n // The specified chunkSize may be Infinity or the calcluated end position\n // may exceed the file's size. In both cases, we limit the end position to\n // the input's total size for simpler calculations and correctness.\n if (\n (end === Number.POSITIVE_INFINITY || end > this._size) &&\n !this.options.uploadLengthDeferred\n ) {\n end = this._size\n }\n\n return this._source.slice(start, end).then(({ value, done }) => {\n const valueSize = value?.size ? value.size : 0\n\n // If the upload length is deferred, the upload size was not specified during\n // upload creation. So, if the file reader is done reading, we know the total\n // upload size and can tell the tus server.\n if (this.options.uploadLengthDeferred && done) {\n this._size = this._offset + valueSize\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // The specified uploadSize might not match the actual amount of data that a source\n // provides. In these cases, we cannot successfully complete the upload, so we\n // rather error out and let the user know. If not, tus-js-client will be stuck\n // in a loop of repeating empty PATCH requests.\n // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n const newSize = this._offset + valueSize\n if (!this.options.uploadLengthDeferred && done && newSize !== this._size) {\n return Promise.reject(\n new Error(\n `upload was configured with a size of ${this._size} bytes, but the source is done after ${newSize} bytes`,\n ),\n )\n }\n\n if (value === null) {\n return this._sendRequest(req)\n }\n\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', done ? '?1' : '?0')\n }\n this._emitProgress(this._offset, this._size)\n return this._sendRequest(req, value)\n })\n }\n\n /**\n * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n * and already have received a response.\n *\n * @api private\n */\n _handleUploadResponse(req, res) {\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n this._emitProgress(offset, this._size)\n this._emitChunkComplete(offset - this._offset, offset, this._size)\n\n this._offset = offset\n\n if (offset === this._size) {\n // Yay, finally done :)\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._performUpload()\n }\n\n /**\n * Create a new HTTP request object with the given method and URL.\n *\n * @api private\n */\n _openRequest(method, url) {\n const req = openRequest(method, url, this.options)\n this._req = req\n return req\n }\n\n /**\n * Remove the entry in the URL storage, if it has been saved before.\n *\n * @api private\n */\n _removeFromUrlStorage() {\n if (!this._urlStorageKey) return\n\n this._urlStorage.removeUpload(this._urlStorageKey).catch((err) => {\n this._emitError(err)\n })\n this._urlStorageKey = null\n }\n\n /**\n * Add the upload URL to the URL storage, if possible.\n *\n * @api private\n */\n _saveUploadInUrlStorage() {\n // We do not store the upload URL\n // - if it was disabled in the option, or\n // - if no fingerprint was calculated for the input (i.e. a stream), or\n // - if the URL is already stored (i.e. key is set alread).\n if (\n !this.options.storeFingerprintForResuming ||\n !this._fingerprint ||\n this._urlStorageKey !== null\n ) {\n return Promise.resolve()\n }\n\n const storedUpload = {\n size: this._size,\n metadata: this.options.metadata,\n creationTime: new Date().toString(),\n }\n\n if (this._parallelUploads) {\n // Save multiple URLs if the parallelUploads option is used ...\n storedUpload.parallelUploadUrls = this._parallelUploadUrls\n } else {\n // ... otherwise we just save the one available URL.\n storedUpload.uploadUrl = this.url\n }\n\n return this._urlStorage.addUpload(this._fingerprint, storedUpload).then((urlStorageKey) => {\n this._urlStorageKey = urlStorageKey\n })\n }\n\n /**\n * Send a request with the provided body.\n *\n * @api private\n */\n _sendRequest(req, body = null) {\n return sendRequest(req, body, this.options)\n }\n}\n\nfunction encodeMetadata(metadata) {\n return Object.entries(metadata)\n .map(([key, value]) => `${key} ${Base64.encode(String(value))}`)\n .join(',')\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n return status >= category && status < category + 100\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n const req = options.httpStack.createRequest(method, url)\n\n if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n req.setHeader('Upload-Draft-Interop-Version', '5')\n } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Draft-Interop-Version', '6')\n } else {\n req.setHeader('Tus-Resumable', '1.0.0')\n }\n const headers = options.headers || {}\n\n for (const [name, value] of Object.entries(headers)) {\n req.setHeader(name, value)\n }\n\n if (options.addRequestId) {\n const requestId = uuid()\n req.setHeader('X-Request-ID', requestId)\n }\n\n return req\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nasync function sendRequest(req, body, options) {\n if (typeof options.onBeforeRequest === 'function') {\n await options.onBeforeRequest(req)\n }\n\n const res = await req.send(body)\n\n if (typeof options.onAfterResponse === 'function') {\n await options.onAfterResponse(req, res)\n }\n\n return res\n}\n\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction isOnline() {\n let online = true\n // Note: We don't reference `window` here because the navigator object also exists\n // in a Web Worker's context.\n if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n online = false\n }\n\n return online\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n // We only attempt a retry if\n // - retryDelays option is set\n // - we didn't exceed the maxium number of retries, yet, and\n // - this error was caused by a request or it's response and\n // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n // a onShouldRetry is specified and returns true\n // - the browser does not indicate that we are offline\n if (\n options.retryDelays == null ||\n retryAttempt >= options.retryDelays.length ||\n err.originalRequest == null\n ) {\n return false\n }\n\n if (options && typeof options.onShouldRetry === 'function') {\n return options.onShouldRetry(err, retryAttempt, options)\n }\n\n return defaultOnShouldRetry(err)\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n const status = err.originalResponse ? err.originalResponse.getStatus() : 0\n return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline()\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n return new URL(link, origin).toString()\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n const partSize = Math.floor(totalSize / partCount)\n const parts = []\n\n for (let i = 0; i < partCount; i++) {\n parts.push({\n start: partSize * i,\n end: partSize * (i + 1),\n })\n }\n\n parts[partCount - 1].end = totalSize\n\n return parts\n}\n\nBaseUpload.defaultOptions = defaultOptions\n\nexport default BaseUpload\n","const isReactNative = () =>\n typeof navigator !== 'undefined' &&\n typeof navigator.product === 'string' &&\n navigator.product.toLowerCase() === 'reactnative'\n\nexport default isReactNative\n","/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nexport default function uriToBlob(uri) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.responseType = 'blob'\n xhr.onload = () => {\n const blob = xhr.response\n resolve(blob)\n }\n xhr.onerror = (err) => {\n reject(err)\n }\n xhr.open('GET', uri)\n xhr.send()\n })\n}\n","const isCordova = () =>\n typeof window !== 'undefined' &&\n (typeof window.PhoneGap !== 'undefined' ||\n typeof window.Cordova !== 'undefined' ||\n typeof window.cordova !== 'undefined')\n\nexport default isCordova\n","/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nexport default function readAsByteArray(chunk) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n const value = new Uint8Array(reader.result)\n resolve({ value })\n }\n reader.onerror = (err) => {\n reject(err)\n }\n reader.readAsArrayBuffer(chunk)\n })\n}\n","import isCordova from './isCordova.js'\nimport readAsByteArray from './readAsByteArray.js'\n\nexport default class FileSource {\n // Make this.size a method\n constructor(file) {\n this._file = file\n this.size = file.size\n }\n\n slice(start, end) {\n // In Apache Cordova applications, a File must be resolved using\n // FileReader instances, see\n // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n if (isCordova()) {\n return readAsByteArray(this._file.slice(start, end))\n }\n\n const value = this._file.slice(start, end)\n const done = end >= this.size\n return Promise.resolve({ value, done })\n }\n\n close() {\n // Nothing to do here since we don't need to release any resources.\n }\n}\n","function len(blobOrArray) {\n if (blobOrArray === undefined) return 0\n if (blobOrArray.size !== undefined) return blobOrArray.size\n return blobOrArray.length\n}\n\n/*\n Typed arrays and blobs don't have a concat method.\n This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n if (a.concat) {\n // Is `a` an Array?\n return a.concat(b)\n }\n if (a instanceof Blob) {\n return new Blob([a, b], { type: a.type })\n }\n if (a.set) {\n // Is `a` a typed array?\n const c = new a.constructor(a.length + b.length)\n c.set(a)\n c.set(b, a.length)\n return c\n }\n throw new Error('Unknown data type')\n}\n\nexport default class StreamSource {\n constructor(reader) {\n this._buffer = undefined\n this._bufferOffset = 0\n this._reader = reader\n this._done = false\n }\n\n slice(start, end) {\n if (start < this._bufferOffset) {\n return Promise.reject(new Error(\"Requested data is before the reader's current offset\"))\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n }\n\n _readUntilEnoughDataOrDone(start, end) {\n const hasEnoughData = end <= this._bufferOffset + len(this._buffer)\n if (this._done || hasEnoughData) {\n const value = this._getDataFromBuffer(start, end)\n const done = value == null ? this._done : false\n return Promise.resolve({ value, done })\n }\n\n return this._reader.read().then(({ value, done }) => {\n if (done) {\n this._done = true\n } else if (this._buffer === undefined) {\n this._buffer = value\n } else {\n this._buffer = concat(this._buffer, value)\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n })\n }\n\n _getDataFromBuffer(start, end) {\n // Remove data from buffer before `start`.\n // Data might be reread from the buffer if an upload fails, so we can only\n // safely delete data when it comes *before* what is currently being read.\n if (start > this._bufferOffset) {\n this._buffer = this._buffer.slice(start - this._bufferOffset)\n this._bufferOffset = start\n }\n // If the buffer is empty after removing old data, all data has been read.\n const hasAllDataBeenRead = len(this._buffer) === 0\n if (this._done && hasAllDataBeenRead) {\n return null\n }\n // We already removed data before `start`, so we just return the first\n // chunk from the buffer.\n return this._buffer.slice(0, end - start)\n }\n\n close() {\n if (this._reader.cancel) {\n this._reader.cancel()\n }\n }\n}\n","import isReactNative from './isReactNative.js'\nimport uriToBlob from './uriToBlob.js'\n\nimport FileSource from './sources/FileSource.js'\nimport StreamSource from './sources/StreamSource.js'\n\nexport default class FileReader {\n async openFile(input, chunkSize) {\n // In React Native, when user selects a file, instead of a File or Blob,\n // you usually get a file object {} with a uri property that contains\n // a local path to the file. We use XMLHttpRequest to fetch\n // the file blob, before uploading with tus.\n if (isReactNative() && input && typeof input.uri !== 'undefined') {\n try {\n const blob = await uriToBlob(input.uri)\n return new FileSource(blob)\n } catch (err) {\n throw new Error(\n `tus: cannot fetch \\`file.uri\\` as Blob, make sure the uri is correct and accessible. ${err}`,\n )\n }\n }\n\n // Since we emulate the Blob type in our tests (not all target browsers\n // support it), we cannot use `instanceof` for testing whether the input value\n // can be handled. Instead, we simply check is the slice() function and the\n // size property are available.\n if (typeof input.slice === 'function' && typeof input.size !== 'undefined') {\n return Promise.resolve(new FileSource(input))\n }\n\n if (typeof input.read === 'function') {\n chunkSize = Number(chunkSize)\n if (!Number.isFinite(chunkSize)) {\n return Promise.reject(\n new Error(\n 'cannot create source for stream without a finite value for the `chunkSize` option',\n ),\n )\n }\n\n return Promise.resolve(new StreamSource(input, chunkSize))\n }\n\n return Promise.reject(\n new Error(\n 'source object may only be an instance of File, Blob, or Reader in this environment',\n ),\n )\n }\n}\n","import isReactNative from './isReactNative.js'\n\n// TODO: Differenciate between input types\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nexport default function fingerprint(file, options) {\n if (isReactNative()) {\n return Promise.resolve(reactNativeFingerprint(file, options))\n }\n\n return Promise.resolve(\n ['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'),\n )\n}\n\nfunction reactNativeFingerprint(file, options) {\n const exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif'\n return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join(\n '/',\n )\n}\n\nfunction hashCode(str) {\n // from https://stackoverflow.com/a/8831937/151666\n let hash = 0\n if (str.length === 0) {\n return hash\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash &= hash // Convert to 32bit integer\n }\n return hash\n}\n","export default class XHRHttpStack {\n createRequest(method, url) {\n return new Request(method, url)\n }\n\n getName() {\n return 'XHRHttpStack'\n }\n}\n\nclass Request {\n constructor(method, url) {\n this._xhr = new XMLHttpRequest()\n this._xhr.open(method, url, true)\n\n this._method = method\n this._url = url\n this._headers = {}\n }\n\n getMethod() {\n return this._method\n }\n\n getURL() {\n return this._url\n }\n\n setHeader(header, value) {\n this._xhr.setRequestHeader(header, value)\n this._headers[header] = value\n }\n\n getHeader(header) {\n return this._headers[header]\n }\n\n setProgressHandler(progressHandler) {\n // Test support for progress events before attaching an event listener\n if (!('upload' in this._xhr)) {\n return\n }\n\n this._xhr.upload.onprogress = (e) => {\n if (!e.lengthComputable) {\n return\n }\n\n progressHandler(e.loaded)\n }\n }\n\n send(body = null) {\n return new Promise((resolve, reject) => {\n this._xhr.onload = () => {\n resolve(new Response(this._xhr))\n }\n\n this._xhr.onerror = (err) => {\n reject(err)\n }\n\n this._xhr.send(body)\n })\n }\n\n abort() {\n this._xhr.abort()\n return Promise.resolve()\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n\nclass Response {\n constructor(xhr) {\n this._xhr = xhr\n }\n\n getStatus() {\n return this._xhr.status\n }\n\n getHeader(header) {\n return this._xhr.getResponseHeader(header)\n }\n\n getBody() {\n return this._xhr.responseText\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n","let hasStorage = false\ntry {\n // Note: localStorage does not exist in the Web Worker's context, so we must use window here.\n hasStorage = 'localStorage' in window\n\n // Attempt to store and read entries from the local storage to detect Private\n // Mode on Safari on iOS (see #49)\n // If the key was not used before, we remove it from local storage again to\n // not cause confusion where the entry came from.\n const key = 'tusSupport'\n const originalValue = localStorage.getItem(key)\n localStorage.setItem(key, originalValue)\n if (originalValue === null) localStorage.removeItem(key)\n} catch (e) {\n // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n // thrown (see #49)\n if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n hasStorage = false\n } else {\n throw e\n }\n}\n\nexport const canStoreURLs = hasStorage\n\nexport class WebStorageUrlStorage {\n findAllUploads() {\n const results = this._findEntries('tus::')\n return Promise.resolve(results)\n }\n\n findUploadsByFingerprint(fingerprint) {\n const results = this._findEntries(`tus::${fingerprint}::`)\n return Promise.resolve(results)\n }\n\n removeUpload(urlStorageKey) {\n localStorage.removeItem(urlStorageKey)\n return Promise.resolve()\n }\n\n addUpload(fingerprint, upload) {\n const id = Math.round(Math.random() * 1e12)\n const key = `tus::${fingerprint}::${id}`\n\n localStorage.setItem(key, JSON.stringify(upload))\n return Promise.resolve(key)\n }\n\n _findEntries(prefix) {\n const results = []\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key.indexOf(prefix) !== 0) continue\n\n try {\n const upload = JSON.parse(localStorage.getItem(key))\n upload.urlStorageKey = key\n\n results.push(upload)\n } catch (_e) {\n // The JSON parse error is intentionally ignored here, so a malformed\n // entry in the storage cannot prevent an upload.\n }\n }\n\n return results\n }\n}\n","import DetailedError from '../error.js'\nimport { enableDebugLog } from '../logger.js'\nimport NoopUrlStorage from '../noopUrlStorage.js'\nimport BaseUpload from '../upload.js'\n\nimport FileReader from './fileReader.js'\nimport fingerprint from './fileSignature.js'\nimport DefaultHttpStack from './httpStack.js'\nimport { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js'\n\nconst defaultOptions = {\n ...BaseUpload.defaultOptions,\n httpStack: new DefaultHttpStack(),\n fileReader: new FileReader(),\n urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n fingerprint,\n}\n\nclass Upload extends BaseUpload {\n constructor(file = null, options = {}) {\n options = { ...defaultOptions, ...options }\n super(file, options)\n }\n\n static terminate(url, options = {}) {\n options = { ...defaultOptions, ...options }\n return BaseUpload.terminate(url, options)\n }\n}\n\n// Note: We don't reference `window` here because these classes also exist in a Web Worker's context.\nconst isSupported =\n typeof XMLHttpRequest === 'function' &&\n typeof Blob === 'function' &&\n typeof Blob.prototype.slice === 'function'\n\nexport {\n Upload,\n canStoreURLs,\n defaultOptions,\n isSupported,\n enableDebugLog,\n DefaultHttpStack,\n DetailedError,\n}\n","export const deleteUpload = async (\n url: string,\n csrfToken: string\n): Promise =>\n new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"DELETE\", url);\n\n xhr.onload = (): void => {\n if (xhr.status === 204) {\n resolve();\n } else {\n reject(new Error());\n }\n };\n xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n xhr.setRequestHeader(\"X-CSRFToken\", csrfToken);\n xhr.send(null);\n });\n","import { HttpRequest, HttpResponse, Upload } from \"tus-js-client\";\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface Parameters {\n chunkSize: number;\n csrfToken: string;\n fieldName: string;\n file: File;\n formId: string;\n retryDelays: null | number[];\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport default class TusUpload extends BaseUpload {\n public onError?: (error: Error) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n private csrfToken: string;\n private id: string;\n private upload: Upload;\n\n constructor({\n chunkSize,\n csrfToken,\n fieldName,\n file,\n formId,\n retryDelays,\n uploadIndex,\n uploadUrl\n }: Parameters) {\n super({ name: file.name, status: \"uploading\", type: \"tus\", uploadIndex });\n\n this.csrfToken = csrfToken;\n\n this.upload = new Upload(file, {\n chunkSize,\n endpoint: uploadUrl,\n metadata: {\n fieldName: fieldName,\n filename: file.name,\n formId: formId\n },\n onAfterResponse: this.handleAfterReponse,\n onBeforeRequest: this.addCsrTokenToRequest,\n onError: this.handleError,\n onProgress: this.handleProgress,\n onSuccess: this.handleSucces,\n retryDelays: retryDelays ?? [0, 1000, 3000, 5000]\n });\n\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n }\n\n public async abort(): Promise {\n await this.upload.abort(true);\n }\n\n public async delete(): Promise {\n if (!this.upload.url) {\n return Promise.resolve();\n }\n\n await deleteUpload(this.upload.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialFile {\n return {\n id: this.id,\n name: this.name,\n size: this.getSize(),\n type: \"tus\",\n url: \"\"\n };\n }\n\n public getSize(): number {\n return (this.upload.file as File).size;\n }\n\n public start(): void {\n this.upload.start();\n }\n\n private addCsrTokenToRequest = (request: HttpRequest) => {\n request.setHeader(\"X-CSRFToken\", this.csrfToken);\n };\n\n private handleAfterReponse = (\n _request: HttpRequest,\n response: HttpResponse\n ) => {\n const resourceId = response.getHeader(\"ResourceId\");\n\n if (resourceId) {\n this.id = resourceId;\n }\n };\n\n private handleError = (error: Error) => {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n };\n\n private handleProgress = (bytesUploaded: number, bytesTotal: number) => {\n if (this.onProgress) {\n this.onProgress(bytesUploaded, bytesTotal);\n }\n };\n\n private handleSucces = () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n };\n}\n","import BaseUpload, {\n InitialExistingFile,\n InitialFile,\n InitialPlaceholderFile,\n InitialS3File,\n InitialTusFile,\n UploadType\n} from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface BaseUploadedFileParameters {\n name: string;\n size: number;\n type: UploadType;\n uploadIndex: number;\n}\n\ninterface UploadedFileParameters {\n csrfToken: string;\n initialFile: InitialFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\ninterface UploadedTusFileParameters {\n csrfToken: string;\n initialFile: InitialTusFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport abstract class BaseUploadedFile extends BaseUpload {\n size: number;\n\n constructor({ name, size, type, uploadIndex }: BaseUploadedFileParameters) {\n super({ name, status: \"done\", type, uploadIndex });\n\n this.size = size;\n }\n\n public async abort(): Promise {\n return Promise.resolve();\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getSize(): number | undefined {\n return this.size;\n }\n}\n\nclass PlaceholderFile extends BaseUploadedFile {\n id: string;\n\n constructor(initialFile: InitialPlaceholderFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"placeholder\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialPlaceholderFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"placeholder\"\n };\n }\n}\n\nexport class ExistingFile extends BaseUploadedFile {\n constructor(initialFile: InitialExistingFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"existing\",\n uploadIndex\n });\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialExistingFile {\n return {\n name: this.name,\n size: this.size,\n type: \"existing\"\n };\n }\n}\n\nexport class UploadedS3File extends BaseUploadedFile {\n id: string;\n key: string;\n\n constructor(initialFile: InitialS3File, uploadIndex: number) {\n super({\n name: initialFile.original_name || initialFile.name,\n size: initialFile.size,\n type: \"uploadedS3\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n this.key = initialFile.name;\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialS3File {\n return {\n id: this.id,\n name: this.key,\n original_name: this.name,\n size: this.size,\n type: \"s3\"\n };\n }\n}\n\nexport class UploadedTusFile extends BaseUploadedFile {\n csrfToken: string;\n id: string;\n url: string;\n\n constructor({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n }: UploadedTusFileParameters) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"uploadedTus\",\n uploadIndex\n });\n\n this.csrfToken = csrfToken;\n this.id = initialFile.id;\n this.url = `${uploadUrl}${initialFile.id}`;\n }\n\n public async delete(): Promise {\n await deleteUpload(this.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialTusFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"tus\",\n url: \"\"\n };\n }\n}\n\nexport const createUploadedFile = ({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n}: UploadedFileParameters): BaseUploadedFile => {\n switch (initialFile.type) {\n case \"existing\":\n return new ExistingFile(initialFile, uploadIndex);\n\n case \"placeholder\":\n return new PlaceholderFile(initialFile, uploadIndex);\n\n case \"s3\":\n return new UploadedS3File(initialFile, uploadIndex);\n\n case \"tus\":\n return new UploadedTusFile({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n });\n }\n};\n","import { EventEmitter } from \"eventemitter3\";\n\nimport AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport DropArea from \"./drop_area.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\nimport BaseUpload, { InitialFile, UploadType } from \"./uploads/base_upload.ts\";\nimport S3Upload from \"./uploads/s3_upload.ts\";\nimport TusUpload from \"./uploads/tus_upload.ts\";\nimport { createUploadedFile } from \"./uploads/uploaded_file.ts\";\nimport {\n findInput,\n getMetadataFieldName,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Callbacks {\n onClick?: ({ fieldName, fileName, type }: ClickEvent) => void;\n onDelete?: (upload: BaseUpload) => void;\n onError?: (error: unknown, upload: BaseUpload) => void;\n onProgress?: (\n bytesUploaded: number,\n bytesTotal: number,\n upload: BaseUpload\n ) => void;\n onSuccess?: (upload: BaseUpload) => void;\n}\n\nexport type Translations = Record;\n\ninterface ClickEvent {\n fieldName: string;\n fileName: string;\n id?: string;\n type: UploadType;\n}\n\ninterface ConstructorParams {\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n initial: InitialFile[];\n input: HTMLInputElement;\n multiple: boolean;\n parent: Element;\n prefix: null | string;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n skipRequired: boolean;\n supportDropArea: boolean;\n translations: Translations;\n uploadUrl: string;\n}\n\nclass FileField {\n acceptedFileTypes: AcceptedFileTypes;\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n multiple: boolean;\n nextUploadIndex: number;\n prefix: null | string;\n renderer: RenderUploadFile;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n supportDropArea: boolean;\n uploads: BaseUpload[];\n uploadUrl: string;\n\n constructor({\n callbacks,\n chunkSize,\n csrfToken,\n eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent,\n prefix,\n retryDelays,\n s3UploadDir,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n }: ConstructorParams) {\n this.callbacks = callbacks;\n this.chunkSize = chunkSize;\n this.csrfToken = csrfToken;\n this.eventEmitter = eventEmitter;\n this.fieldName = fieldName;\n this.form = form;\n this.formId = formId;\n this.multiple = multiple;\n this.prefix = prefix;\n this.retryDelays = retryDelays;\n this.s3UploadDir = s3UploadDir;\n this.supportDropArea = supportDropArea && !input.disabled;\n this.uploadUrl = uploadUrl;\n this.acceptedFileTypes = new AcceptedFileTypes(input.accept);\n\n this.uploads = [];\n this.nextUploadIndex = 0;\n\n this.renderer = new RenderUploadFile({\n input,\n parent,\n skipRequired,\n translations\n });\n const filesContainer = this.renderer.container;\n\n if (supportDropArea) {\n this.initDropArea(filesContainer, input.accept);\n }\n\n this.addInitialFiles(initial);\n\n this.checkDropHint();\n\n input.addEventListener(\"change\", this.onChange);\n filesContainer.addEventListener(\"click\", this.handleClick);\n }\n\n addInitialFiles(initialFiles: InitialFile[]): void {\n if (initialFiles.length === 0) {\n return;\n }\n\n const { multiple, renderer } = this;\n\n const addInitialFile = (initialFile: InitialFile): void => {\n const { size } = initialFile;\n const name =\n initialFile.type === \"s3\" && initialFile.original_name\n ? initialFile.original_name\n : initialFile.name;\n\n const element = renderer.addUploadedFile(\n name,\n this.nextUploadIndex,\n size\n );\n\n const upload = createUploadedFile({\n csrfToken: this.csrfToken,\n initialFile,\n uploadIndex: this.nextUploadIndex,\n uploadUrl: this.uploadUrl\n });\n this.uploads.push(upload);\n\n this.emitEvent(\"addUpload\", element, upload);\n };\n\n if (multiple) {\n initialFiles.forEach((file: InitialFile): void => {\n addInitialFile(file);\n this.nextUploadIndex += 1;\n });\n } else {\n const initialFile = initialFiles[0];\n\n if (initialFile) {\n addInitialFile(initialFile);\n }\n }\n }\n\n checkDropHint(): void {\n if (!this.supportDropArea) {\n return;\n }\n\n const nonEmptyUploads = this.uploads.filter(e => Boolean(e));\n\n if (nonEmptyUploads.length === 0) {\n this.renderer.renderDropHint();\n } else {\n this.renderer.removeDropHint();\n }\n }\n\n emitEvent(eventName: string, element: HTMLElement, upload: BaseUpload): void {\n if (this.eventEmitter) {\n this.eventEmitter.emit(eventName, {\n element,\n fieldName: this.fieldName,\n fileName: upload.name,\n metaDataField: this.getMetaDataField(),\n upload\n });\n }\n }\n\n findUploadByName(fileName: string): BaseUpload | undefined {\n return this.uploads.find(upload => upload.name === fileName);\n }\n\n getMetaDataField(): HTMLElement | null {\n return findInput(\n this.form,\n getMetadataFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n }\n\n getUploadByIndex(uploadIndex: number): BaseUpload | undefined {\n return this.uploads.find(upload => upload.uploadIndex === uploadIndex);\n }\n\n async handleCancel(upload: BaseUpload): Promise {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n this.removeUploadFromList(upload);\n }\n\n handleClick = (e: Event): void => {\n const target = e.target as HTMLElement;\n\n const getUpload = (): BaseUpload | undefined => {\n const dataIndex = target.getAttribute(\"data-index\");\n\n if (!dataIndex) {\n return undefined;\n }\n\n const uploadIndex = parseInt(dataIndex, 10);\n return this.getUploadByIndex(uploadIndex);\n };\n\n if (\n target.classList.contains(\"dff-delete\") &&\n !target.classList.contains(\"dff-disabled\")\n ) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.removeExistingUpload(upload);\n }\n } else if (target.classList.contains(\"dff-cancel\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.handleCancel(upload);\n }\n } else if (target.classList.contains(\"dff-filename\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload?.status === \"done\" && this.callbacks.onClick) {\n this.callbacks.onClick({\n fieldName: this.fieldName,\n fileName: upload.name,\n id: upload.getId(),\n type: upload.type\n });\n }\n }\n };\n\n handleError = (upload: BaseUpload, error: unknown): void => {\n this.renderer.setError(upload.uploadIndex);\n upload.status = \"error\";\n\n const { onError } = this.callbacks;\n\n if (onError) {\n if (upload instanceof TusUpload) {\n onError(error, upload);\n }\n }\n };\n\n handleInvalidFiles = (files: File[]): void => {\n this.renderer.setErrorInvalidFiles(files);\n };\n\n handleProgress = (\n upload: BaseUpload,\n bytesUploaded: number,\n bytesTotal: number\n ): void => {\n const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);\n\n this.renderer.updateProgress(upload.uploadIndex, percentage);\n\n const { onProgress } = this.callbacks;\n\n if (onProgress) {\n if (upload instanceof TusUpload) {\n onProgress(bytesUploaded, bytesTotal, upload);\n }\n }\n };\n\n handleSuccess = (upload: BaseUpload): void => {\n const { renderer } = this;\n\n this.updatePlaceholderInput();\n\n renderer.clearInput();\n renderer.setSuccess(upload.uploadIndex, upload.getSize());\n upload.status = \"done\";\n\n const { onSuccess } = this.callbacks;\n\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"uploadComplete\", element, upload);\n }\n\n if (onSuccess && upload.type === \"tus\") {\n onSuccess(upload);\n }\n };\n\n initDropArea(container: Element, inputAccept: string): void {\n new DropArea({\n container,\n inputAccept,\n onUploadFiles: this.uploadFiles,\n renderer: this.renderer\n });\n }\n\n onChange = (e: Event): void => {\n const files = (e.target as HTMLInputElement).files ?? ([] as File[]);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.handleInvalidFiles([...invalidFiles]);\n void this.uploadFiles([...acceptedFiles]);\n\n this.renderer.clearInput();\n };\n\n async removeExistingUpload(upload: BaseUpload): Promise {\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"removeUpload\", element, upload);\n }\n\n if (upload.status === \"uploading\") {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n } else if (upload.status === \"done\") {\n this.renderer.disableDelete(upload.uploadIndex);\n\n try {\n await upload.delete();\n } catch {\n this.renderer.setDeleteFailed(upload.uploadIndex);\n return;\n }\n }\n\n this.removeUploadFromList(upload);\n this.updatePlaceholderInput();\n }\n\n removeUploadFromList(upload: BaseUpload): void {\n this.renderer.deleteFile(upload.uploadIndex);\n\n const index = this.uploads.indexOf(upload);\n\n if (index >= 0) {\n this.uploads.splice(index, 1);\n }\n\n this.checkDropHint();\n\n const { onDelete } = this.callbacks;\n\n if (onDelete) {\n onDelete(upload);\n }\n }\n\n updatePlaceholderInput(): void {\n const input = findInput(\n this.form,\n getUploadsFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n if (!input) {\n return;\n }\n\n const placeholdersInfo: InitialFile[] = this.uploads.map(upload =>\n upload.getInitialFile()\n );\n\n input.value = JSON.stringify(placeholdersInfo);\n }\n\n async uploadFile(file: File): Promise {\n const createUpload = (): S3Upload | TusUpload => {\n const { csrfToken, s3UploadDir } = this;\n\n if (s3UploadDir != null) {\n return new S3Upload({\n csrfToken,\n endpoint: uploadUrl,\n file,\n s3UploadDir,\n uploadIndex: newUploadIndex\n });\n } else {\n return new TusUpload({\n chunkSize: this.chunkSize,\n csrfToken: this.csrfToken,\n fieldName,\n file,\n formId,\n retryDelays: this.retryDelays,\n uploadIndex: newUploadIndex,\n uploadUrl\n });\n }\n };\n\n const { fieldName, formId, renderer, uploadUrl } = this;\n const fileName = file.name;\n const existingUpload = this.findUploadByName(fileName);\n const newUploadIndex = existingUpload\n ? existingUpload.uploadIndex\n : this.nextUploadIndex;\n\n if (!existingUpload) {\n this.nextUploadIndex += 1;\n }\n\n if (existingUpload) {\n await this.removeExistingUpload(existingUpload);\n }\n\n const upload = createUpload();\n\n upload.onError = (error: unknown) => {\n this.handleError(upload, error);\n };\n upload.onProgress = (bytesUploaded, bytesTotal) => {\n this.handleProgress(upload, bytesUploaded, bytesTotal);\n };\n upload.onSuccess = () => {\n this.handleSuccess(upload);\n };\n upload.start();\n\n this.uploads.push(upload);\n\n const element = renderer.addNewUpload(fileName, newUploadIndex);\n this.emitEvent(\"addUpload\", element, upload);\n }\n\n uploadFiles = async (files: File[]): Promise => {\n if (files.length === 0) {\n return;\n }\n\n if (!this.multiple) {\n for (const upload of this.uploads) {\n this.renderer.deleteFile(upload.uploadIndex);\n }\n\n this.uploads = [];\n const file = files[0];\n\n if (file) {\n await this.uploadFile(file);\n }\n } else {\n for (const file of files) {\n await this.uploadFile(file);\n }\n }\n\n this.checkDropHint();\n };\n}\n\nexport default FileField;\n","import { EventEmitter } from \"eventemitter3\";\n\nimport FileField, { Callbacks, Translations } from \"./file_field.ts\";\nimport { InitialFile } from \"./uploads/base_upload.ts\";\nimport {\n findInput,\n getInputValueForFormAndPrefix,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Options {\n callbacks?: Callbacks;\n chunkSize?: number;\n eventEmitter?: EventEmitter;\n prefix?: string;\n retryDelays?: number[];\n skipRequired?: boolean;\n supportDropArea?: boolean;\n}\n\nconst initUploadFields = (form: Element, options: Options = {}): void => {\n const matchesPrefix = (fieldName: string): boolean => {\n if (!options.prefix) {\n return true;\n }\n\n return fieldName.startsWith(`${options.prefix}-`);\n };\n\n const getPrefix = (): null | string => options.prefix ?? null;\n\n const getInputValue = (fieldName: string): string | undefined =>\n getInputValueForFormAndPrefix(form, fieldName, getPrefix());\n\n const getInitialFiles = (fieldName: string): InitialFile[] => {\n const data = getInputValue(getUploadsFieldName(fieldName, getPrefix()));\n\n if (!data) {\n return [];\n }\n\n return (JSON.parse(data) as Record[]).filter(\n file => file.type\n ) as unknown as InitialFile[];\n };\n\n const uploadUrl = getInputValue(\"upload_url\");\n const formId = getInputValue(\"form_id\");\n const s3UploadDir = getInputValue(\"s3_upload_dir\");\n const skipRequired = options.skipRequired ?? false;\n const prefix = getPrefix();\n const csrfToken = findInput(form, \"csrfmiddlewaretoken\", null)?.value;\n\n if (!csrfToken) {\n throw Error(\"Csrf token not found\");\n }\n\n if (!formId || !uploadUrl) {\n return;\n }\n\n form.querySelectorAll(\".dff-uploader\").forEach(uploaderDiv => {\n const container = uploaderDiv.querySelector(\".dff-container\");\n\n if (!container) {\n return;\n }\n\n const input = container.querySelector(\"input[type=file]\");\n\n if (!(input && matchesPrefix(input.name))) {\n return;\n }\n\n const fieldName = input.name;\n const { multiple } = input;\n const initial = getInitialFiles(fieldName);\n const dataTranslations = container.getAttribute(\"data-translations\");\n const translations: Translations = dataTranslations\n ? (JSON.parse(dataTranslations) as Translations)\n : {};\n const supportDropArea = !(options.supportDropArea === false);\n\n new FileField({\n callbacks: options.callbacks ?? {},\n chunkSize: options.chunkSize ?? 2621440,\n csrfToken,\n eventEmitter: options.eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent: container,\n prefix,\n retryDelays: options.retryDelays ?? null,\n s3UploadDir: s3UploadDir ?? null,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n });\n });\n};\n\nexport default initUploadFields;\n","import initUploadFields, { Options } from \"./init_upload_fields.ts\";\nimport {\n getInputNameWithPrefix,\n getInputValueForFormAndPrefix\n} from \"./util.ts\";\n\nconst initFormSet = (\n form: HTMLFormElement,\n optionsParam: Options | string\n): void => {\n let options: Options;\n\n if (typeof optionsParam === \"string\") {\n options = { prefix: optionsParam };\n } else {\n options = optionsParam;\n }\n\n const prefix = options.prefix ?? \"form\";\n\n const totalFormsValue = getInputValueForFormAndPrefix(\n form,\n \"TOTAL_FORMS\",\n prefix\n );\n\n if (!totalFormsValue) {\n return;\n }\n\n const formCount = parseInt(totalFormsValue, 10);\n\n for (let i = 0; i < formCount; i += 1) {\n const subFormPrefix = getInputNameWithPrefix(i.toString(), null);\n initUploadFields(form, {\n ...options,\n prefix: `${prefix}-${subFormPrefix}`\n });\n }\n};\n\nexport default initFormSet;\n","import autoInitFileForms from \"./auto_init_file_forms.ts\";\nimport initFormSet from \"./init_form_set.ts\";\nimport initUploadFields from \"./init_upload_fields.ts\";\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nwindow.autoInitFileForms = autoInitFileForms; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initFormSet = initFormSet; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initUploadFields = initUploadFields; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n"],"names":["findForm","element","parent","parentElement","tagName","unique","values","Array","from","Set","autoInitFileForms","initUploadFields","window","forms","document","querySelectorAll","map","forEach","this","standardTypes","require$$0","require$$1","require$$2","require$$3","parseInputAccept","inputAccept","extensions","mimeTypes","split","mimeType","trim","filter","Boolean","fileType","startsWith","push","AcceptedFileTypes","constructor","isAccepted","fileName","length","isMimeTypeAccepted","mime","getType","isExtensionAccepted","picomatch","isMatch","nocase","getEntriesFromDirectory","directoryEntry","Promise","resolve","reject","createReader","readEntries","getFileFromFileSystemFileEntry","fileEntry","file","getFilesFromFileSystemEntries","entries","result","entry","filesFromEntry","getFilesFromFileSystemEntry","isFile","isDirectory","entriesFromDirectory","files","getFilesFromDataTransfer","dataTransfer","items","item","fileSystemEntry","webkitGetAsEntry","getAsFile","DropArea","container","onUploadFiles","renderer","acceptedFileTypes","addEventListener","classList","add","remove","e","preventDefault","onDrop","dragEvent","stopPropagation","uploadFiles","acceptedFiles","invalidFiles","name","setErrorInvalidFiles","error","console","formatBytes","bytes","decimals","k","dm","sizes","i","Math","floor","log","n","parseFloat","toFixed","size","toString","getInputNameWithPrefix","fieldName","prefix","getInputNameWithoutPrefix","slice","findInput","form","inputNameWithPrefix","input","querySelector","getUploadsFieldName","getInputValueForFormAndPrefix","value","getMetadataFieldName","RenderUploadFile","skipRequired","translations","createFilesContainer","errors","createErrorContainer","required","addNewUpload","filename","uploadIndex","div","addFile","progressSpan","createElement","className","innerSpan","appendChild","cancelLink","setTextContent","getTranslation","setAttribute","href","addUploadedFile","filesize","setSuccess","clearInput","deleteFile","index","findFileDiv","disableCancel","cancelSpan","findCancelSpan","disableDelete","deleteLink","findDeleteLink","removeDropHint","dropHint","renderDropHint","setDeleteFailed","setErrorMessage","enableDelete","setError","el","removeProgress","removeCancel","errorsMessages","msg","invalidFileTypeMessage","replaceChildren","fileSizeInfo","updateProgress","percentage","innerProgressSpan","style","width","nameSpan","innerHTML","escape","key","message","originalMessageSpan","span","text","append","createTextNode","BaseUpload","status","type","abort","delete","MB","abortMultipartUpload","csrfToken","endpoint","uploadId","encodeURIComponent","uploadIdEnc","headers","Headers","url","urljoin","fetch","method","then","response","json","completeMultipartUpload","parts","body","JSON","stringify","data","createMultipartUpload","s3UploadDir","accept","contentType","getChunkSize","ceil","prepareUploadPart","number","arr","indexOf","splice","S3Upload","createdPromise","Error","chunks","chunkState","uploading","onError","undefined","onProgress","onSuccess","initChunks","catch","xhr","getId","getInitialFile","id","original_name","getSize","start","createUpload","completeUpload","sort","a","b","PartNumber","err","handleError","valid","TypeError","uploadParts","desiredChunkSize","minChunkSize","max","chunkSize","end","min","busy","done","uploaded","onPartComplete","etag","state","part","ETag","onPartProgress","sent","totalUploaded","reduce","c","uploadPart","uploadPartBytes","XMLHttpRequest","open","responseType","upload","ev","lengthComputable","loaded","getResponseHeader","send","need","every","candidates","DetailedError","causingErr","req","res","originalRequest","originalResponse","causingError","requestId","getHeader","getMethod","getURL","getStatus","getBody","NoopUrlStorage","listAllUploads","findUploadsByFingerprint","_fingerprint","removeUpload","_urlStorageKey","addUpload","_upload","querystringify","querystringify_1","global","uuid","replace","r","random","v","PROTOCOL_TUS_V1","PROTOCOL_IETF_DRAFT_03","PROTOCOL_IETF_DRAFT_05","defaultOptions","uploadUrl","metadata","metadataForPartialUploads","fingerprint","uploadSize","onChunkComplete","onUploadUrlAvailable","overridePatchMethod","addRequestId","onBeforeRequest","onAfterResponse","onShouldRetry","defaultOnShouldRetry","Number","POSITIVE_INFINITY","retryDelays","parallelUploads","parallelUploadBoundaries","storeFingerprintForResuming","removeFingerprintOnSuccess","uploadLengthDeferred","uploadDataDuringCreation","urlStorage","fileReader","httpStack","protocol","options","_urlStorage","_req","_offset","_aborted","_size","_source","_retryAttempt","_retryTimeout","_offsetBeforeRetry","_parallelUploads","_parallelUploadUrls","terminate","openRequest","sendRequest","shouldRetry","delay","remainingDelays","newOptions","setTimeout","findPreviousUploads","resumeFromPreviousUpload","previousUpload","parallelUploadUrls","urlStorageKey","_emitError","includes","Object","prototype","call","optionName","openFile","source","isNaN","_startParallelUpload","_startSingleUpload","totalSize","totalProgress","partCount","splitSizeIntoParts","uploads","lastPartProgress","newPartProgress","_emitProgress","u","_saveUploadInUrlStorage","all","_openRequest","setHeader","join","encodeMetadata","_sendRequest","inStatusCategory","_emitHttpError","location","resolveUrl","_emitSuccess","_resumeUpload","_createUpload","shouldTerminate","clearTimeout","_removeFromUrlStorage","shouldResetDelays","lastResponse","bytesSent","bytesTotal","_emitChunkComplete","bytesAccepted","promise","_addChunkToRequest","close","_handleUploadResponse","_performUpload","offset","parseInt","setProgressHandler","valueSize","newSize","storedUpload","creationTime","Date","Base64","encode","String","category","createRequest","isOnline","online","navigator","onLine","retryAttempt","origin","link","URL","partSize","isReactNative","product","toLowerCase","uriToBlob","uri","onload","blob","onerror","isCordova","PhoneGap","Cordova","cordova","readAsByteArray","chunk","reader","FileReader","Uint8Array","readAsArrayBuffer","FileSource","_file","len","blobOrArray","concat","Blob","set","StreamSource","_buffer","_bufferOffset","_reader","_done","_readUntilEnoughDataOrDone","hasEnoughData","_getDataFromBuffer","read","hasAllDataBeenRead","cancel","isFinite","reactNativeFingerprint","lastModified","exifHash","exif","hashCode","str","hash","char","charCodeAt","XHRHttpStack","Request","getName","_xhr","_method","_url","_headers","header","setRequestHeader","progressHandler","onprogress","Response","getUnderlyingObject","responseText","hasStorage","originalValue","localStorage","getItem","setItem","removeItem","code","SECURITY_ERR","QUOTA_EXCEEDED_ERR","canStoreURLs","WebStorageUrlStorage","findAllUploads","results","_findEntries","round","parse","_e","DefaultHttpStack","Upload","deleteUpload","TusUpload","formId","handleAfterReponse","addCsrTokenToRequest","handleProgress","handleSucces","request","_request","resourceId","bytesUploaded","BaseUploadedFile","PlaceholderFile","initialFile","ExistingFile","UploadedS3File","UploadedTusFile","createUploadedFile","FileField","callbacks","eventEmitter","initial","multiple","supportDropArea","disabled","nextUploadIndex","filesContainer","initDropArea","addInitialFiles","checkDropHint","onChange","handleClick","initialFiles","addInitialFile","emitEvent","nonEmptyUploads","eventName","emit","metaDataField","getMetaDataField","findUploadByName","find","getUploadByIndex","handleCancel","removeUploadFromList","target","getUpload","dataIndex","getAttribute","contains","removeExistingUpload","onClick","handleInvalidFiles","handleSuccess","updatePlaceholderInput","onDelete","placeholdersInfo","uploadFile","newUploadIndex","existingUpload","matchesPrefix","getPrefix","getInputValue","getInitialFiles","uploaderDiv","dataTranslations","initFormSet","optionsParam","totalFormsValue","formCount","subFormPrefix"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,12,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]} \ No newline at end of file +{"version":3,"file":"file_form.js","sources":["../../../frontend/src/auto_init_file_forms.ts","../../../frontend/node_modules/mime/dist/types/standard.js","../../../frontend/node_modules/mime/dist/src/Mime.js","../../../frontend/node_modules/mime/dist/src/index_lite.js","../../../frontend/node_modules/picomatch/lib/constants.js","../../../frontend/node_modules/picomatch/lib/utils.js","../../../frontend/node_modules/picomatch/lib/scan.js","../../../frontend/node_modules/picomatch/lib/parse.js","../../../frontend/node_modules/picomatch/lib/picomatch.js","../../../frontend/node_modules/picomatch/posix.js","../../../frontend/src/accepted_file_types.ts","../../../frontend/src/drop_area.ts","../../../frontend/node_modules/escape-html/index.js","../../../frontend/src/util.ts","../../../frontend/src/render_upload_file.ts","../../../frontend/src/uploads/base_upload.ts","../../../frontend/node_modules/url-join/lib/url-join.js","../../../frontend/src/uploads/s3_utils.ts","../../../frontend/src/uploads/s3_upload.ts","../../../frontend/node_modules/tus-js-client/lib/error.js","../../../frontend/node_modules/tus-js-client/lib/logger.js","../../../frontend/node_modules/tus-js-client/lib/noopUrlStorage.js","../../../frontend/node_modules/js-base64/base64.mjs","../../../frontend/node_modules/requires-port/index.js","../../../frontend/node_modules/querystringify/index.js","../../../frontend/node_modules/url-parse/index.js","../../../frontend/node_modules/tus-js-client/lib/uuid.js","../../../frontend/node_modules/tus-js-client/lib/upload.js","../../../frontend/node_modules/tus-js-client/lib/browser/isReactNative.js","../../../frontend/node_modules/tus-js-client/lib/browser/uriToBlob.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/isCordova.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/readAsByteArray.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/FileSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/StreamSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileReader.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileSignature.js","../../../frontend/node_modules/tus-js-client/lib/browser/httpStack.js","../../../frontend/node_modules/tus-js-client/lib/browser/urlStorage.js","../../../frontend/node_modules/tus-js-client/lib/browser/index.js","../../../frontend/src/uploads/tus_utils.ts","../../../frontend/src/uploads/tus_upload.ts","../../../frontend/src/uploads/uploaded_file.ts","../../../frontend/src/file_field.ts","../../../frontend/src/init_upload_fields.ts","../../../frontend/src/init_form_set.ts","../../../frontend/src/file_form.ts"],"sourcesContent":["const findForm = (element: Element): HTMLElement | null => {\n const parent = element.parentElement;\n\n if (!parent) {\n return null;\n }\n\n if (parent.tagName === \"FORM\") {\n return parent;\n }\n\n return findForm(parent);\n};\n\nconst unique = (values: unknown[]): unknown[] =>\n Array.from(new Set(values).values());\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nconst autoInitFileForms = (): void => {\n const initUploadFields = window.initUploadFields as () => void; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n\n const forms = unique(\n Array.from(document.querySelectorAll(\".dff-uploader\")).map(findForm)\n );\n forms.forEach(initUploadFields);\n};\n\nexport default autoInitFileForms;\n","const types = {\n 'application/andrew-inset': ['ez'],\n 'application/appinstaller': ['appinstaller'],\n 'application/applixware': ['aw'],\n 'application/appx': ['appx'],\n 'application/appxbundle': ['appxbundle'],\n 'application/atom+xml': ['atom'],\n 'application/atomcat+xml': ['atomcat'],\n 'application/atomdeleted+xml': ['atomdeleted'],\n 'application/atomsvc+xml': ['atomsvc'],\n 'application/atsc-dwd+xml': ['dwd'],\n 'application/atsc-held+xml': ['held'],\n 'application/atsc-rsat+xml': ['rsat'],\n 'application/automationml-aml+xml': ['aml'],\n 'application/automationml-amlx+zip': ['amlx'],\n 'application/bdoc': ['bdoc'],\n 'application/calendar+xml': ['xcs'],\n 'application/ccxml+xml': ['ccxml'],\n 'application/cdfx+xml': ['cdfx'],\n 'application/cdmi-capability': ['cdmia'],\n 'application/cdmi-container': ['cdmic'],\n 'application/cdmi-domain': ['cdmid'],\n 'application/cdmi-object': ['cdmio'],\n 'application/cdmi-queue': ['cdmiq'],\n 'application/cpl+xml': ['cpl'],\n 'application/cu-seeme': ['cu'],\n 'application/cwl': ['cwl'],\n 'application/dash+xml': ['mpd'],\n 'application/dash-patch+xml': ['mpp'],\n 'application/davmount+xml': ['davmount'],\n 'application/dicom': ['dcm'],\n 'application/docbook+xml': ['dbk'],\n 'application/dssc+der': ['dssc'],\n 'application/dssc+xml': ['xdssc'],\n 'application/ecmascript': ['ecma'],\n 'application/emma+xml': ['emma'],\n 'application/emotionml+xml': ['emotionml'],\n 'application/epub+zip': ['epub'],\n 'application/exi': ['exi'],\n 'application/express': ['exp'],\n 'application/fdf': ['fdf'],\n 'application/fdt+xml': ['fdt'],\n 'application/font-tdpfr': ['pfr'],\n 'application/geo+json': ['geojson'],\n 'application/gml+xml': ['gml'],\n 'application/gpx+xml': ['gpx'],\n 'application/gxf': ['gxf'],\n 'application/gzip': ['gz'],\n 'application/hjson': ['hjson'],\n 'application/hyperstudio': ['stk'],\n 'application/inkml+xml': ['ink', 'inkml'],\n 'application/ipfix': ['ipfix'],\n 'application/its+xml': ['its'],\n 'application/java-archive': ['jar', 'war', 'ear'],\n 'application/java-serialized-object': ['ser'],\n 'application/java-vm': ['class'],\n 'application/javascript': ['*js'],\n 'application/json': ['json', 'map'],\n 'application/json5': ['json5'],\n 'application/jsonml+json': ['jsonml'],\n 'application/ld+json': ['jsonld'],\n 'application/lgr+xml': ['lgr'],\n 'application/lost+xml': ['lostxml'],\n 'application/mac-binhex40': ['hqx'],\n 'application/mac-compactpro': ['cpt'],\n 'application/mads+xml': ['mads'],\n 'application/manifest+json': ['webmanifest'],\n 'application/marc': ['mrc'],\n 'application/marcxml+xml': ['mrcx'],\n 'application/mathematica': ['ma', 'nb', 'mb'],\n 'application/mathml+xml': ['mathml'],\n 'application/mbox': ['mbox'],\n 'application/media-policy-dataset+xml': ['mpf'],\n 'application/mediaservercontrol+xml': ['mscml'],\n 'application/metalink+xml': ['metalink'],\n 'application/metalink4+xml': ['meta4'],\n 'application/mets+xml': ['mets'],\n 'application/mmt-aei+xml': ['maei'],\n 'application/mmt-usd+xml': ['musd'],\n 'application/mods+xml': ['mods'],\n 'application/mp21': ['m21', 'mp21'],\n 'application/mp4': ['*mp4', '*mpg4', 'mp4s', 'm4p'],\n 'application/msix': ['msix'],\n 'application/msixbundle': ['msixbundle'],\n 'application/msword': ['doc', 'dot'],\n 'application/mxf': ['mxf'],\n 'application/n-quads': ['nq'],\n 'application/n-triples': ['nt'],\n 'application/node': ['cjs'],\n 'application/octet-stream': [\n 'bin',\n 'dms',\n 'lrf',\n 'mar',\n 'so',\n 'dist',\n 'distz',\n 'pkg',\n 'bpk',\n 'dump',\n 'elc',\n 'deploy',\n 'exe',\n 'dll',\n 'deb',\n 'dmg',\n 'iso',\n 'img',\n 'msi',\n 'msp',\n 'msm',\n 'buffer',\n ],\n 'application/oda': ['oda'],\n 'application/oebps-package+xml': ['opf'],\n 'application/ogg': ['ogx'],\n 'application/omdoc+xml': ['omdoc'],\n 'application/onenote': [\n 'onetoc',\n 'onetoc2',\n 'onetmp',\n 'onepkg',\n 'one',\n 'onea',\n ],\n 'application/oxps': ['oxps'],\n 'application/p2p-overlay+xml': ['relo'],\n 'application/patch-ops-error+xml': ['xer'],\n 'application/pdf': ['pdf'],\n 'application/pgp-encrypted': ['pgp'],\n 'application/pgp-keys': ['asc'],\n 'application/pgp-signature': ['sig', '*asc'],\n 'application/pics-rules': ['prf'],\n 'application/pkcs10': ['p10'],\n 'application/pkcs7-mime': ['p7m', 'p7c'],\n 'application/pkcs7-signature': ['p7s'],\n 'application/pkcs8': ['p8'],\n 'application/pkix-attr-cert': ['ac'],\n 'application/pkix-cert': ['cer'],\n 'application/pkix-crl': ['crl'],\n 'application/pkix-pkipath': ['pkipath'],\n 'application/pkixcmp': ['pki'],\n 'application/pls+xml': ['pls'],\n 'application/postscript': ['ai', 'eps', 'ps'],\n 'application/provenance+xml': ['provx'],\n 'application/pskc+xml': ['pskcxml'],\n 'application/raml+yaml': ['raml'],\n 'application/rdf+xml': ['rdf', 'owl'],\n 'application/reginfo+xml': ['rif'],\n 'application/relax-ng-compact-syntax': ['rnc'],\n 'application/resource-lists+xml': ['rl'],\n 'application/resource-lists-diff+xml': ['rld'],\n 'application/rls-services+xml': ['rs'],\n 'application/route-apd+xml': ['rapd'],\n 'application/route-s-tsid+xml': ['sls'],\n 'application/route-usd+xml': ['rusd'],\n 'application/rpki-ghostbusters': ['gbr'],\n 'application/rpki-manifest': ['mft'],\n 'application/rpki-roa': ['roa'],\n 'application/rsd+xml': ['rsd'],\n 'application/rss+xml': ['rss'],\n 'application/rtf': ['rtf'],\n 'application/sbml+xml': ['sbml'],\n 'application/scvp-cv-request': ['scq'],\n 'application/scvp-cv-response': ['scs'],\n 'application/scvp-vp-request': ['spq'],\n 'application/scvp-vp-response': ['spp'],\n 'application/sdp': ['sdp'],\n 'application/senml+xml': ['senmlx'],\n 'application/sensml+xml': ['sensmlx'],\n 'application/set-payment-initiation': ['setpay'],\n 'application/set-registration-initiation': ['setreg'],\n 'application/shf+xml': ['shf'],\n 'application/sieve': ['siv', 'sieve'],\n 'application/smil+xml': ['smi', 'smil'],\n 'application/sparql-query': ['rq'],\n 'application/sparql-results+xml': ['srx'],\n 'application/sql': ['sql'],\n 'application/srgs': ['gram'],\n 'application/srgs+xml': ['grxml'],\n 'application/sru+xml': ['sru'],\n 'application/ssdl+xml': ['ssdl'],\n 'application/ssml+xml': ['ssml'],\n 'application/swid+xml': ['swidtag'],\n 'application/tei+xml': ['tei', 'teicorpus'],\n 'application/thraud+xml': ['tfi'],\n 'application/timestamped-data': ['tsd'],\n 'application/toml': ['toml'],\n 'application/trig': ['trig'],\n 'application/ttml+xml': ['ttml'],\n 'application/ubjson': ['ubj'],\n 'application/urc-ressheet+xml': ['rsheet'],\n 'application/urc-targetdesc+xml': ['td'],\n 'application/voicexml+xml': ['vxml'],\n 'application/wasm': ['wasm'],\n 'application/watcherinfo+xml': ['wif'],\n 'application/widget': ['wgt'],\n 'application/winhlp': ['hlp'],\n 'application/wsdl+xml': ['wsdl'],\n 'application/wspolicy+xml': ['wspolicy'],\n 'application/xaml+xml': ['xaml'],\n 'application/xcap-att+xml': ['xav'],\n 'application/xcap-caps+xml': ['xca'],\n 'application/xcap-diff+xml': ['xdf'],\n 'application/xcap-el+xml': ['xel'],\n 'application/xcap-ns+xml': ['xns'],\n 'application/xenc+xml': ['xenc'],\n 'application/xfdf': ['xfdf'],\n 'application/xhtml+xml': ['xhtml', 'xht'],\n 'application/xliff+xml': ['xlf'],\n 'application/xml': ['xml', 'xsl', 'xsd', 'rng'],\n 'application/xml-dtd': ['dtd'],\n 'application/xop+xml': ['xop'],\n 'application/xproc+xml': ['xpl'],\n 'application/xslt+xml': ['*xsl', 'xslt'],\n 'application/xspf+xml': ['xspf'],\n 'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'],\n 'application/yang': ['yang'],\n 'application/yin+xml': ['yin'],\n 'application/zip': ['zip'],\n 'application/zip+dotlottie': ['lottie'],\n 'audio/3gpp': ['*3gpp'],\n 'audio/aac': ['adts', 'aac'],\n 'audio/adpcm': ['adp'],\n 'audio/amr': ['amr'],\n 'audio/basic': ['au', 'snd'],\n 'audio/midi': ['mid', 'midi', 'kar', 'rmi'],\n 'audio/mobile-xmf': ['mxmf'],\n 'audio/mp3': ['*mp3'],\n 'audio/mp4': ['m4a', 'mp4a', 'm4b'],\n 'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'],\n 'audio/ogg': ['oga', 'ogg', 'spx', 'opus'],\n 'audio/s3m': ['s3m'],\n 'audio/silk': ['sil'],\n 'audio/wav': ['wav'],\n 'audio/wave': ['*wav'],\n 'audio/webm': ['weba'],\n 'audio/xm': ['xm'],\n 'font/collection': ['ttc'],\n 'font/otf': ['otf'],\n 'font/ttf': ['ttf'],\n 'font/woff': ['woff'],\n 'font/woff2': ['woff2'],\n 'image/aces': ['exr'],\n 'image/apng': ['apng'],\n 'image/avci': ['avci'],\n 'image/avcs': ['avcs'],\n 'image/avif': ['avif'],\n 'image/bmp': ['bmp', 'dib'],\n 'image/cgm': ['cgm'],\n 'image/dicom-rle': ['drle'],\n 'image/dpx': ['dpx'],\n 'image/emf': ['emf'],\n 'image/fits': ['fits'],\n 'image/g3fax': ['g3'],\n 'image/gif': ['gif'],\n 'image/heic': ['heic'],\n 'image/heic-sequence': ['heics'],\n 'image/heif': ['heif'],\n 'image/heif-sequence': ['heifs'],\n 'image/hej2k': ['hej2'],\n 'image/ief': ['ief'],\n 'image/jaii': ['jaii'],\n 'image/jais': ['jais'],\n 'image/jls': ['jls'],\n 'image/jp2': ['jp2', 'jpg2'],\n 'image/jpeg': ['jpg', 'jpeg', 'jpe'],\n 'image/jph': ['jph'],\n 'image/jphc': ['jhc'],\n 'image/jpm': ['jpm', 'jpgm'],\n 'image/jpx': ['jpx', 'jpf'],\n 'image/jxl': ['jxl'],\n 'image/jxr': ['jxr'],\n 'image/jxra': ['jxra'],\n 'image/jxrs': ['jxrs'],\n 'image/jxs': ['jxs'],\n 'image/jxsc': ['jxsc'],\n 'image/jxsi': ['jxsi'],\n 'image/jxss': ['jxss'],\n 'image/ktx': ['ktx'],\n 'image/ktx2': ['ktx2'],\n 'image/pjpeg': ['jfif'],\n 'image/png': ['png'],\n 'image/sgi': ['sgi'],\n 'image/svg+xml': ['svg', 'svgz'],\n 'image/t38': ['t38'],\n 'image/tiff': ['tif', 'tiff'],\n 'image/tiff-fx': ['tfx'],\n 'image/webp': ['webp'],\n 'image/wmf': ['wmf'],\n 'message/disposition-notification': ['disposition-notification'],\n 'message/global': ['u8msg'],\n 'message/global-delivery-status': ['u8dsn'],\n 'message/global-disposition-notification': ['u8mdn'],\n 'message/global-headers': ['u8hdr'],\n 'message/rfc822': ['eml', 'mime', 'mht', 'mhtml'],\n 'model/3mf': ['3mf'],\n 'model/gltf+json': ['gltf'],\n 'model/gltf-binary': ['glb'],\n 'model/iges': ['igs', 'iges'],\n 'model/jt': ['jt'],\n 'model/mesh': ['msh', 'mesh', 'silo'],\n 'model/mtl': ['mtl'],\n 'model/obj': ['obj'],\n 'model/prc': ['prc'],\n 'model/step': ['step', 'stp', 'stpnc', 'p21', '210'],\n 'model/step+xml': ['stpx'],\n 'model/step+zip': ['stpz'],\n 'model/step-xml+zip': ['stpxz'],\n 'model/stl': ['stl'],\n 'model/u3d': ['u3d'],\n 'model/vrml': ['wrl', 'vrml'],\n 'model/x3d+binary': ['*x3db', 'x3dbz'],\n 'model/x3d+fastinfoset': ['x3db'],\n 'model/x3d+vrml': ['*x3dv', 'x3dvz'],\n 'model/x3d+xml': ['x3d', 'x3dz'],\n 'model/x3d-vrml': ['x3dv'],\n 'text/cache-manifest': ['appcache', 'manifest'],\n 'text/calendar': ['ics', 'ifb'],\n 'text/coffeescript': ['coffee', 'litcoffee'],\n 'text/css': ['css'],\n 'text/csv': ['csv'],\n 'text/html': ['html', 'htm', 'shtml'],\n 'text/jade': ['jade'],\n 'text/javascript': ['js', 'mjs'],\n 'text/jsx': ['jsx'],\n 'text/less': ['less'],\n 'text/markdown': ['md', 'markdown'],\n 'text/mathml': ['mml'],\n 'text/mdx': ['mdx'],\n 'text/n3': ['n3'],\n 'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'],\n 'text/richtext': ['rtx'],\n 'text/rtf': ['*rtf'],\n 'text/sgml': ['sgml', 'sgm'],\n 'text/shex': ['shex'],\n 'text/slim': ['slim', 'slm'],\n 'text/spdx': ['spdx'],\n 'text/stylus': ['stylus', 'styl'],\n 'text/tab-separated-values': ['tsv'],\n 'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'],\n 'text/turtle': ['ttl'],\n 'text/uri-list': ['uri', 'uris', 'urls'],\n 'text/vcard': ['vcard'],\n 'text/vtt': ['vtt'],\n 'text/wgsl': ['wgsl'],\n 'text/xml': ['*xml'],\n 'text/yaml': ['yaml', 'yml'],\n 'video/3gpp': ['3gp', '3gpp'],\n 'video/3gpp2': ['3g2'],\n 'video/h261': ['h261'],\n 'video/h263': ['h263'],\n 'video/h264': ['h264'],\n 'video/iso.segment': ['m4s'],\n 'video/jpeg': ['jpgv'],\n 'video/jpm': ['*jpm', '*jpgm'],\n 'video/mj2': ['mj2', 'mjp2'],\n 'video/mp2t': ['ts', 'm2t', 'm2ts', 'mts'],\n 'video/mp4': ['mp4', 'mp4v', 'mpg4'],\n 'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'],\n 'video/ogg': ['ogv'],\n 'video/quicktime': ['qt', 'mov'],\n 'video/webm': ['webm'],\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map((ext) => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred)\n continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string')\n return null;\n const last = path.replace(/^.*[/\\\\]/s, '').toLowerCase();\n const ext = last.replace(/^.*\\./s, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath)\n return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string')\n return null;\n type = type?.split?.(';')[0];\n return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n }\n getAllExtensions(type) {\n if (typeof type !== 'string')\n return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes)._freeze();\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","import mime from \"mime/lite\";\nimport picomatch from \"picomatch/posix\";\n\nconst parseInputAccept = (inputAccept: string): [string[], string[]] => {\n const extensions: string[] = [];\n const mimeTypes: string[] = [];\n\n inputAccept\n .split(\",\")\n .map(mimeType => mimeType.trim())\n .filter(Boolean)\n .forEach(fileType => {\n if (fileType.startsWith(\".\")) {\n extensions.push(`*${fileType}`);\n } else {\n mimeTypes.push(fileType);\n }\n });\n\n return [extensions, mimeTypes];\n};\n\nclass AcceptedFileTypes {\n private extensions: string[];\n private mimeTypes: string[];\n\n constructor(inputAccept: string) {\n const [extensions, mimeTypes] = parseInputAccept(inputAccept);\n\n this.extensions = extensions;\n this.mimeTypes = mimeTypes;\n }\n\n public isAccepted(fileName: string): boolean {\n if (this.extensions.length === 0 && this.mimeTypes.length === 0) {\n return true;\n }\n return (\n this.isMimeTypeAccepted(mime.getType(fileName)) ||\n this.isExtensionAccepted(fileName)\n );\n }\n\n private isExtensionAccepted(fileName: string): boolean {\n if (this.extensions.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(fileName, this.extensions, { nocase: true });\n }\n\n private isMimeTypeAccepted(mimeType: null | string): boolean {\n if (!mimeType || this.mimeTypes.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(mimeType, this.mimeTypes);\n }\n}\n\nexport default AcceptedFileTypes;\n","import AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\n\nconst getEntriesFromDirectory = async (\n directoryEntry: FileSystemDirectoryEntry\n): Promise =>\n new Promise((resolve, reject) => {\n directoryEntry.createReader().readEntries(resolve, reject);\n });\n\nconst getFileFromFileSystemFileEntry = async (\n fileEntry: FileSystemFileEntry\n): Promise =>\n new Promise((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\nconst getFilesFromFileSystemEntries = async (\n entries: FileSystemEntry[]\n): Promise => {\n const result: File[] = [];\n\n for (const entry of entries) {\n const filesFromEntry = await getFilesFromFileSystemEntry(entry);\n filesFromEntry.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromFileSystemEntry = async (\n entry: FileSystemEntry\n): Promise => {\n const result: File[] = [];\n\n if (entry.isFile) {\n const file = await getFileFromFileSystemFileEntry(\n entry as FileSystemFileEntry\n );\n result.push(file);\n } else if (entry.isDirectory) {\n const entriesFromDirectory = await getEntriesFromDirectory(\n entry as FileSystemDirectoryEntry\n );\n const files = await getFilesFromFileSystemEntries(entriesFromDirectory);\n files.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromDataTransfer = async (\n dataTransfer: DataTransfer\n): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (dataTransfer.items) {\n const files: File[] = [];\n\n for (const item of dataTransfer.items) {\n const fileSystemEntry = item.webkitGetAsEntry();\n if (fileSystemEntry) {\n const filesFromEntry = await getFilesFromFileSystemEntry(\n fileSystemEntry\n );\n filesFromEntry.forEach(file => files.push(file));\n } else {\n const file = item.getAsFile();\n\n if (file) {\n files.push(file);\n }\n }\n }\n\n return files;\n } else {\n // backwards compatibility\n return [...dataTransfer.files];\n }\n};\n\nclass DropArea {\n acceptedFileTypes: AcceptedFileTypes;\n container: Element;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n\n constructor({\n container,\n inputAccept,\n onUploadFiles,\n renderer\n }: {\n container: Element;\n inputAccept: string;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n }) {\n this.container = container;\n this.onUploadFiles = onUploadFiles;\n this.acceptedFileTypes = new AcceptedFileTypes(inputAccept);\n this.renderer = renderer;\n\n container.addEventListener(\"dragenter\", () => {\n container.classList.add(\"dff-dropping\");\n });\n container.addEventListener(\"dragleave\", () => {\n container.classList.remove(\"dff-dropping\");\n });\n container.addEventListener(\"dragover\", e => {\n container.classList.add(\"dff-dropping\");\n e.preventDefault();\n });\n container.addEventListener(\"drop\", this.onDrop);\n }\n\n onDrop = (e: Event): void => {\n const dragEvent = e as DragEvent;\n this.container.classList.remove(\"dff-dropping\");\n dragEvent.preventDefault();\n dragEvent.stopPropagation();\n\n const uploadFiles = async (): Promise => {\n try {\n if (dragEvent.dataTransfer) {\n const files = await getFilesFromDataTransfer(dragEvent.dataTransfer);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.renderer.setErrorInvalidFiles(invalidFiles);\n void this.onUploadFiles(acceptedFiles);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n void uploadFiles();\n };\n}\n\nexport default DropArea;\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","export const formatBytes = (bytes: number, decimals: number): string => {\n if (bytes === 0) {\n return \"0 Bytes\";\n }\n\n const k = 1024;\n const dm = decimals <= 0 ? 0 : decimals || 2;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const n = parseFloat((bytes / k ** i).toFixed(dm));\n const size = sizes[i];\n\n if (size == null) {\n return \"\";\n } else {\n return `${n.toString()} ${size}`;\n }\n};\n\nexport const getInputNameWithPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? `${prefix}-${fieldName}` : fieldName);\n\nconst getInputNameWithoutPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? fieldName.slice(prefix.length + 1) : fieldName);\n\nexport const findInput = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): HTMLInputElement | null => {\n const inputNameWithPrefix = getInputNameWithPrefix(fieldName, prefix);\n const input = form.querySelector(`[name=\"${inputNameWithPrefix}\"]`);\n\n if (!input) {\n return null;\n }\n\n return input as HTMLInputElement;\n};\n\nexport const getUploadsFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-uploads`;\n\nexport const getInputValueForFormAndPrefix = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): string | undefined => findInput(form, fieldName, prefix)?.value;\n\nexport const getMetadataFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-metadata`;\n","import escape from \"escape-html\";\n\nimport { formatBytes } from \"./util.ts\";\n\nclass RenderUploadFile {\n container: Element;\n errors: Element;\n input: HTMLInputElement;\n translations: Record;\n\n constructor({\n input,\n parent,\n skipRequired,\n translations\n }: {\n input: HTMLInputElement;\n parent: Element;\n skipRequired: boolean;\n translations: Record;\n }) {\n this.container = this.createFilesContainer(parent);\n this.errors = this.createErrorContainer(parent);\n this.input = input;\n this.translations = translations;\n\n if (skipRequired) {\n this.input.required = false;\n }\n }\n\n public addNewUpload(filename: string, uploadIndex: number): HTMLElement {\n const div = this.addFile(filename, uploadIndex);\n\n const progressSpan = document.createElement(\"span\");\n progressSpan.className = \"dff-progress\";\n\n const innerSpan = document.createElement(\"span\");\n innerSpan.className = \"dff-progress-inner\";\n\n progressSpan.appendChild(innerSpan);\n div.appendChild(progressSpan);\n\n const cancelLink = document.createElement(\"a\");\n cancelLink.className = \"dff-cancel\";\n\n this.setTextContent(cancelLink, this.getTranslation(\"Cancel\"));\n cancelLink.setAttribute(\"data-index\", uploadIndex.toString());\n cancelLink.href = \"#\";\n div.appendChild(cancelLink);\n\n return div;\n }\n\n public addUploadedFile(\n filename: string,\n uploadIndex: number,\n filesize?: number\n ): HTMLElement {\n const element = this.addFile(filename, uploadIndex);\n this.setSuccess(uploadIndex, filesize);\n return element;\n }\n\n public clearInput(): void {\n const { input } = this;\n\n input.value = \"\";\n }\n\n public deleteFile(index: number): void {\n const div = this.findFileDiv(index);\n\n if (div) {\n div.remove();\n }\n }\n\n public disableCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.classList.add(\"dff-disabled\");\n }\n }\n\n public disableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.add(\"dff-disabled\");\n }\n }\n\n public findFileDiv(index: number): HTMLElement | null {\n return this.container.querySelector(`.dff-file-id-${index.toString()}`);\n }\n\n public removeDropHint(): void {\n const dropHint = this.container.querySelector(\".dff-drop-hint\");\n\n if (dropHint) {\n dropHint.remove();\n }\n }\n\n public renderDropHint(): void {\n if (this.container.querySelector(\".dff-drop-hint\")) {\n return;\n }\n\n const dropHint = document.createElement(\"div\");\n dropHint.className = \"dff-drop-hint\";\n this.setTextContent(dropHint, this.getTranslation(\"Drop your files here\"));\n\n this.container.appendChild(dropHint);\n }\n\n public setDeleteFailed(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Delete failed\"));\n\n this.enableDelete(index);\n }\n\n public setError(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Upload failed\"));\n\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-fail\");\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public setErrorInvalidFiles(files: File[]): void {\n const errorsMessages = document.createElement(\"ul\");\n\n for (const file of files) {\n const msg = document.createElement(\"li\");\n const invalidFileTypeMessage = this.getTranslation(\"Invalid file type\");\n this.setTextContent(msg, `${file.name}: ${invalidFileTypeMessage}`);\n msg.className = \"dff-error\";\n errorsMessages.appendChild(msg);\n }\n\n this.errors.replaceChildren(errorsMessages);\n this.clearInput();\n }\n\n public setSuccess(index: number, size?: number): void {\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-success\");\n\n if (size != null) {\n const fileSizeInfo = document.createElement(\"span\");\n this.setTextContent(fileSizeInfo, formatBytes(size, 2));\n fileSizeInfo.className = \"dff-filesize\";\n\n el.appendChild(fileSizeInfo);\n }\n\n const deleteLink = document.createElement(\"a\");\n this.setTextContent(deleteLink, this.getTranslation(\"Delete\"));\n deleteLink.className = \"dff-delete\";\n deleteLink.setAttribute(\"data-index\", index.toString());\n deleteLink.href = \"#\";\n\n el.appendChild(deleteLink);\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public updateProgress(index: number, percentage: string): void {\n const el = this.container.querySelector(`.dff-file-id-${index.toString()}`);\n if (el) {\n const innerProgressSpan = el.querySelector(\".dff-progress-inner\");\n\n if (innerProgressSpan) {\n (innerProgressSpan as HTMLElement).style.width = `${percentage}%`;\n }\n }\n }\n\n private addFile(filename: string, uploadIndex: number): HTMLElement {\n const div = document.createElement(\"div\");\n div.className = `dff-file dff-file-id-${uploadIndex.toString()}`;\n\n const nameSpan = document.createElement(\"span\");\n nameSpan.innerHTML = escape(filename);\n nameSpan.className = \"dff-filename\";\n nameSpan.setAttribute(\"data-index\", uploadIndex.toString());\n\n div.appendChild(nameSpan);\n this.container.appendChild(div);\n\n this.input.required = false;\n return div;\n }\n\n private createErrorContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-invalid-files\";\n parent.appendChild(div);\n return div;\n };\n\n private createFilesContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-files\";\n parent.appendChild(div);\n\n return div;\n };\n\n private enableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.remove(\"dff-disabled\");\n }\n }\n\n private findCancelSpan(index: number): HTMLElement | null {\n const el = this.findFileDiv(index);\n\n if (!el) {\n return null;\n }\n\n return el.querySelector(\".dff-cancel\");\n }\n\n private findDeleteLink(index: number): HTMLElement | null {\n const div = this.findFileDiv(index);\n if (!div) {\n return div;\n }\n\n return div.querySelector(\".dff-delete\");\n }\n\n private getTranslation(key: string) {\n return this.translations[key] ?? key;\n }\n\n private removeCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.remove();\n }\n }\n\n private removeProgress(index: number): void {\n const el = this.findFileDiv(index);\n\n if (el) {\n const progressSpan = el.querySelector(\".dff-progress\");\n\n if (progressSpan) {\n progressSpan.remove();\n }\n }\n }\n\n private setErrorMessage(index: number, message: string): void {\n const el = this.findFileDiv(index);\n if (!el) {\n return;\n }\n\n const originalMessageSpan = el.querySelector(\".dff-error\");\n if (originalMessageSpan) {\n originalMessageSpan.remove();\n }\n\n const span = document.createElement(\"span\");\n span.classList.add(\"dff-error\");\n this.setTextContent(span, message);\n\n el.appendChild(span);\n }\n\n private setTextContent(element: HTMLElement, text: string) {\n element.append(document.createTextNode(text));\n }\n}\n\nexport default RenderUploadFile;\n","export interface InitialExistingFile {\n name: string;\n size: number;\n type: \"existing\";\n}\nexport type InitialFile =\n | InitialExistingFile\n | InitialPlaceholderFile\n | InitialS3File\n | InitialTusFile;\n\nexport interface InitialPlaceholderFile {\n id: string;\n name: string;\n size: number;\n type: \"placeholder\";\n}\n\nexport interface InitialS3File {\n id: string;\n name: string;\n original_name: string;\n size: number;\n type: \"s3\";\n}\n\nexport interface InitialTusFile {\n id: string;\n name: string;\n size: number;\n type: \"tus\";\n url: string;\n}\n\nexport type UploadType =\n | \"existing\"\n | \"placeholder\"\n | \"s3\"\n | \"tus\"\n | \"uploadedS3\"\n | \"uploadedTus\";\n\ninterface UploadParameters {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n}\n\ntype UploadStatus = \"done\" | \"error\" | \"uploading\";\n\nabstract class BaseUpload {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n\n constructor({ name, status, type, uploadIndex }: UploadParameters) {\n this.name = name;\n this.status = status;\n this.type = type;\n this.uploadIndex = uploadIndex;\n }\n\n public async abort(): Promise {\n //\n }\n public async delete(): Promise {\n //\n }\n\n public abstract getId(): string | undefined;\n public abstract getInitialFile(): InitialFile;\n public abstract getSize(): number | undefined;\n}\n\nexport default BaseUpload;\n","function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n}\n\nexport default function urlJoin() {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n}\n","import urljoin from \"url-join\";\n\nexport interface LocationInfo {\n location: string;\n}\n\nexport interface MultipartUpload {\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport interface Part {\n ETag: string;\n PartNumber: number;\n}\n\nexport interface UrlInfo {\n url: string;\n}\n\nexport const MB = 1024 * 1024;\n\ninterface AbortMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport const abortMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n uploadId\n}: AbortMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, `?key=${filename}`);\n return fetch(url, {\n headers: headers,\n method: \"delete\"\n }).then(response => {\n return response.json();\n });\n};\n\ninterface CompleteMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n parts: Part[];\n uploadId: string;\n}\n\nexport const completeMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n parts,\n uploadId\n}: CompleteMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, \"complete\", `?key=${filename}`);\n return fetch(url, {\n body: JSON.stringify({\n parts: parts\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as LocationInfo;\n });\n};\n\ninterface CreateMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n}\n\nexport const createMultipartUpload = ({\n csrfToken,\n endpoint,\n file,\n s3UploadDir\n}: CreateMultipartUploadParameters): Promise => {\n const headers = new Headers({\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n \"X-CSRFToken\": csrfToken\n });\n return fetch(endpoint, {\n body: JSON.stringify({\n contentType: file.type,\n filename: file.name,\n s3UploadDir: s3UploadDir\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as MultipartUpload;\n });\n};\n\nexport const getChunkSize = (file: File): number =>\n Math.ceil(file.size / 10000);\n\ninterface PrepareUploadPartParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n number: number;\n uploadId: string;\n}\n\nexport const prepareUploadPart = ({\n csrfToken,\n endpoint,\n key,\n number,\n uploadId\n}: PrepareUploadPartParameters): Promise => {\n const filename = encodeURIComponent(key);\n const headers = new Headers({ \"X-CSRFToken\": csrfToken });\n const url = urljoin(\n endpoint,\n uploadId,\n number.toString(),\n `?key=${filename}`\n );\n return fetch(url, {\n headers: headers,\n method: \"get\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as UrlInfo;\n });\n};\n\nexport const remove = (arr: unknown[], el: unknown): void => {\n const i = arr.indexOf(el);\n if (i !== -1) {\n arr.splice(i, 1);\n }\n};\n","// The following code is adapted from https://github.com/transloadit/uppy/blob/master/packages/%40uppy/aws-s3-multipart/src/MultipartUploader.js\n// which is released under a MIT License (https://github.com/transloadit/uppy/blob/master/LICENSE)\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport {\n abortMultipartUpload,\n completeMultipartUpload,\n createMultipartUpload,\n getChunkSize,\n MB,\n MultipartUpload,\n Part,\n prepareUploadPart,\n remove,\n UrlInfo\n} from \"./s3_utils.ts\";\n\ninterface ChunkState {\n busy: boolean;\n done: boolean;\n etag?: string;\n uploaded: number;\n}\n\ninterface S3UploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n uploadIndex: number;\n}\n\nclass S3Upload extends BaseUpload {\n public onError?: (error: unknown) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n\n private chunks: Blob[];\n private chunkState: ChunkState[];\n private createdPromise: Promise;\n private csrfToken: string;\n private endpoint: string;\n private file: File;\n private key: null | string;\n private parts: Part[];\n private s3UploadDir: string;\n private uploadId: null | string;\n private uploading: XMLHttpRequest[];\n\n constructor({\n csrfToken,\n endpoint,\n file,\n s3UploadDir,\n uploadIndex\n }: S3UploadParameters) {\n super({ name: file.name, status: \"uploading\", type: \"s3\", uploadIndex });\n\n this.csrfToken = csrfToken;\n this.endpoint = endpoint;\n this.file = file;\n this.s3UploadDir = s3UploadDir;\n\n this.key = null;\n this.uploadId = null;\n this.parts = [];\n\n // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n // upload was created already. That also ensures that the sequencing is right\n // (so the `OP` definitely happens if the upload is created).\n //\n // This mostly exists to make `abortUpload` work well: only sending the abort request if\n // the upload was already created, and if the createMultipartUpload request is still in flight,\n // aborting it immediately after it finishes.\n this.createdPromise = Promise.reject(new Error());\n this.chunks = [];\n this.chunkState = [];\n this.uploading = [];\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n\n this.initChunks();\n\n this.createdPromise.catch(() => ({})); // silence uncaught rejection warning\n }\n\n public async abort(): Promise {\n this.uploading.slice().forEach(xhr => {\n xhr.abort();\n });\n this.uploading = [];\n\n await this.createdPromise;\n\n if (this.key && this.uploadId) {\n await abortMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n uploadId: this.uploadId\n });\n }\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getId(): string | undefined {\n return this.uploadId ?? undefined;\n }\n\n public getInitialFile(): InitialFile {\n return {\n id: this.uploadId ?? \"\",\n name: this.key ?? \"\",\n original_name: this.file.name,\n size: this.file.size,\n type: \"s3\"\n };\n }\n\n public getSize(): number {\n return this.file.size;\n }\n\n public start(): void {\n void this.createUpload();\n }\n\n private completeUpload(): Promise {\n // Parts may not have completed uploading in sorted order, if limit > 1.\n this.parts.sort((a, b) => a.PartNumber - b.PartNumber);\n\n if (!this.uploadId || !this.key) {\n return Promise.resolve();\n }\n\n return completeMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n parts: this.parts,\n uploadId: this.uploadId\n }).then(\n () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n },\n (err: unknown) => {\n this.handleError(err as Error);\n }\n );\n }\n\n private createUpload(): Promise {\n this.createdPromise = createMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n file: this.file,\n s3UploadDir: this.s3UploadDir\n });\n return this.createdPromise\n .then((result: MultipartUpload | null) => {\n const valid =\n typeof result === \"object\" &&\n result &&\n typeof result.uploadId === \"string\" &&\n typeof result.key === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.\"\n );\n }\n\n this.key = result.key;\n this.uploadId = result.uploadId;\n\n this.uploadParts();\n })\n .catch((err: unknown) => {\n this.handleError(err);\n });\n }\n\n private handleError(error: unknown): void {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n }\n\n private initChunks(): void {\n const chunks: Blob[] = [];\n const desiredChunkSize = getChunkSize(this.file);\n // at least 5MB per request, at most 10k requests\n const minChunkSize = Math.max(5 * MB, Math.ceil(this.file.size / 10000));\n const chunkSize = Math.max(desiredChunkSize, minChunkSize);\n\n for (let i = 0; i < this.file.size; i += chunkSize) {\n const end = Math.min(this.file.size, i + chunkSize);\n chunks.push(this.file.slice(i, end));\n }\n\n this.chunks = chunks;\n this.chunkState = chunks.map(() => ({\n busy: false,\n done: false,\n uploaded: 0\n }));\n }\n\n private onPartComplete(index: number, etag: string): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.etag = etag;\n state.done = true;\n }\n\n const part = {\n ETag: etag,\n PartNumber: index + 1\n };\n this.parts.push(part);\n\n this.uploadParts();\n }\n\n private onPartProgress(index: number, sent: number): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.uploaded = sent;\n }\n\n if (this.onProgress) {\n const totalUploaded = this.chunkState.reduce((n, c) => n + c.uploaded, 0);\n this.onProgress(totalUploaded, this.file.size);\n }\n }\n\n private uploadPart(index: number): Promise {\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = true;\n }\n\n if (!this.key || !this.uploadId) {\n return Promise.resolve();\n }\n\n return prepareUploadPart({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n number: index + 1,\n uploadId: this.uploadId\n })\n .then(result => {\n const valid =\n typeof result === \"object\" && typeof result.url === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.\"\n );\n }\n return result;\n })\n .then(\n ({ url }: UrlInfo) => {\n this.uploadPartBytes(index, url);\n },\n (err: unknown) => {\n this.handleError(err);\n }\n );\n }\n\n private uploadPartBytes(index: number, url: string): void {\n const body = this.chunks[index];\n const xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", url, true);\n xhr.responseType = \"text\";\n\n this.uploading.push(xhr);\n\n xhr.upload.addEventListener(\"progress\", ev => {\n if (!ev.lengthComputable) {\n return;\n }\n\n this.onPartProgress(index, ev.loaded);\n });\n\n xhr.addEventListener(\"abort\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n if (xhr.status < 200 || xhr.status >= 300) {\n this.handleError(new Error(\"Non 2xx\"));\n return;\n }\n\n this.onPartProgress(index, body?.size ?? 0);\n\n // NOTE This must be allowed by CORS.\n const etag = xhr.getResponseHeader(\"ETag\");\n if (etag === null) {\n this.handleError(\n new Error(\n \"AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.\"\n )\n );\n return;\n }\n\n this.onPartComplete(index, etag);\n });\n\n xhr.addEventListener(\"error\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n const error = new Error(\"Unknown error\");\n this.handleError(error);\n });\n xhr.send(body);\n }\n\n private uploadParts(): void {\n const need = 1 - this.uploading.length;\n if (need === 0) {\n return;\n }\n\n // All parts are uploaded.\n if (this.chunkState.every(state => state.done)) {\n void this.completeUpload();\n return;\n }\n\n const candidates = [];\n for (let i = 0; i < this.chunkState.length; i++) {\n const state = this.chunkState[i];\n\n if (!state || state.done || state.busy) {\n continue;\n }\n\n candidates.push(i);\n if (candidates.length >= need) {\n break;\n }\n }\n\n candidates.forEach(index => {\n void this.uploadPart(index);\n });\n }\n}\n\nexport default S3Upload;\n","class DetailedError extends Error {\n constructor(message, causingErr = null, req = null, res = null) {\n super(message)\n\n this.originalRequest = req\n this.originalResponse = res\n this.causingError = causingErr\n\n if (causingErr != null) {\n message += `, caused by ${causingErr.toString()}`\n }\n\n if (req != null) {\n const requestId = req.getHeader('X-Request-ID') || 'n/a'\n const method = req.getMethod()\n const url = req.getURL()\n const status = res ? res.getStatus() : 'n/a'\n const body = res ? res.getBody() || '' : 'n/a'\n message += `, originated from request (method: ${method}, url: ${url}, response code: ${status}, response text: ${body}, request id: ${requestId})`\n }\n this.message = message\n }\n}\n\nexport default DetailedError\n","let isEnabled = false\n\nexport function enableDebugLog() {\n isEnabled = true\n}\n\nexport function log(msg) {\n if (!isEnabled) return\n console.log(msg)\n}\n","export default class NoopUrlStorage {\n listAllUploads() {\n return Promise.resolve([])\n }\n\n findUploadsByFingerprint(_fingerprint) {\n return Promise.resolve([])\n }\n\n removeUpload(_urlStorageKey) {\n return Promise.resolve()\n }\n\n addUpload(_fingerprint, _upload) {\n return Promise.resolve(null)\n }\n}\n","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.8';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n const v = c === 'x' ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n}\n","import { Base64 } from 'js-base64'\nimport URL from 'url-parse'\nimport DetailedError from './error.js'\nimport { log } from './logger.js'\nimport uuid from './uuid.js'\n\nconst PROTOCOL_TUS_V1 = 'tus-v1'\nconst PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03'\nconst PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05'\n\nconst defaultOptions = {\n endpoint: null,\n\n uploadUrl: null,\n metadata: {},\n metadataForPartialUploads: {},\n fingerprint: null,\n uploadSize: null,\n\n onProgress: null,\n onChunkComplete: null,\n onSuccess: null,\n onError: null,\n onUploadUrlAvailable: null,\n\n overridePatchMethod: false,\n headers: {},\n addRequestId: false,\n onBeforeRequest: null,\n onAfterResponse: null,\n onShouldRetry: defaultOnShouldRetry,\n\n chunkSize: Number.POSITIVE_INFINITY,\n retryDelays: [0, 1000, 3000, 5000],\n parallelUploads: 1,\n parallelUploadBoundaries: null,\n storeFingerprintForResuming: true,\n removeFingerprintOnSuccess: false,\n uploadLengthDeferred: false,\n uploadDataDuringCreation: false,\n\n urlStorage: null,\n fileReader: null,\n httpStack: null,\n\n protocol: PROTOCOL_TUS_V1,\n}\n\nclass BaseUpload {\n constructor(file, options) {\n // Warn about removed options from previous versions\n if ('resume' in options) {\n console.log(\n 'tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.',\n )\n }\n\n // The default options will already be added from the wrapper classes.\n this.options = options\n\n // Cast chunkSize to integer\n this.options.chunkSize = Number(this.options.chunkSize)\n\n // The storage module used to store URLs\n this._urlStorage = this.options.urlStorage\n\n // The underlying File/Blob object\n this.file = file\n\n // The URL against which the file will be uploaded\n this.url = null\n\n // The underlying request object for the current PATCH request\n this._req = null\n\n // The fingerpinrt for the current file (set after start())\n this._fingerprint = null\n\n // The key that the URL storage returned when saving an URL with a fingerprint,\n this._urlStorageKey = null\n\n // The offset used in the current PATCH request\n this._offset = null\n\n // True if the current PATCH request has been aborted\n this._aborted = false\n\n // The file's size in bytes\n this._size = null\n\n // The Source object which will wrap around the given file and provides us\n // with a unified interface for getting its size and slice chunks from its\n // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n this._source = null\n\n // The current count of attempts which have been made. Zero indicates none.\n this._retryAttempt = 0\n\n // The timeout's ID which is used to delay the next retry\n this._retryTimeout = null\n\n // The offset of the remote upload before the latest attempt was started.\n this._offsetBeforeRetry = 0\n\n // An array of BaseUpload instances which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploads = null\n\n // An array of upload URLs which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploadUrls = null\n }\n\n /**\n * Use the Termination extension to delete an upload from the server by sending a DELETE\n * request to the specified upload URL. This is only possible if the server supports the\n * Termination extension. If the `options.retryDelays` property is set, the method will\n * also retry if an error ocurrs.\n *\n * @param {String} url The upload's URL which will be terminated.\n * @param {object} options Optional options for influencing HTTP requests.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n static terminate(url, options = {}) {\n const req = openRequest('DELETE', url, options)\n\n return sendRequest(req, null, options)\n .then((res) => {\n // A 204 response indicates a successfull request\n if (res.getStatus() === 204) {\n return\n }\n\n throw new DetailedError('tus: unexpected response while terminating upload', null, req, res)\n })\n .catch((err) => {\n if (!(err instanceof DetailedError)) {\n err = new DetailedError('tus: failed to terminate upload', err, req, null)\n }\n\n if (!shouldRetry(err, 0, options)) {\n throw err\n }\n\n // Instead of keeping track of the retry attempts, we remove the first element from the delays\n // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n // We recursively call the terminate function will removing elements from the retryDelays array.\n const delay = options.retryDelays[0]\n const remainingDelays = options.retryDelays.slice(1)\n const newOptions = {\n ...options,\n retryDelays: remainingDelays,\n }\n return new Promise((resolve) => setTimeout(resolve, delay)).then(() =>\n BaseUpload.terminate(url, newOptions),\n )\n })\n }\n\n findPreviousUploads() {\n return this.options\n .fingerprint(this.file, this.options)\n .then((fingerprint) => this._urlStorage.findUploadsByFingerprint(fingerprint))\n }\n\n resumeFromPreviousUpload(previousUpload) {\n this.url = previousUpload.uploadUrl || null\n this._parallelUploadUrls = previousUpload.parallelUploadUrls || null\n this._urlStorageKey = previousUpload.urlStorageKey\n }\n\n start() {\n const { file } = this\n\n if (!file) {\n this._emitError(new Error('tus: no file or stream to upload provided'))\n return\n }\n\n if (\n ![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(\n this.options.protocol,\n )\n ) {\n this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`))\n return\n }\n\n if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'))\n return\n }\n\n const { retryDelays } = this.options\n if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'))\n return\n }\n\n if (this.options.parallelUploads > 1) {\n // Test which options are incompatible with parallel uploads.\n for (const optionName of ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']) {\n if (this.options[optionName]) {\n this._emitError(\n new Error(`tus: cannot use the ${optionName} option when parallelUploads is enabled`),\n )\n return\n }\n }\n }\n\n if (this.options.parallelUploadBoundaries) {\n if (this.options.parallelUploads <= 1) {\n this._emitError(\n new Error(\n 'tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled',\n ),\n )\n return\n }\n if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n this._emitError(\n new Error(\n 'tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`',\n ),\n )\n return\n }\n }\n\n this.options\n .fingerprint(file, this.options)\n .then((fingerprint) => {\n if (fingerprint == null) {\n log(\n 'No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.',\n )\n } else {\n log(`Calculated fingerprint: ${fingerprint}`)\n }\n\n this._fingerprint = fingerprint\n\n if (this._source) {\n return this._source\n }\n return this.options.fileReader.openFile(file, this.options.chunkSize)\n })\n .then((source) => {\n this._source = source\n\n // First, we look at the uploadLengthDeferred option.\n // Next, we check if the caller has supplied a manual upload size.\n // Finally, we try to use the calculated size from the source object.\n if (this.options.uploadLengthDeferred) {\n this._size = null\n } else if (this.options.uploadSize != null) {\n this._size = Number(this.options.uploadSize)\n if (Number.isNaN(this._size)) {\n this._emitError(new Error('tus: cannot convert `uploadSize` option into a number'))\n return\n }\n } else {\n this._size = this._source.size\n if (this._size == null) {\n this._emitError(\n new Error(\n \"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\",\n ),\n )\n return\n }\n }\n\n // If the upload was configured to use multiple requests or if we resume from\n // an upload which used multiple requests, we start a parallel upload.\n if (this.options.parallelUploads > 1 || this._parallelUploadUrls != null) {\n this._startParallelUpload()\n } else {\n this._startSingleUpload()\n }\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a parallelized upload, where one file is split into\n * multiple request which are run in parallel.\n *\n * @api private\n */\n _startParallelUpload() {\n const totalSize = this._size\n let totalProgress = 0\n this._parallelUploads = []\n\n const partCount =\n this._parallelUploadUrls != null\n ? this._parallelUploadUrls.length\n : this.options.parallelUploads\n\n // The input file will be split into multiple slices which are uploaded in separate\n // requests. Here we get the start and end position for the slices.\n const parts =\n this.options.parallelUploadBoundaries ?? splitSizeIntoParts(this._source.size, partCount)\n\n // Attach URLs from previous uploads, if available.\n if (this._parallelUploadUrls) {\n parts.forEach((part, index) => {\n part.uploadUrl = this._parallelUploadUrls[index] || null\n })\n }\n\n // Create an empty list for storing the upload URLs\n this._parallelUploadUrls = new Array(parts.length)\n\n // Generate a promise for each slice that will be resolve if the respective\n // upload is completed.\n const uploads = parts.map((part, index) => {\n let lastPartProgress = 0\n\n return this._source.slice(part.start, part.end).then(\n ({ value }) =>\n new Promise((resolve, reject) => {\n // Merge with the user supplied options but overwrite some values.\n const options = {\n ...this.options,\n // If available, the partial upload should be resumed from a previous URL.\n uploadUrl: part.uploadUrl || null,\n // We take manually care of resuming for partial uploads, so they should\n // not be stored in the URL storage.\n storeFingerprintForResuming: false,\n removeFingerprintOnSuccess: false,\n // Reset the parallelUploads option to not cause recursion.\n parallelUploads: 1,\n // Reset this option as we are not doing a parallel upload.\n parallelUploadBoundaries: null,\n metadata: this.options.metadataForPartialUploads,\n // Add the header to indicate the this is a partial upload.\n headers: {\n ...this.options.headers,\n 'Upload-Concat': 'partial',\n },\n // Reject or resolve the promise if the upload errors or completes.\n onSuccess: resolve,\n onError: reject,\n // Based in the progress for this partial upload, calculate the progress\n // for the entire final upload.\n onProgress: (newPartProgress) => {\n totalProgress = totalProgress - lastPartProgress + newPartProgress\n lastPartProgress = newPartProgress\n this._emitProgress(totalProgress, totalSize)\n },\n // Wait until every partial upload has an upload URL, so we can add\n // them to the URL storage.\n onUploadUrlAvailable: () => {\n this._parallelUploadUrls[index] = upload.url\n // Test if all uploads have received an URL\n if (this._parallelUploadUrls.filter((u) => Boolean(u)).length === parts.length) {\n this._saveUploadInUrlStorage()\n }\n },\n }\n\n const upload = new BaseUpload(value, options)\n upload.start()\n\n // Store the upload in an array, so we can later abort them if necessary.\n this._parallelUploads.push(upload)\n }),\n )\n })\n\n let req\n // Wait until all partial uploads are finished and we can send the POST request for\n // creating the final upload.\n Promise.all(uploads)\n .then(() => {\n req = this._openRequest('POST', this.options.endpoint)\n req.setHeader('Upload-Concat', `final;${this._parallelUploadUrls.join(' ')}`)\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n return this._sendRequest(req, null)\n })\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n this._emitSuccess(res)\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n * uploaded in a sequential matter.\n *\n * @api private\n */\n _startSingleUpload() {\n // Reset the aborted flag when the upload is started or else the\n // _performUpload will stop before sending a request if the upload has been\n // aborted previously.\n this._aborted = false\n\n // The upload had been started previously and we should reuse this URL.\n if (this.url != null) {\n log(`Resuming upload from previous URL: ${this.url}`)\n this._resumeUpload()\n return\n }\n\n // A URL has manually been specified, so we try to resume\n if (this.options.uploadUrl != null) {\n log(`Resuming upload from provided URL: ${this.options.uploadUrl}`)\n this.url = this.options.uploadUrl\n this._resumeUpload()\n return\n }\n\n // An upload has not started for the file yet, so we start a new one\n log('Creating a new upload')\n this._createUpload()\n }\n\n /**\n * Abort any running request and stop the current upload. After abort is called, no event\n * handler will be invoked anymore. You can use the `start` method to resume the upload\n * again.\n * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n * current upload from the server.\n *\n * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n abort(shouldTerminate) {\n // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n if (this._parallelUploads != null) {\n for (const upload of this._parallelUploads) {\n upload.abort(shouldTerminate)\n }\n }\n\n // Stop any current running request.\n if (this._req !== null) {\n this._req.abort()\n // Note: We do not close the file source here, so the user can resume in the future.\n }\n this._aborted = true\n\n // Stop any timeout used for initiating a retry.\n if (this._retryTimeout != null) {\n clearTimeout(this._retryTimeout)\n this._retryTimeout = null\n }\n\n if (!shouldTerminate || this.url == null) {\n return Promise.resolve()\n }\n\n return (\n BaseUpload.terminate(this.url, this.options)\n // Remove entry from the URL storage since the upload URL is no longer valid.\n .then(() => this._removeFromUrlStorage())\n )\n }\n\n _emitHttpError(req, res, message, causingErr) {\n this._emitError(new DetailedError(message, causingErr, req, res))\n }\n\n _emitError(err) {\n // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n if (this._aborted) return\n\n // Check if we should retry, when enabled, before sending the error to the user.\n if (this.options.retryDelays != null) {\n // We will reset the attempt counter if\n // - we were already able to connect to the server (offset != null) and\n // - we were able to upload a small chunk of data to the server\n const shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry\n if (shouldResetDelays) {\n this._retryAttempt = 0\n }\n\n if (shouldRetry(err, this._retryAttempt, this.options)) {\n const delay = this.options.retryDelays[this._retryAttempt++]\n\n this._offsetBeforeRetry = this._offset\n\n this._retryTimeout = setTimeout(() => {\n this.start()\n }, delay)\n return\n }\n }\n\n if (typeof this.options.onError === 'function') {\n this.options.onError(err)\n } else {\n throw err\n }\n }\n\n /**\n * Publishes notification if the upload has been successfully completed.\n *\n * @param {object} lastResponse Last HTTP response.\n * @api private\n */\n _emitSuccess(lastResponse) {\n if (this.options.removeFingerprintOnSuccess) {\n // Remove stored fingerprint and corresponding endpoint. This causes\n // new uploads of the same file to be treated as a different file.\n this._removeFromUrlStorage()\n }\n\n if (typeof this.options.onSuccess === 'function') {\n this.options.onSuccess({ lastResponse })\n }\n }\n\n /**\n * Publishes notification when data has been sent to the server. This\n * data may not have been accepted by the server yet.\n *\n * @param {number} bytesSent Number of bytes sent to the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitProgress(bytesSent, bytesTotal) {\n if (typeof this.options.onProgress === 'function') {\n this.options.onProgress(bytesSent, bytesTotal)\n }\n }\n\n /**\n * Publishes notification when a chunk of data has been sent to the server\n * and accepted by the server.\n * @param {number} chunkSize Size of the chunk that was accepted by the server.\n * @param {number} bytesAccepted Total number of bytes that have been\n * accepted by the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n if (typeof this.options.onChunkComplete === 'function') {\n this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal)\n }\n }\n\n /**\n * Create a new upload using the creation extension by sending a POST\n * request to the endpoint. After successful creation the file will be\n * uploaded\n *\n * @api private\n */\n _createUpload() {\n if (!this.options.endpoint) {\n this._emitError(new Error('tus: unable to create upload because no endpoint is provided'))\n return\n }\n\n const req = this._openRequest('POST', this.options.endpoint)\n\n if (this.options.uploadLengthDeferred) {\n req.setHeader('Upload-Defer-Length', '1')\n } else {\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n let promise\n if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n this._offset = 0\n promise = this._addChunkToRequest(req)\n } else {\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', '?0')\n }\n promise = this._sendRequest(req, null)\n }\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n if (this._size === 0) {\n // Nothing to upload and file was successfully created\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._saveUploadInUrlStorage().then(() => {\n if (this.options.uploadDataDuringCreation) {\n this._handleUploadResponse(req, res)\n } else {\n this._offset = 0\n this._performUpload()\n }\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to create upload', err)\n })\n }\n\n /*\n * Try to resume an existing upload. First a HEAD request will be sent\n * to retrieve the offset. If the request fails a new upload will be\n * created. In the case of a successful response the file will be uploaded.\n *\n * @api private\n */\n _resumeUpload() {\n const req = this._openRequest('HEAD', this.url)\n const promise = this._sendRequest(req, null)\n\n promise\n .then((res) => {\n const status = res.getStatus()\n if (!inStatusCategory(status, 200)) {\n // If the upload is locked (indicated by the 423 Locked status code), we\n // emit an error instead of directly starting a new upload. This way the\n // retry logic can catch the error and will retry the upload. An upload\n // is usually locked for a short period of time and will be available\n // afterwards.\n if (status === 423) {\n this._emitHttpError(req, res, 'tus: upload is currently locked; retry later')\n return\n }\n\n if (inStatusCategory(status, 400)) {\n // Remove stored fingerprint and corresponding endpoint,\n // on client errors since the file can not be found\n this._removeFromUrlStorage()\n }\n\n if (!this.options.endpoint) {\n // Don't attempt to create a new upload if no endpoint is provided.\n this._emitHttpError(\n req,\n res,\n 'tus: unable to resume upload (new upload cannot be created without an endpoint)',\n )\n return\n }\n\n // Try to create a new upload\n this.url = null\n this._createUpload()\n return\n }\n\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n const length = Number.parseInt(res.getHeader('Upload-Length'), 10)\n if (\n Number.isNaN(length) &&\n !this.options.uploadLengthDeferred &&\n this.options.protocol === PROTOCOL_TUS_V1\n ) {\n this._emitHttpError(req, res, 'tus: invalid or missing length value')\n return\n }\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n this._saveUploadInUrlStorage().then(() => {\n // Upload has already been completed and we do not need to send additional\n // data to the server\n if (offset === length) {\n this._emitProgress(length, length)\n this._emitSuccess(res)\n return\n }\n\n this._offset = offset\n this._performUpload()\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to resume upload', err)\n })\n }\n\n /**\n * Start uploading the file using PATCH requests. The file will be divided\n * into chunks as specified in the chunkSize option. During the upload\n * the onProgress event handler may be invoked multiple times.\n *\n * @api private\n */\n _performUpload() {\n // If the upload has been aborted, we will not send the next PATCH request.\n // This is important if the abort method was called during a callback, such\n // as onChunkComplete or onProgress.\n if (this._aborted) {\n return\n }\n\n let req\n\n // Some browser and servers may not support the PATCH method. For those\n // cases, you can tell tus-js-client to use a POST request with the\n // X-HTTP-Method-Override header for simulating a PATCH request.\n if (this.options.overridePatchMethod) {\n req = this._openRequest('POST', this.url)\n req.setHeader('X-HTTP-Method-Override', 'PATCH')\n } else {\n req = this._openRequest('PATCH', this.url)\n }\n\n req.setHeader('Upload-Offset', `${this._offset}`)\n const promise = this._addChunkToRequest(req)\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while uploading chunk')\n return\n }\n\n this._handleUploadResponse(req, res)\n })\n .catch((err) => {\n // Don't emit an error if the upload was aborted manually\n if (this._aborted) {\n return\n }\n\n this._emitHttpError(req, null, `tus: failed to upload chunk at offset ${this._offset}`, err)\n })\n }\n\n /**\n * _addChunktoRequest reads a chunk from the source and sends it using the\n * supplied request object. It will not handle the response.\n *\n * @api private\n */\n _addChunkToRequest(req) {\n const start = this._offset\n let end = this._offset + this.options.chunkSize\n\n req.setProgressHandler((bytesSent) => {\n this._emitProgress(start + bytesSent, this._size)\n })\n\n if (this.options.protocol === PROTOCOL_TUS_V1) {\n req.setHeader('Content-Type', 'application/offset+octet-stream')\n } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Content-Type', 'application/partial-upload')\n }\n\n // The specified chunkSize may be Infinity or the calcluated end position\n // may exceed the file's size. In both cases, we limit the end position to\n // the input's total size for simpler calculations and correctness.\n if (\n (end === Number.POSITIVE_INFINITY || end > this._size) &&\n !this.options.uploadLengthDeferred\n ) {\n end = this._size\n }\n\n return this._source.slice(start, end).then(({ value, done }) => {\n const valueSize = value?.size ? value.size : 0\n\n // If the upload length is deferred, the upload size was not specified during\n // upload creation. So, if the file reader is done reading, we know the total\n // upload size and can tell the tus server.\n if (this.options.uploadLengthDeferred && done) {\n this._size = this._offset + valueSize\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // The specified uploadSize might not match the actual amount of data that a source\n // provides. In these cases, we cannot successfully complete the upload, so we\n // rather error out and let the user know. If not, tus-js-client will be stuck\n // in a loop of repeating empty PATCH requests.\n // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n const newSize = this._offset + valueSize\n if (!this.options.uploadLengthDeferred && done && newSize !== this._size) {\n return Promise.reject(\n new Error(\n `upload was configured with a size of ${this._size} bytes, but the source is done after ${newSize} bytes`,\n ),\n )\n }\n\n if (value === null) {\n return this._sendRequest(req)\n }\n\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', done ? '?1' : '?0')\n }\n this._emitProgress(this._offset, this._size)\n return this._sendRequest(req, value)\n })\n }\n\n /**\n * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n * and already have received a response.\n *\n * @api private\n */\n _handleUploadResponse(req, res) {\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n this._emitProgress(offset, this._size)\n this._emitChunkComplete(offset - this._offset, offset, this._size)\n\n this._offset = offset\n\n if (offset === this._size) {\n // Yay, finally done :)\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._performUpload()\n }\n\n /**\n * Create a new HTTP request object with the given method and URL.\n *\n * @api private\n */\n _openRequest(method, url) {\n const req = openRequest(method, url, this.options)\n this._req = req\n return req\n }\n\n /**\n * Remove the entry in the URL storage, if it has been saved before.\n *\n * @api private\n */\n _removeFromUrlStorage() {\n if (!this._urlStorageKey) return\n\n this._urlStorage.removeUpload(this._urlStorageKey).catch((err) => {\n this._emitError(err)\n })\n this._urlStorageKey = null\n }\n\n /**\n * Add the upload URL to the URL storage, if possible.\n *\n * @api private\n */\n _saveUploadInUrlStorage() {\n // We do not store the upload URL\n // - if it was disabled in the option, or\n // - if no fingerprint was calculated for the input (i.e. a stream), or\n // - if the URL is already stored (i.e. key is set alread).\n if (\n !this.options.storeFingerprintForResuming ||\n !this._fingerprint ||\n this._urlStorageKey !== null\n ) {\n return Promise.resolve()\n }\n\n const storedUpload = {\n size: this._size,\n metadata: this.options.metadata,\n creationTime: new Date().toString(),\n }\n\n if (this._parallelUploads) {\n // Save multiple URLs if the parallelUploads option is used ...\n storedUpload.parallelUploadUrls = this._parallelUploadUrls\n } else {\n // ... otherwise we just save the one available URL.\n storedUpload.uploadUrl = this.url\n }\n\n return this._urlStorage.addUpload(this._fingerprint, storedUpload).then((urlStorageKey) => {\n this._urlStorageKey = urlStorageKey\n })\n }\n\n /**\n * Send a request with the provided body.\n *\n * @api private\n */\n _sendRequest(req, body = null) {\n return sendRequest(req, body, this.options)\n }\n}\n\nfunction encodeMetadata(metadata) {\n return Object.entries(metadata)\n .map(([key, value]) => `${key} ${Base64.encode(String(value))}`)\n .join(',')\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n return status >= category && status < category + 100\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n const req = options.httpStack.createRequest(method, url)\n\n if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n req.setHeader('Upload-Draft-Interop-Version', '5')\n } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Draft-Interop-Version', '6')\n } else {\n req.setHeader('Tus-Resumable', '1.0.0')\n }\n const headers = options.headers || {}\n\n for (const [name, value] of Object.entries(headers)) {\n req.setHeader(name, value)\n }\n\n if (options.addRequestId) {\n const requestId = uuid()\n req.setHeader('X-Request-ID', requestId)\n }\n\n return req\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nasync function sendRequest(req, body, options) {\n if (typeof options.onBeforeRequest === 'function') {\n await options.onBeforeRequest(req)\n }\n\n const res = await req.send(body)\n\n if (typeof options.onAfterResponse === 'function') {\n await options.onAfterResponse(req, res)\n }\n\n return res\n}\n\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction isOnline() {\n let online = true\n // Note: We don't reference `window` here because the navigator object also exists\n // in a Web Worker's context.\n if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n online = false\n }\n\n return online\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n // We only attempt a retry if\n // - retryDelays option is set\n // - we didn't exceed the maxium number of retries, yet, and\n // - this error was caused by a request or it's response and\n // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n // a onShouldRetry is specified and returns true\n // - the browser does not indicate that we are offline\n if (\n options.retryDelays == null ||\n retryAttempt >= options.retryDelays.length ||\n err.originalRequest == null\n ) {\n return false\n }\n\n if (options && typeof options.onShouldRetry === 'function') {\n return options.onShouldRetry(err, retryAttempt, options)\n }\n\n return defaultOnShouldRetry(err)\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n const status = err.originalResponse ? err.originalResponse.getStatus() : 0\n return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline()\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n return new URL(link, origin).toString()\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n const partSize = Math.floor(totalSize / partCount)\n const parts = []\n\n for (let i = 0; i < partCount; i++) {\n parts.push({\n start: partSize * i,\n end: partSize * (i + 1),\n })\n }\n\n parts[partCount - 1].end = totalSize\n\n return parts\n}\n\nBaseUpload.defaultOptions = defaultOptions\n\nexport default BaseUpload\n","const isReactNative = () =>\n typeof navigator !== 'undefined' &&\n typeof navigator.product === 'string' &&\n navigator.product.toLowerCase() === 'reactnative'\n\nexport default isReactNative\n","/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nexport default function uriToBlob(uri) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.responseType = 'blob'\n xhr.onload = () => {\n const blob = xhr.response\n resolve(blob)\n }\n xhr.onerror = (err) => {\n reject(err)\n }\n xhr.open('GET', uri)\n xhr.send()\n })\n}\n","const isCordova = () =>\n typeof window !== 'undefined' &&\n (typeof window.PhoneGap !== 'undefined' ||\n typeof window.Cordova !== 'undefined' ||\n typeof window.cordova !== 'undefined')\n\nexport default isCordova\n","/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nexport default function readAsByteArray(chunk) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n const value = new Uint8Array(reader.result)\n resolve({ value })\n }\n reader.onerror = (err) => {\n reject(err)\n }\n reader.readAsArrayBuffer(chunk)\n })\n}\n","import isCordova from './isCordova.js'\nimport readAsByteArray from './readAsByteArray.js'\n\nexport default class FileSource {\n // Make this.size a method\n constructor(file) {\n this._file = file\n this.size = file.size\n }\n\n slice(start, end) {\n // In Apache Cordova applications, a File must be resolved using\n // FileReader instances, see\n // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n if (isCordova()) {\n return readAsByteArray(this._file.slice(start, end))\n }\n\n const value = this._file.slice(start, end)\n const done = end >= this.size\n return Promise.resolve({ value, done })\n }\n\n close() {\n // Nothing to do here since we don't need to release any resources.\n }\n}\n","function len(blobOrArray) {\n if (blobOrArray === undefined) return 0\n if (blobOrArray.size !== undefined) return blobOrArray.size\n return blobOrArray.length\n}\n\n/*\n Typed arrays and blobs don't have a concat method.\n This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n if (a.concat) {\n // Is `a` an Array?\n return a.concat(b)\n }\n if (a instanceof Blob) {\n return new Blob([a, b], { type: a.type })\n }\n if (a.set) {\n // Is `a` a typed array?\n const c = new a.constructor(a.length + b.length)\n c.set(a)\n c.set(b, a.length)\n return c\n }\n throw new Error('Unknown data type')\n}\n\nexport default class StreamSource {\n constructor(reader) {\n this._buffer = undefined\n this._bufferOffset = 0\n this._reader = reader\n this._done = false\n }\n\n slice(start, end) {\n if (start < this._bufferOffset) {\n return Promise.reject(new Error(\"Requested data is before the reader's current offset\"))\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n }\n\n _readUntilEnoughDataOrDone(start, end) {\n const hasEnoughData = end <= this._bufferOffset + len(this._buffer)\n if (this._done || hasEnoughData) {\n const value = this._getDataFromBuffer(start, end)\n const done = value == null ? this._done : false\n return Promise.resolve({ value, done })\n }\n\n return this._reader.read().then(({ value, done }) => {\n if (done) {\n this._done = true\n } else if (this._buffer === undefined) {\n this._buffer = value\n } else {\n this._buffer = concat(this._buffer, value)\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n })\n }\n\n _getDataFromBuffer(start, end) {\n // Remove data from buffer before `start`.\n // Data might be reread from the buffer if an upload fails, so we can only\n // safely delete data when it comes *before* what is currently being read.\n if (start > this._bufferOffset) {\n this._buffer = this._buffer.slice(start - this._bufferOffset)\n this._bufferOffset = start\n }\n // If the buffer is empty after removing old data, all data has been read.\n const hasAllDataBeenRead = len(this._buffer) === 0\n if (this._done && hasAllDataBeenRead) {\n return null\n }\n // We already removed data before `start`, so we just return the first\n // chunk from the buffer.\n return this._buffer.slice(0, end - start)\n }\n\n close() {\n if (this._reader.cancel) {\n this._reader.cancel()\n }\n }\n}\n","import isReactNative from './isReactNative.js'\nimport uriToBlob from './uriToBlob.js'\n\nimport FileSource from './sources/FileSource.js'\nimport StreamSource from './sources/StreamSource.js'\n\nexport default class FileReader {\n async openFile(input, chunkSize) {\n // In React Native, when user selects a file, instead of a File or Blob,\n // you usually get a file object {} with a uri property that contains\n // a local path to the file. We use XMLHttpRequest to fetch\n // the file blob, before uploading with tus.\n if (isReactNative() && input && typeof input.uri !== 'undefined') {\n try {\n const blob = await uriToBlob(input.uri)\n return new FileSource(blob)\n } catch (err) {\n throw new Error(\n `tus: cannot fetch \\`file.uri\\` as Blob, make sure the uri is correct and accessible. ${err}`,\n )\n }\n }\n\n // Since we emulate the Blob type in our tests (not all target browsers\n // support it), we cannot use `instanceof` for testing whether the input value\n // can be handled. Instead, we simply check is the slice() function and the\n // size property are available.\n if (typeof input.slice === 'function' && typeof input.size !== 'undefined') {\n return Promise.resolve(new FileSource(input))\n }\n\n if (typeof input.read === 'function') {\n chunkSize = Number(chunkSize)\n if (!Number.isFinite(chunkSize)) {\n return Promise.reject(\n new Error(\n 'cannot create source for stream without a finite value for the `chunkSize` option',\n ),\n )\n }\n\n return Promise.resolve(new StreamSource(input, chunkSize))\n }\n\n return Promise.reject(\n new Error(\n 'source object may only be an instance of File, Blob, or Reader in this environment',\n ),\n )\n }\n}\n","import isReactNative from './isReactNative.js'\n\n// TODO: Differenciate between input types\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nexport default function fingerprint(file, options) {\n if (isReactNative()) {\n return Promise.resolve(reactNativeFingerprint(file, options))\n }\n\n return Promise.resolve(\n ['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'),\n )\n}\n\nfunction reactNativeFingerprint(file, options) {\n const exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif'\n return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join(\n '/',\n )\n}\n\nfunction hashCode(str) {\n // from https://stackoverflow.com/a/8831937/151666\n let hash = 0\n if (str.length === 0) {\n return hash\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash &= hash // Convert to 32bit integer\n }\n return hash\n}\n","export default class XHRHttpStack {\n createRequest(method, url) {\n return new Request(method, url)\n }\n\n getName() {\n return 'XHRHttpStack'\n }\n}\n\nclass Request {\n constructor(method, url) {\n this._xhr = new XMLHttpRequest()\n this._xhr.open(method, url, true)\n\n this._method = method\n this._url = url\n this._headers = {}\n }\n\n getMethod() {\n return this._method\n }\n\n getURL() {\n return this._url\n }\n\n setHeader(header, value) {\n this._xhr.setRequestHeader(header, value)\n this._headers[header] = value\n }\n\n getHeader(header) {\n return this._headers[header]\n }\n\n setProgressHandler(progressHandler) {\n // Test support for progress events before attaching an event listener\n if (!('upload' in this._xhr)) {\n return\n }\n\n this._xhr.upload.onprogress = (e) => {\n if (!e.lengthComputable) {\n return\n }\n\n progressHandler(e.loaded)\n }\n }\n\n send(body = null) {\n return new Promise((resolve, reject) => {\n this._xhr.onload = () => {\n resolve(new Response(this._xhr))\n }\n\n this._xhr.onerror = (err) => {\n reject(err)\n }\n\n this._xhr.send(body)\n })\n }\n\n abort() {\n this._xhr.abort()\n return Promise.resolve()\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n\nclass Response {\n constructor(xhr) {\n this._xhr = xhr\n }\n\n getStatus() {\n return this._xhr.status\n }\n\n getHeader(header) {\n return this._xhr.getResponseHeader(header)\n }\n\n getBody() {\n return this._xhr.responseText\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n","let hasStorage = false\ntry {\n // Note: localStorage does not exist in the Web Worker's context, so we must use window here.\n hasStorage = 'localStorage' in window\n\n // Attempt to store and read entries from the local storage to detect Private\n // Mode on Safari on iOS (see #49)\n // If the key was not used before, we remove it from local storage again to\n // not cause confusion where the entry came from.\n const key = 'tusSupport'\n const originalValue = localStorage.getItem(key)\n localStorage.setItem(key, originalValue)\n if (originalValue === null) localStorage.removeItem(key)\n} catch (e) {\n // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n // thrown (see #49)\n if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n hasStorage = false\n } else {\n throw e\n }\n}\n\nexport const canStoreURLs = hasStorage\n\nexport class WebStorageUrlStorage {\n findAllUploads() {\n const results = this._findEntries('tus::')\n return Promise.resolve(results)\n }\n\n findUploadsByFingerprint(fingerprint) {\n const results = this._findEntries(`tus::${fingerprint}::`)\n return Promise.resolve(results)\n }\n\n removeUpload(urlStorageKey) {\n localStorage.removeItem(urlStorageKey)\n return Promise.resolve()\n }\n\n addUpload(fingerprint, upload) {\n const id = Math.round(Math.random() * 1e12)\n const key = `tus::${fingerprint}::${id}`\n\n localStorage.setItem(key, JSON.stringify(upload))\n return Promise.resolve(key)\n }\n\n _findEntries(prefix) {\n const results = []\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key.indexOf(prefix) !== 0) continue\n\n try {\n const upload = JSON.parse(localStorage.getItem(key))\n upload.urlStorageKey = key\n\n results.push(upload)\n } catch (_e) {\n // The JSON parse error is intentionally ignored here, so a malformed\n // entry in the storage cannot prevent an upload.\n }\n }\n\n return results\n }\n}\n","import DetailedError from '../error.js'\nimport { enableDebugLog } from '../logger.js'\nimport NoopUrlStorage from '../noopUrlStorage.js'\nimport BaseUpload from '../upload.js'\n\nimport FileReader from './fileReader.js'\nimport fingerprint from './fileSignature.js'\nimport DefaultHttpStack from './httpStack.js'\nimport { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js'\n\nconst defaultOptions = {\n ...BaseUpload.defaultOptions,\n httpStack: new DefaultHttpStack(),\n fileReader: new FileReader(),\n urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n fingerprint,\n}\n\nclass Upload extends BaseUpload {\n constructor(file = null, options = {}) {\n options = { ...defaultOptions, ...options }\n super(file, options)\n }\n\n static terminate(url, options = {}) {\n options = { ...defaultOptions, ...options }\n return BaseUpload.terminate(url, options)\n }\n}\n\n// Note: We don't reference `window` here because these classes also exist in a Web Worker's context.\nconst isSupported =\n typeof XMLHttpRequest === 'function' &&\n typeof Blob === 'function' &&\n typeof Blob.prototype.slice === 'function'\n\nexport {\n Upload,\n canStoreURLs,\n defaultOptions,\n isSupported,\n enableDebugLog,\n DefaultHttpStack,\n DetailedError,\n}\n","export const deleteUpload = async (\n url: string,\n csrfToken: string\n): Promise =>\n new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"DELETE\", url);\n\n xhr.onload = (): void => {\n if (xhr.status === 204) {\n resolve();\n } else {\n reject(new Error());\n }\n };\n xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n xhr.setRequestHeader(\"X-CSRFToken\", csrfToken);\n xhr.send(null);\n });\n","import { HttpRequest, HttpResponse, Upload } from \"tus-js-client\";\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface Parameters {\n chunkSize: number;\n csrfToken: string;\n fieldName: string;\n file: File;\n formId: string;\n retryDelays: null | number[];\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport default class TusUpload extends BaseUpload {\n public onError?: (error: Error) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n private csrfToken: string;\n private id: string;\n private upload: Upload;\n\n constructor({\n chunkSize,\n csrfToken,\n fieldName,\n file,\n formId,\n retryDelays,\n uploadIndex,\n uploadUrl\n }: Parameters) {\n super({ name: file.name, status: \"uploading\", type: \"tus\", uploadIndex });\n\n this.csrfToken = csrfToken;\n\n this.upload = new Upload(file, {\n chunkSize,\n endpoint: uploadUrl,\n metadata: {\n fieldName: fieldName,\n filename: file.name,\n formId: formId\n },\n onAfterResponse: this.handleAfterReponse,\n onBeforeRequest: this.addCsrTokenToRequest,\n onError: this.handleError,\n onProgress: this.handleProgress,\n onSuccess: this.handleSucces,\n retryDelays: retryDelays ?? [0, 1000, 3000, 5000]\n });\n\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n }\n\n public async abort(): Promise {\n await this.upload.abort(true);\n }\n\n public async delete(): Promise {\n if (!this.upload.url) {\n return Promise.resolve();\n }\n\n await deleteUpload(this.upload.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialFile {\n return {\n id: this.id,\n name: this.name,\n size: this.getSize(),\n type: \"tus\",\n url: \"\"\n };\n }\n\n public getSize(): number {\n return (this.upload.file as File).size;\n }\n\n public start(): void {\n this.upload.start();\n }\n\n private addCsrTokenToRequest = (request: HttpRequest) => {\n request.setHeader(\"X-CSRFToken\", this.csrfToken);\n };\n\n private handleAfterReponse = (\n _request: HttpRequest,\n response: HttpResponse\n ) => {\n const resourceId = response.getHeader(\"ResourceId\");\n\n if (resourceId) {\n this.id = resourceId;\n }\n };\n\n private handleError = (error: Error) => {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n };\n\n private handleProgress = (bytesUploaded: number, bytesTotal: number) => {\n if (this.onProgress) {\n this.onProgress(bytesUploaded, bytesTotal);\n }\n };\n\n private handleSucces = () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n };\n}\n","import BaseUpload, {\n InitialExistingFile,\n InitialFile,\n InitialPlaceholderFile,\n InitialS3File,\n InitialTusFile,\n UploadType\n} from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface BaseUploadedFileParameters {\n name: string;\n size: number;\n type: UploadType;\n uploadIndex: number;\n}\n\ninterface UploadedFileParameters {\n csrfToken: string;\n initialFile: InitialFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\ninterface UploadedTusFileParameters {\n csrfToken: string;\n initialFile: InitialTusFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport abstract class BaseUploadedFile extends BaseUpload {\n size: number;\n\n constructor({ name, size, type, uploadIndex }: BaseUploadedFileParameters) {\n super({ name, status: \"done\", type, uploadIndex });\n\n this.size = size;\n }\n\n public async abort(): Promise {\n return Promise.resolve();\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getSize(): number | undefined {\n return this.size;\n }\n}\n\nclass PlaceholderFile extends BaseUploadedFile {\n id: string;\n\n constructor(initialFile: InitialPlaceholderFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"placeholder\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialPlaceholderFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"placeholder\"\n };\n }\n}\n\nexport class ExistingFile extends BaseUploadedFile {\n constructor(initialFile: InitialExistingFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"existing\",\n uploadIndex\n });\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialExistingFile {\n return {\n name: this.name,\n size: this.size,\n type: \"existing\"\n };\n }\n}\n\nexport class UploadedS3File extends BaseUploadedFile {\n id: string;\n key: string;\n\n constructor(initialFile: InitialS3File, uploadIndex: number) {\n super({\n name: initialFile.original_name || initialFile.name,\n size: initialFile.size,\n type: \"uploadedS3\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n this.key = initialFile.name;\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialS3File {\n return {\n id: this.id,\n name: this.key,\n original_name: this.name,\n size: this.size,\n type: \"s3\"\n };\n }\n}\n\nexport class UploadedTusFile extends BaseUploadedFile {\n csrfToken: string;\n id: string;\n url: string;\n\n constructor({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n }: UploadedTusFileParameters) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"uploadedTus\",\n uploadIndex\n });\n\n this.csrfToken = csrfToken;\n this.id = initialFile.id;\n this.url = `${uploadUrl}${initialFile.id}`;\n }\n\n public async delete(): Promise {\n await deleteUpload(this.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialTusFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"tus\",\n url: \"\"\n };\n }\n}\n\nexport const createUploadedFile = ({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n}: UploadedFileParameters): BaseUploadedFile => {\n switch (initialFile.type) {\n case \"existing\":\n return new ExistingFile(initialFile, uploadIndex);\n\n case \"placeholder\":\n return new PlaceholderFile(initialFile, uploadIndex);\n\n case \"s3\":\n return new UploadedS3File(initialFile, uploadIndex);\n\n case \"tus\":\n return new UploadedTusFile({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n });\n }\n};\n","import { EventEmitter } from \"eventemitter3\";\n\nimport AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport DropArea from \"./drop_area.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\nimport BaseUpload, { InitialFile, UploadType } from \"./uploads/base_upload.ts\";\nimport S3Upload from \"./uploads/s3_upload.ts\";\nimport TusUpload from \"./uploads/tus_upload.ts\";\nimport { createUploadedFile } from \"./uploads/uploaded_file.ts\";\nimport {\n findInput,\n getMetadataFieldName,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Callbacks {\n onClick?: ({ fieldName, fileName, type }: ClickEvent) => void;\n onDelete?: (upload: BaseUpload) => void;\n onError?: (error: unknown, upload: BaseUpload) => void;\n onProgress?: (\n bytesUploaded: number,\n bytesTotal: number,\n upload: BaseUpload\n ) => void;\n onSuccess?: (upload: BaseUpload) => void;\n}\n\nexport type Translations = Record;\n\ninterface ClickEvent {\n fieldName: string;\n fileName: string;\n id?: string;\n type: UploadType;\n}\n\ninterface ConstructorParams {\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n initial: InitialFile[];\n input: HTMLInputElement;\n multiple: boolean;\n parent: Element;\n prefix: null | string;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n skipRequired: boolean;\n supportDropArea: boolean;\n translations: Translations;\n uploadUrl: string;\n}\n\nclass FileField {\n acceptedFileTypes: AcceptedFileTypes;\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n multiple: boolean;\n nextUploadIndex: number;\n prefix: null | string;\n renderer: RenderUploadFile;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n supportDropArea: boolean;\n uploads: BaseUpload[];\n uploadUrl: string;\n\n constructor({\n callbacks,\n chunkSize,\n csrfToken,\n eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent,\n prefix,\n retryDelays,\n s3UploadDir,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n }: ConstructorParams) {\n this.callbacks = callbacks;\n this.chunkSize = chunkSize;\n this.csrfToken = csrfToken;\n this.eventEmitter = eventEmitter;\n this.fieldName = fieldName;\n this.form = form;\n this.formId = formId;\n this.multiple = multiple;\n this.prefix = prefix;\n this.retryDelays = retryDelays;\n this.s3UploadDir = s3UploadDir;\n this.supportDropArea = supportDropArea && !input.disabled;\n this.uploadUrl = uploadUrl;\n this.acceptedFileTypes = new AcceptedFileTypes(input.accept);\n\n this.uploads = [];\n this.nextUploadIndex = 0;\n\n this.renderer = new RenderUploadFile({\n input,\n parent,\n skipRequired,\n translations\n });\n const filesContainer = this.renderer.container;\n\n if (supportDropArea) {\n this.initDropArea(filesContainer, input.accept);\n }\n\n this.addInitialFiles(initial);\n\n this.checkDropHint();\n\n input.addEventListener(\"change\", this.onChange);\n filesContainer.addEventListener(\"click\", this.handleClick);\n }\n\n addInitialFiles(initialFiles: InitialFile[]): void {\n if (initialFiles.length === 0) {\n return;\n }\n\n const { multiple, renderer } = this;\n\n const addInitialFile = (initialFile: InitialFile): void => {\n const { size } = initialFile;\n const name =\n initialFile.type === \"s3\" && initialFile.original_name\n ? initialFile.original_name\n : initialFile.name;\n\n const element = renderer.addUploadedFile(\n name,\n this.nextUploadIndex,\n size\n );\n\n const upload = createUploadedFile({\n csrfToken: this.csrfToken,\n initialFile,\n uploadIndex: this.nextUploadIndex,\n uploadUrl: this.uploadUrl\n });\n this.uploads.push(upload);\n\n this.emitEvent(\"addUpload\", element, upload);\n };\n\n if (multiple) {\n initialFiles.forEach((file: InitialFile): void => {\n addInitialFile(file);\n this.nextUploadIndex += 1;\n });\n } else {\n const initialFile = initialFiles[0];\n\n if (initialFile) {\n addInitialFile(initialFile);\n }\n }\n }\n\n checkDropHint(): void {\n if (!this.supportDropArea) {\n return;\n }\n\n const nonEmptyUploads = this.uploads.filter(e => Boolean(e));\n\n if (nonEmptyUploads.length === 0) {\n this.renderer.renderDropHint();\n } else {\n this.renderer.removeDropHint();\n }\n }\n\n emitEvent(eventName: string, element: HTMLElement, upload: BaseUpload): void {\n if (this.eventEmitter) {\n this.eventEmitter.emit(eventName, {\n element,\n fieldName: this.fieldName,\n fileName: upload.name,\n metaDataField: this.getMetaDataField(),\n upload\n });\n }\n }\n\n findUploadByName(fileName: string): BaseUpload | undefined {\n return this.uploads.find(upload => upload.name === fileName);\n }\n\n getMetaDataField(): HTMLElement | null {\n return findInput(\n this.form,\n getMetadataFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n }\n\n getUploadByIndex(uploadIndex: number): BaseUpload | undefined {\n return this.uploads.find(upload => upload.uploadIndex === uploadIndex);\n }\n\n async handleCancel(upload: BaseUpload): Promise {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n this.removeUploadFromList(upload);\n }\n\n handleClick = (e: Event): void => {\n const target = e.target as HTMLElement;\n\n const getUpload = (): BaseUpload | undefined => {\n const dataIndex = target.getAttribute(\"data-index\");\n\n if (!dataIndex) {\n return undefined;\n }\n\n const uploadIndex = parseInt(dataIndex, 10);\n return this.getUploadByIndex(uploadIndex);\n };\n\n if (\n target.classList.contains(\"dff-delete\") &&\n !target.classList.contains(\"dff-disabled\")\n ) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.removeExistingUpload(upload);\n }\n } else if (target.classList.contains(\"dff-cancel\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.handleCancel(upload);\n }\n } else if (target.classList.contains(\"dff-filename\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload?.status === \"done\" && this.callbacks.onClick) {\n this.callbacks.onClick({\n fieldName: this.fieldName,\n fileName: upload.name,\n id: upload.getId(),\n type: upload.type\n });\n }\n }\n };\n\n handleError = (upload: BaseUpload, error: unknown): void => {\n this.renderer.setError(upload.uploadIndex);\n upload.status = \"error\";\n\n const { onError } = this.callbacks;\n\n if (onError) {\n if (upload instanceof TusUpload) {\n onError(error, upload);\n }\n }\n };\n\n handleInvalidFiles = (files: File[]): void => {\n this.renderer.setErrorInvalidFiles(files);\n };\n\n handleProgress = (\n upload: BaseUpload,\n bytesUploaded: number,\n bytesTotal: number\n ): void => {\n const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);\n\n this.renderer.updateProgress(upload.uploadIndex, percentage);\n\n const { onProgress } = this.callbacks;\n\n if (onProgress) {\n if (upload instanceof TusUpload) {\n onProgress(bytesUploaded, bytesTotal, upload);\n }\n }\n };\n\n handleSuccess = (upload: BaseUpload): void => {\n const { renderer } = this;\n\n this.updatePlaceholderInput();\n\n renderer.clearInput();\n renderer.setSuccess(upload.uploadIndex, upload.getSize());\n upload.status = \"done\";\n\n const { onSuccess } = this.callbacks;\n\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"uploadComplete\", element, upload);\n }\n\n if (onSuccess && upload.type === \"tus\") {\n onSuccess(upload);\n }\n };\n\n initDropArea(container: Element, inputAccept: string): void {\n new DropArea({\n container,\n inputAccept,\n onUploadFiles: this.uploadFiles,\n renderer: this.renderer\n });\n }\n\n onChange = (e: Event): void => {\n const files = (e.target as HTMLInputElement).files ?? ([] as File[]);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.handleInvalidFiles([...invalidFiles]);\n void this.uploadFiles([...acceptedFiles]);\n\n this.renderer.clearInput();\n };\n\n async removeExistingUpload(upload: BaseUpload): Promise {\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"removeUpload\", element, upload);\n }\n\n if (upload.status === \"uploading\") {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n } else if (upload.status === \"done\") {\n this.renderer.disableDelete(upload.uploadIndex);\n\n try {\n await upload.delete();\n } catch {\n this.renderer.setDeleteFailed(upload.uploadIndex);\n return;\n }\n }\n\n this.removeUploadFromList(upload);\n this.updatePlaceholderInput();\n }\n\n removeUploadFromList(upload: BaseUpload): void {\n this.renderer.deleteFile(upload.uploadIndex);\n\n const index = this.uploads.indexOf(upload);\n\n if (index >= 0) {\n this.uploads.splice(index, 1);\n }\n\n this.checkDropHint();\n\n const { onDelete } = this.callbacks;\n\n if (onDelete) {\n onDelete(upload);\n }\n }\n\n updatePlaceholderInput(): void {\n const input = findInput(\n this.form,\n getUploadsFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n if (!input) {\n return;\n }\n\n const placeholdersInfo: InitialFile[] = this.uploads.map(upload =>\n upload.getInitialFile()\n );\n\n input.value = JSON.stringify(placeholdersInfo);\n }\n\n async uploadFile(file: File): Promise {\n const createUpload = (): S3Upload | TusUpload => {\n const { csrfToken, s3UploadDir } = this;\n\n if (s3UploadDir != null) {\n return new S3Upload({\n csrfToken,\n endpoint: uploadUrl,\n file,\n s3UploadDir,\n uploadIndex: newUploadIndex\n });\n } else {\n return new TusUpload({\n chunkSize: this.chunkSize,\n csrfToken: this.csrfToken,\n fieldName,\n file,\n formId,\n retryDelays: this.retryDelays,\n uploadIndex: newUploadIndex,\n uploadUrl\n });\n }\n };\n\n const { fieldName, formId, renderer, uploadUrl } = this;\n const fileName = file.name;\n const existingUpload = this.findUploadByName(fileName);\n const newUploadIndex = existingUpload\n ? existingUpload.uploadIndex\n : this.nextUploadIndex;\n\n if (!existingUpload) {\n this.nextUploadIndex += 1;\n }\n\n if (existingUpload) {\n await this.removeExistingUpload(existingUpload);\n }\n\n const upload = createUpload();\n\n upload.onError = (error: unknown) => {\n this.handleError(upload, error);\n };\n upload.onProgress = (bytesUploaded, bytesTotal) => {\n this.handleProgress(upload, bytesUploaded, bytesTotal);\n };\n upload.onSuccess = () => {\n this.handleSuccess(upload);\n };\n upload.start();\n\n this.uploads.push(upload);\n\n const element = renderer.addNewUpload(fileName, newUploadIndex);\n this.emitEvent(\"addUpload\", element, upload);\n }\n\n uploadFiles = async (files: File[]): Promise => {\n if (files.length === 0) {\n return;\n }\n\n if (!this.multiple) {\n for (const upload of this.uploads) {\n this.renderer.deleteFile(upload.uploadIndex);\n }\n\n this.uploads = [];\n const file = files[0];\n\n if (file) {\n await this.uploadFile(file);\n }\n } else {\n for (const file of files) {\n await this.uploadFile(file);\n }\n }\n\n this.checkDropHint();\n };\n}\n\nexport default FileField;\n","import { EventEmitter } from \"eventemitter3\";\n\nimport FileField, { Callbacks, Translations } from \"./file_field.ts\";\nimport { InitialFile } from \"./uploads/base_upload.ts\";\nimport {\n findInput,\n getInputValueForFormAndPrefix,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Options {\n callbacks?: Callbacks;\n chunkSize?: number;\n eventEmitter?: EventEmitter;\n prefix?: string;\n retryDelays?: number[];\n skipRequired?: boolean;\n supportDropArea?: boolean;\n}\n\nconst initUploadFields = (form: Element, options: Options = {}): void => {\n const matchesPrefix = (fieldName: string): boolean => {\n if (!options.prefix) {\n return true;\n }\n\n return fieldName.startsWith(`${options.prefix}-`);\n };\n\n const getPrefix = (): null | string => options.prefix ?? null;\n\n const getInputValue = (fieldName: string): string | undefined =>\n getInputValueForFormAndPrefix(form, fieldName, getPrefix());\n\n const getInitialFiles = (fieldName: string): InitialFile[] => {\n const data = getInputValue(getUploadsFieldName(fieldName, getPrefix()));\n\n if (!data) {\n return [];\n }\n\n return (JSON.parse(data) as Record[]).filter(\n file => file.type\n ) as unknown as InitialFile[];\n };\n\n const uploadUrl = getInputValue(\"upload_url\");\n const formId = getInputValue(\"form_id\");\n const s3UploadDir = getInputValue(\"s3_upload_dir\");\n const skipRequired = options.skipRequired ?? false;\n const prefix = getPrefix();\n const csrfToken = findInput(form, \"csrfmiddlewaretoken\", null)?.value;\n\n if (!csrfToken) {\n throw Error(\"Csrf token not found\");\n }\n\n if (!formId || !uploadUrl) {\n return;\n }\n\n form.querySelectorAll(\".dff-uploader\").forEach(uploaderDiv => {\n const container = uploaderDiv.querySelector(\".dff-container\");\n\n if (!container) {\n return;\n }\n\n const input = container.querySelector(\"input[type=file]\");\n\n if (!(input && matchesPrefix(input.name))) {\n return;\n }\n\n const fieldName = input.name;\n const { multiple } = input;\n const initial = getInitialFiles(fieldName);\n const dataTranslations = container.getAttribute(\"data-translations\");\n const translations: Translations = dataTranslations\n ? (JSON.parse(dataTranslations) as Translations)\n : {};\n const supportDropArea = !(options.supportDropArea === false);\n\n new FileField({\n callbacks: options.callbacks ?? {},\n chunkSize: options.chunkSize ?? 2621440,\n csrfToken,\n eventEmitter: options.eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent: container,\n prefix,\n retryDelays: options.retryDelays ?? null,\n s3UploadDir: s3UploadDir ?? null,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n });\n });\n};\n\nexport default initUploadFields;\n","import initUploadFields, { Options } from \"./init_upload_fields.ts\";\nimport {\n getInputNameWithPrefix,\n getInputValueForFormAndPrefix\n} from \"./util.ts\";\n\nconst initFormSet = (\n form: HTMLFormElement,\n optionsParam: Options | string\n): void => {\n let options: Options;\n\n if (typeof optionsParam === \"string\") {\n options = { prefix: optionsParam };\n } else {\n options = optionsParam;\n }\n\n const prefix = options.prefix ?? \"form\";\n\n const totalFormsValue = getInputValueForFormAndPrefix(\n form,\n \"TOTAL_FORMS\",\n prefix\n );\n\n if (!totalFormsValue) {\n return;\n }\n\n const formCount = parseInt(totalFormsValue, 10);\n\n for (let i = 0; i < formCount; i += 1) {\n const subFormPrefix = getInputNameWithPrefix(i.toString(), null);\n initUploadFields(form, {\n ...options,\n prefix: `${prefix}-${subFormPrefix}`\n });\n }\n};\n\nexport default initFormSet;\n","import autoInitFileForms from \"./auto_init_file_forms.ts\";\nimport initFormSet from \"./init_form_set.ts\";\nimport initUploadFields from \"./init_upload_fields.ts\";\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nwindow.autoInitFileForms = autoInitFileForms; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initFormSet = initFormSet; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initUploadFields = initUploadFields; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n"],"names":["findForm","element","parent","parentElement","tagName","unique","values","Array","from","Set","autoInitFileForms","initUploadFields","window","forms","document","querySelectorAll","map","forEach","this","standardTypes","require$$0","require$$1","require$$2","require$$3","parseInputAccept","inputAccept","extensions","mimeTypes","split","mimeType","trim","filter","Boolean","fileType","startsWith","push","AcceptedFileTypes","constructor","isAccepted","fileName","length","isMimeTypeAccepted","mime","getType","isExtensionAccepted","picomatch","isMatch","nocase","getEntriesFromDirectory","directoryEntry","Promise","resolve","reject","createReader","readEntries","getFileFromFileSystemFileEntry","fileEntry","file","getFilesFromFileSystemEntries","entries","result","entry","filesFromEntry","getFilesFromFileSystemEntry","isFile","isDirectory","entriesFromDirectory","files","getFilesFromDataTransfer","dataTransfer","items","item","fileSystemEntry","webkitGetAsEntry","getAsFile","DropArea","container","onUploadFiles","renderer","acceptedFileTypes","addEventListener","classList","add","remove","e","preventDefault","onDrop","dragEvent","stopPropagation","uploadFiles","acceptedFiles","invalidFiles","name","setErrorInvalidFiles","error","console","formatBytes","bytes","decimals","k","dm","sizes","i","Math","floor","log","n","parseFloat","toFixed","size","toString","getInputNameWithPrefix","fieldName","prefix","getInputNameWithoutPrefix","slice","findInput","form","inputNameWithPrefix","input","querySelector","getUploadsFieldName","getInputValueForFormAndPrefix","value","getMetadataFieldName","RenderUploadFile","skipRequired","translations","createFilesContainer","errors","createErrorContainer","required","addNewUpload","filename","uploadIndex","div","addFile","progressSpan","createElement","className","innerSpan","appendChild","cancelLink","setTextContent","getTranslation","setAttribute","href","addUploadedFile","filesize","setSuccess","clearInput","deleteFile","index","findFileDiv","disableCancel","cancelSpan","findCancelSpan","disableDelete","deleteLink","findDeleteLink","removeDropHint","dropHint","renderDropHint","setDeleteFailed","setErrorMessage","enableDelete","setError","el","removeProgress","removeCancel","errorsMessages","msg","invalidFileTypeMessage","replaceChildren","fileSizeInfo","updateProgress","percentage","innerProgressSpan","style","width","nameSpan","innerHTML","escape","key","message","originalMessageSpan","span","text","append","createTextNode","BaseUpload","status","type","abort","delete","MB","abortMultipartUpload","csrfToken","endpoint","uploadId","encodeURIComponent","uploadIdEnc","headers","Headers","url","urljoin","fetch","method","then","response","json","completeMultipartUpload","parts","body","JSON","stringify","data","createMultipartUpload","s3UploadDir","accept","contentType","getChunkSize","ceil","prepareUploadPart","number","arr","indexOf","splice","S3Upload","createdPromise","Error","chunks","chunkState","uploading","onError","undefined","onProgress","onSuccess","initChunks","catch","xhr","getId","getInitialFile","id","original_name","getSize","start","createUpload","completeUpload","sort","a","b","PartNumber","err","handleError","valid","TypeError","uploadParts","desiredChunkSize","minChunkSize","max","chunkSize","end","min","busy","done","uploaded","onPartComplete","etag","state","part","ETag","onPartProgress","sent","totalUploaded","reduce","c","uploadPart","uploadPartBytes","XMLHttpRequest","open","responseType","upload","ev","lengthComputable","loaded","getResponseHeader","send","need","every","candidates","DetailedError","causingErr","req","res","originalRequest","originalResponse","causingError","requestId","getHeader","getMethod","getURL","getStatus","getBody","NoopUrlStorage","listAllUploads","findUploadsByFingerprint","_fingerprint","removeUpload","_urlStorageKey","addUpload","_upload","querystringify","querystringify_1","global","uuid","replace","r","random","v","PROTOCOL_TUS_V1","PROTOCOL_IETF_DRAFT_03","PROTOCOL_IETF_DRAFT_05","defaultOptions","uploadUrl","metadata","metadataForPartialUploads","fingerprint","uploadSize","onChunkComplete","onUploadUrlAvailable","overridePatchMethod","addRequestId","onBeforeRequest","onAfterResponse","onShouldRetry","defaultOnShouldRetry","Number","POSITIVE_INFINITY","retryDelays","parallelUploads","parallelUploadBoundaries","storeFingerprintForResuming","removeFingerprintOnSuccess","uploadLengthDeferred","uploadDataDuringCreation","urlStorage","fileReader","httpStack","protocol","options","_urlStorage","_req","_offset","_aborted","_size","_source","_retryAttempt","_retryTimeout","_offsetBeforeRetry","_parallelUploads","_parallelUploadUrls","terminate","openRequest","sendRequest","shouldRetry","delay","remainingDelays","newOptions","setTimeout","findPreviousUploads","resumeFromPreviousUpload","previousUpload","parallelUploadUrls","urlStorageKey","_emitError","includes","Object","prototype","call","optionName","openFile","source","isNaN","_startParallelUpload","_startSingleUpload","totalSize","totalProgress","partCount","splitSizeIntoParts","uploads","lastPartProgress","newPartProgress","_emitProgress","u","_saveUploadInUrlStorage","all","_openRequest","setHeader","join","encodeMetadata","_sendRequest","inStatusCategory","_emitHttpError","location","resolveUrl","_emitSuccess","_resumeUpload","_createUpload","shouldTerminate","clearTimeout","_removeFromUrlStorage","shouldResetDelays","lastResponse","bytesSent","bytesTotal","_emitChunkComplete","bytesAccepted","promise","_addChunkToRequest","close","_handleUploadResponse","_performUpload","offset","parseInt","setProgressHandler","valueSize","newSize","storedUpload","creationTime","Date","Base64","encode","String","category","createRequest","isOnline","online","navigator","onLine","retryAttempt","origin","link","URL","partSize","isReactNative","product","toLowerCase","uriToBlob","uri","onload","blob","onerror","isCordova","PhoneGap","Cordova","cordova","readAsByteArray","chunk","reader","FileReader","Uint8Array","readAsArrayBuffer","FileSource","_file","len","blobOrArray","concat","Blob","set","StreamSource","_buffer","_bufferOffset","_reader","_done","_readUntilEnoughDataOrDone","hasEnoughData","_getDataFromBuffer","read","hasAllDataBeenRead","cancel","isFinite","reactNativeFingerprint","lastModified","exifHash","exif","hashCode","str","hash","char","charCodeAt","XHRHttpStack","Request","getName","_xhr","_method","_url","_headers","header","setRequestHeader","progressHandler","onprogress","Response","getUnderlyingObject","responseText","hasStorage","originalValue","localStorage","getItem","setItem","removeItem","code","SECURITY_ERR","QUOTA_EXCEEDED_ERR","canStoreURLs","WebStorageUrlStorage","findAllUploads","results","_findEntries","round","parse","_e","DefaultHttpStack","Upload","deleteUpload","TusUpload","formId","handleAfterReponse","addCsrTokenToRequest","handleProgress","handleSucces","request","_request","resourceId","bytesUploaded","BaseUploadedFile","PlaceholderFile","initialFile","ExistingFile","UploadedS3File","UploadedTusFile","createUploadedFile","FileField","callbacks","eventEmitter","initial","multiple","supportDropArea","disabled","nextUploadIndex","filesContainer","initDropArea","addInitialFiles","checkDropHint","onChange","handleClick","initialFiles","addInitialFile","emitEvent","nonEmptyUploads","eventName","emit","metaDataField","getMetaDataField","findUploadByName","find","getUploadByIndex","handleCancel","removeUploadFromList","target","getUpload","dataIndex","getAttribute","contains","removeExistingUpload","onClick","handleInvalidFiles","handleSuccess","updatePlaceholderInput","onDelete","placeholdersInfo","uploadFile","newUploadIndex","existingUpload","matchesPrefix","getPrefix","getInputValue","getInitialFiles","uploaderDiv","dataTranslations","initFormSet","optionsParam","totalFormsValue","formCount","subFormPrefix"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,12,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]} \ No newline at end of file diff --git a/django_file_form/static/file_form/file_form.min.js b/django_file_form/static/file_form/file_form.min.js index 58634868..1d5fe7e8 100644 --- a/django_file_form/static/file_form/file_form.min.js +++ b/django_file_form/static/file_form/file_form.min.js @@ -5,5 +5,5 @@ * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed - */var I,$;var H=function(){if($)return I;$=1;var e=/["'&<>]/;return I=function(t){var s,o=""+t,i=e.exec(o);if(!i)return o;var n="",r=0,a=0;for(r=i.index;rt?`${t}-${e}`:e,P=(e,t)=>t?e.slice(t.length+1):e,O=(e,t,s)=>{const o=D(t,s),i=e.querySelector(`[name="${o}"]`);return i||null},j=(e,t)=>`${P(e,t)}-uploads`,N=(e,t,s)=>O(e,t,s)?.value;class F{constructor({input:e,parent:t,skipRequired:s,translations:o}){this.container=this.createFilesContainer(t),this.errors=this.createErrorContainer(t),this.input=e,this.translations=o,s&&(this.input.required=!1)}addNewUpload(e,t){const s=this.addFile(e,t),o=document.createElement("span");o.className="dff-progress";const i=document.createElement("span");i.className="dff-progress-inner",o.appendChild(i),s.appendChild(o);const n=document.createElement("a");return n.className="dff-cancel",this.setTextContent(n,this.getTranslation("Cancel")),n.setAttribute("data-index",t.toString()),n.href="#",s.appendChild(n),s}addUploadedFile(e,t,s){const o=this.addFile(e,t);return this.setSuccess(t,s),o}clearInput(){const{input:e}=this;e.value=""}deleteFile(e){const t=this.findFileDiv(e);t&&t.remove()}disableCancel(e){const t=this.findCancelSpan(e);t&&t.classList.add("dff-disabled")}disableDelete(e){const t=this.findDeleteLink(e);t&&t.classList.add("dff-disabled")}findFileDiv(e){return this.container.querySelector(`.dff-file-id-${e.toString()}`)}removeDropHint(){const e=this.container.querySelector(".dff-drop-hint");e&&e.remove()}renderDropHint(){if(this.container.querySelector(".dff-drop-hint"))return;const e=document.createElement("div");e.className="dff-drop-hint",this.setTextContent(e,this.getTranslation("Drop your files here")),this.container.appendChild(e)}setDeleteFailed(e){this.setErrorMessage(e,this.getTranslation("Delete failed")),this.enableDelete(e)}setError(e){this.setErrorMessage(e,this.getTranslation("Upload failed"));const t=this.findFileDiv(e);t&&t.classList.add("dff-upload-fail"),this.removeProgress(e),this.removeCancel(e)}setErrorInvalidFiles(e){const t=document.createElement("ul");for(const s of e){const e=document.createElement("li"),o=this.getTranslation("Invalid file type");this.setTextContent(e,`${s.name}: ${o}`),e.className="dff-error",t.appendChild(e)}this.errors.replaceChildren(t),this.clearInput()}setSuccess(e,t){const s=this.findFileDiv(e);if(s){if(s.classList.add("dff-upload-success"),null!=t){const e=document.createElement("span");this.setTextContent(e,((e,t)=>{if(0===e)return"0 Bytes";const s=t,o=Math.floor(Math.log(e)/Math.log(1024)),i=parseFloat((e/1024**o).toFixed(s)),n=["Bytes","KB","MB","GB"][o];return null==n?"":`${i.toString()} ${n}`})(t,2)),e.className="dff-filesize",s.appendChild(e)}const o=document.createElement("a");this.setTextContent(o,this.getTranslation("Delete")),o.className="dff-delete",o.setAttribute("data-index",e.toString()),o.href="#",s.appendChild(o)}this.removeProgress(e),this.removeCancel(e)}updateProgress(e,t){const s=this.container.querySelector(`.dff-file-id-${e.toString()}`);if(s){const e=s.querySelector(".dff-progress-inner");e&&(e.style.width=`${t}%`)}}addFile(e,t){const s=document.createElement("div");s.className=`dff-file dff-file-id-${t.toString()}`;const o=document.createElement("span");return o.innerHTML=L(e),o.className="dff-filename",o.setAttribute("data-index",t.toString()),s.appendChild(o),this.container.appendChild(s),this.input.required=!1,s}createErrorContainer=e=>{const t=document.createElement("div");return t.className="dff-invalid-files",e.appendChild(t),t};createFilesContainer=e=>{const t=document.createElement("div");return t.className="dff-files",e.appendChild(t),t};enableDelete(e){const t=this.findDeleteLink(e);t&&t.classList.remove("dff-disabled")}findCancelSpan(e){const t=this.findFileDiv(e);return t?t.querySelector(".dff-cancel"):null}findDeleteLink(e){const t=this.findFileDiv(e);return t?t.querySelector(".dff-delete"):t}getTranslation(e){return this.translations[e]??e}removeCancel(e){const t=this.findCancelSpan(e);t&&t.remove()}removeProgress(e){const t=this.findFileDiv(e);if(t){const e=t.querySelector(".dff-progress");e&&e.remove()}}setErrorMessage(e,t){const s=this.findFileDiv(e);if(!s)return;const o=s.querySelector(".dff-error");o&&o.remove();const i=document.createElement("span");i.classList.add("dff-error"),this.setTextContent(i,t),s.appendChild(i)}setTextContent(e,t){e.append(document.createTextNode(t))}}let z=class{constructor({name:e,status:t,type:s,uploadIndex:o}){this.name=e,this.status=t,this.type=s,this.uploadIndex=o}async abort(){}async delete(){}};function q(){return function(e){var t=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var s=e.shift();e[0]=s+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var o=0;o0&&(i=i.replace(/^[\/]+/,"")),i=o0?"?":"")+r.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}const B=(e,t)=>{const s=e.indexOf(t);-1!==s&&e.splice(s,1)};class M extends z{constructor({csrfToken:e,endpoint:t,file:s,s3UploadDir:o,uploadIndex:i}){super({name:s.name,status:"uploading",type:"s3",uploadIndex:i}),this.csrfToken=e,this.endpoint=t,this.file=s,this.s3UploadDir=o,this.key=null,this.uploadId=null,this.parts=[],this.createdPromise=Promise.reject(new Error),this.chunks=[],this.chunkState=[],this.uploading=[],this.onError=void 0,this.onProgress=void 0,this.onSuccess=void 0,this.initChunks(),this.createdPromise.catch(()=>({}))}async abort(){this.uploading.slice().forEach(e=>{e.abort()}),this.uploading=[],await this.createdPromise,this.key&&this.uploadId&&await(({csrfToken:e,endpoint:t,key:s,uploadId:o})=>{const i=encodeURIComponent(s),n=encodeURIComponent(o),r=new Headers({"X-CSRFToken":e}),a=q(t,n,`?key=${i}`);return fetch(a,{headers:r,method:"delete"}).then(e=>e.json())})({csrfToken:this.csrfToken,endpoint:this.endpoint,key:this.key,uploadId:this.uploadId})}async delete(){return Promise.resolve()}getId(){return this.uploadId??void 0}getInitialFile(){return{id:this.uploadId??"",name:this.key??"",original_name:this.file.name,size:this.file.size,type:"s3"}}getSize(){return this.file.size}start(){this.createUpload()}completeUpload(){return this.parts.sort((e,t)=>e.PartNumber-t.PartNumber),this.uploadId&&this.key?(({csrfToken:e,endpoint:t,key:s,parts:o,uploadId:i})=>{const n=encodeURIComponent(s),r=encodeURIComponent(i),a=new Headers({"X-CSRFToken":e}),l=q(t,r,"complete",`?key=${n}`);return fetch(l,{body:JSON.stringify({parts:o}),headers:a,method:"post"}).then(e=>e.json()).then(e=>e)})({csrfToken:this.csrfToken,endpoint:this.endpoint,key:this.key,parts:this.parts,uploadId:this.uploadId}).then(()=>{this.onSuccess&&this.onSuccess()},e=>{this.handleError(e)}):Promise.resolve()}createUpload(){return this.createdPromise=(({csrfToken:e,endpoint:t,file:s,s3UploadDir:o})=>{const i=new Headers({accept:"application/json","content-type":"application/json","X-CSRFToken":e});return fetch(t,{body:JSON.stringify({contentType:s.type,filename:s.name,s3UploadDir:o}),headers:i,method:"post"}).then(e=>e.json()).then(e=>e)})({csrfToken:this.csrfToken,endpoint:this.endpoint,file:this.file,s3UploadDir:this.s3UploadDir}),this.createdPromise.then(e=>{if(!("object"==typeof e&&e&&"string"==typeof e.uploadId&&"string"==typeof e.key))throw new TypeError("AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.");this.key=e.key,this.uploadId=e.uploadId,this.uploadParts()}).catch(e=>{this.handleError(e)})}handleError(e){if(!this.onError)throw e;this.onError(e)}initChunks(){const e=[],t=(s=this.file,Math.ceil(s.size/1e4));var s;const o=Math.max(5242880,Math.ceil(this.file.size/1e4)),i=Math.max(t,o);for(let t=0;t({busy:!1,done:!1,uploaded:0}))}onPartComplete(e,t){const s=this.chunkState[e];s&&(s.etag=t,s.done=!0);const o={ETag:t,PartNumber:e+1};this.parts.push(o),this.uploadParts()}onPartProgress(e,t){const s=this.chunkState[e];if(s&&(s.uploaded=t),this.onProgress){const e=this.chunkState.reduce((e,t)=>e+t.uploaded,0);this.onProgress(e,this.file.size)}}uploadPart(e){const t=this.chunkState[e];return t&&(t.busy=!0),this.key&&this.uploadId?(({csrfToken:e,endpoint:t,key:s,number:o,uploadId:i})=>{const n=encodeURIComponent(s),r=new Headers({"X-CSRFToken":e}),a=q(t,i,o.toString(),`?key=${n}`);return fetch(a,{headers:r,method:"get"}).then(e=>e.json()).then(e=>e)})({csrfToken:this.csrfToken,endpoint:this.endpoint,key:this.key,number:e+1,uploadId:this.uploadId}).then(e=>{if(!("object"==typeof e&&"string"==typeof e.url))throw new TypeError("AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.");return e}).then(({url:t})=>{this.uploadPartBytes(e,t)},e=>{this.handleError(e)}):Promise.resolve()}uploadPartBytes(e,t){const s=this.chunks[e],o=new XMLHttpRequest;o.open("PUT",t,!0),o.responseType="text",this.uploading.push(o),o.upload.addEventListener("progress",t=>{t.lengthComputable&&this.onPartProgress(e,t.loaded)}),o.addEventListener("abort",()=>{B(this.uploading,o);const t=this.chunkState[e];t&&(t.busy=!1)}),o.addEventListener("load",()=>{B(this.uploading,o);const t=this.chunkState[e];if(t&&(t.busy=!1),o.status<200||o.status>=300)return void this.handleError(new Error("Non 2xx"));this.onPartProgress(e,s?.size??0);const i=o.getResponseHeader("ETag");null!==i?this.onPartComplete(e,i):this.handleError(new Error("AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions."))}),o.addEventListener("error",()=>{B(this.uploading,o);const t=this.chunkState[e];t&&(t.busy=!1);const s=new Error("Unknown error");this.handleError(s)}),o.send(s)}uploadParts(){const e=1-this.uploading.length;if(0===e)return;if(this.chunkState.every(e=>e.done))return void this.completeUpload();const t=[];for(let s=0;s=e))break}t.forEach(e=>{this.uploadPart(e)})}}class G extends Error{constructor(e,t=null,s=null,o=null){if(super(e),this.originalRequest=s,this.originalResponse=o,this.causingError=t,null!=t&&(e+=`, caused by ${t.toString()}`),null!=s){const t=s.getHeader("X-Request-ID")||"n/a";e+=`, originated from request (method: ${s.getMethod()}, url: ${s.getURL()}, response code: ${o?o.getStatus():"n/a"}, response text: ${o?o.getBody()||"":"n/a"}, request id: ${t})`}this.message=e}}const K="function"==typeof Buffer,X=("function"==typeof TextDecoder&&new TextDecoder,"function"==typeof TextEncoder?new TextEncoder:void 0),Q=Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="),W=(e=>{let t={};return e.forEach((e,s)=>t[e]=s),t})(Q),Z=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,J=String.fromCharCode.bind(String),V=("function"==typeof Uint8Array.from&&Uint8Array.from.bind(Uint8Array),e=>e.replace(/=/g,"").replace(/[+\/]/g,e=>"+"==e?"-":"_")),Y=e=>e.replace(/[^A-Za-z0-9\+\/]/g,""),ee=e=>{let t,s,o,i,n="";const r=e.length%3;for(let r=0;r255||(o=e.charCodeAt(r++))>255||(i=e.charCodeAt(r++))>255)throw new TypeError("invalid character found");t=s<<16|o<<8|i,n+=Q[t>>18&63]+Q[t>>12&63]+Q[t>>6&63]+Q[63&t]}return r?n.slice(0,r-3)+"===".substring(r):n},te="function"==typeof btoa?e=>btoa(e):K?e=>Buffer.from(e,"binary").toString("base64"):ee,se=K?e=>Buffer.from(e).toString("base64"):e=>{let t=[];for(let s=0,o=e.length;s{if(e.length<2)return(t=e.charCodeAt(0))<128?e:t<2048?J(192|t>>>6)+J(128|63&t):J(224|t>>>12&15)+J(128|t>>>6&63)+J(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return J(240|t>>>18&7)+J(128|t>>>12&63)+J(128|t>>>6&63)+J(128|63&t)},ie=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ne=e=>e.replace(ie,oe),re=K?e=>Buffer.from(e,"utf8").toString("base64"):X?e=>se(X.encode(e)):e=>te(ne(e)),ae=(e,t=!1)=>t?V(re(e)):re(e),le=e=>{if(e=e.replace(/\s+/g,""),!Z.test(e))throw new TypeError("malformed base64.");e+="==".slice(2-(3&e.length));let t,s,o,i="";for(let n=0;n>16&255):64===o?J(t>>16&255,t>>8&255):J(t>>16&255,t>>8&255,255&t);return i},pe=ae;var ce,ue;var de,he,fe,me={};var ge=function(){if(fe)return he;fe=1;var e=ue?ce:(ue=1,ce=function(e,t){if(t=t.split(":")[0],!(e=+e))return!1;switch(t){case"http":case"ws":return 80!==e;case"https":case"wss":return 443!==e;case"ftp":return 21!==e;case"gopher":return 70!==e;case"file":return!1}return 0!==e}),t=function(){if(de)return me;de=1;var e=Object.prototype.hasOwnProperty;function t(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(e){return null}}function s(e){try{return encodeURIComponent(e)}catch(e){return null}}return me.stringify=function(t,o){o=o||"";var i,n,r=[];for(n in"string"!=typeof o&&(o="?"),t)if(e.call(t,n)){if((i=t[n])||null!=i&&!isNaN(i)||(i=""),n=s(n),i=s(i),null===n||null===i)continue;r.push(n+"="+i)}return r.length?o+r.join("&"):""},me.parse=function(e){for(var s,o=/([^=?#&]+)=?([^&]*)/g,i={};s=o.exec(e);){var n=t(s[1]),r=t(s[2]);null===n||null===r||n in i||(i[n]=r)}return i},me}(),s=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,o=/[\n\r\t]/g,i=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,n=/:\d+$/,r=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,l=/^[a-zA-Z]:/;function p(e){return(e||"").toString().replace(s,"")}var c=[["#","hash"],["?","query"],function(e,t){return h(t.protocol)?e.replace(/\\/g,"/"):e},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],u={hash:1,query:1};function d(e){var t,s=("undefined"!=typeof window?window:void 0!==a?a:"undefined"!=typeof self?self:{}).location||{},o={},n=typeof(e=e||s);if("blob:"===e.protocol)o=new m(unescape(e.pathname),{});else if("string"===n)for(t in o=new m(e,{}),u)delete o[t];else if("object"===n){for(t in e)t in u||(o[t]=e[t]);void 0===o.slashes&&(o.slashes=i.test(e.href))}return o}function h(e){return"file:"===e||"ftp:"===e||"http:"===e||"https:"===e||"ws:"===e||"wss:"===e}function f(e,t){e=(e=p(e)).replace(o,""),t=t||{};var s,i=r.exec(e),n=i[1]?i[1].toLowerCase():"",a=!!i[2],l=!!i[3],c=0;return a?l?(s=i[2]+i[3]+i[4],c=i[2].length+i[3].length):(s=i[2]+i[4],c=i[2].length):l?(s=i[3]+i[4],c=i[3].length):s=i[4],"file:"===n?c>=2&&(s=s.slice(2)):h(n)?s=i[4]:n?a&&(s=s.slice(2)):c>=2&&h(t.protocol)&&(s=i[4]),{protocol:n,slashes:a||h(n),slashesCount:c,rest:s}}function m(s,i,n){if(s=(s=p(s)).replace(o,""),!(this instanceof m))return new m(s,i,n);var r,a,u,g,x,y,_=c.slice(),v=typeof i,b=this,E=0;for("object"!==v&&"string"!==v&&(n=i,i=null),n&&"function"!=typeof n&&(n=t.parse),r=!(a=f(s||"",i=d(i))).protocol&&!a.slashes,b.slashes=a.slashes||r&&i.slashes,b.protocol=a.protocol||i.protocol||"",s=a.rest,("file:"===a.protocol&&(2!==a.slashesCount||l.test(s))||!a.slashes&&(a.protocol||a.slashesCount<2||!h(b.protocol)))&&(_[3]=[/(.*)/,"pathname"]);E<_.length;E++)"function"!=typeof(g=_[E])?(u=g[0],y=g[1],u!=u?b[y]=s:"string"==typeof u?~(x="@"===u?s.lastIndexOf(u):s.indexOf(u))&&("number"==typeof g[2]?(b[y]=s.slice(0,x),s=s.slice(x+g[2])):(b[y]=s.slice(x),s=s.slice(0,x))):(x=u.exec(s))&&(b[y]=x[1],s=s.slice(0,x.index)),b[y]=b[y]||r&&g[3]&&i[y]||"",g[4]&&(b[y]=b[y].toLowerCase())):s=g(s,b);n&&(b.query=n(b.query)),r&&i.slashes&&"/"!==b.pathname.charAt(0)&&(""!==b.pathname||""!==i.pathname)&&(b.pathname=function(e,t){if(""===e)return t;for(var s=(t||"/").split("/").slice(0,-1).concat(e.split("/")),o=s.length,i=s[o-1],n=!1,r=0;o--;)"."===s[o]?s.splice(o,1):".."===s[o]?(s.splice(o,1),r++):r&&(0===o&&(n=!0),s.splice(o,1),r--);return n&&s.unshift(""),"."!==i&&".."!==i||s.push(""),s.join("/")}(b.pathname,i.pathname)),"/"!==b.pathname.charAt(0)&&h(b.protocol)&&(b.pathname="/"+b.pathname),e(b.port,b.protocol)||(b.host=b.hostname,b.port=""),b.username=b.password="",b.auth&&(~(x=b.auth.indexOf(":"))?(b.username=b.auth.slice(0,x),b.username=encodeURIComponent(decodeURIComponent(b.username)),b.password=b.auth.slice(x+1),b.password=encodeURIComponent(decodeURIComponent(b.password))):b.username=encodeURIComponent(decodeURIComponent(b.auth)),b.auth=b.password?b.username+":"+b.password:b.username),b.origin="file:"!==b.protocol&&h(b.protocol)&&b.host?b.protocol+"//"+b.host:"null",b.href=b.toString()}return m.prototype={set:function(s,o,i){var r=this;switch(s){case"query":"string"==typeof o&&o.length&&(o=(i||t.parse)(o)),r[s]=o;break;case"port":r[s]=o,e(o,r.protocol)?o&&(r.host=r.hostname+":"+o):(r.host=r.hostname,r[s]="");break;case"hostname":r[s]=o,r.port&&(o+=":"+r.port),r.host=o;break;case"host":r[s]=o,n.test(o)?(o=o.split(":"),r.port=o.pop(),r.hostname=o.join(":")):(r.hostname=o,r.port="");break;case"protocol":r.protocol=o.toLowerCase(),r.slashes=!i;break;case"pathname":case"hash":if(o){var a="pathname"===s?"/":"#";r[s]=o.charAt(0)!==a?a+o:o}else r[s]=o;break;case"username":case"password":r[s]=encodeURIComponent(o);break;case"auth":var l=o.indexOf(":");~l?(r.username=o.slice(0,l),r.username=encodeURIComponent(decodeURIComponent(r.username)),r.password=o.slice(l+1),r.password=encodeURIComponent(decodeURIComponent(r.password))):r.username=encodeURIComponent(decodeURIComponent(o))}for(var p=0;p{if(204!==e.getStatus())throw new G("tus: unexpected response while terminating upload",null,s,e)}).catch(o=>{if(o instanceof G||(o=new G("tus: failed to terminate upload",o,s,null)),!ke(o,0,t))throw o;const i=t.retryDelays[0],n=t.retryDelays.slice(1),r={...t,retryDelays:n};return new Promise(e=>setTimeout(e,i)).then(()=>Ee.terminate(e,r))})}findPreviousUploads(){return this.options.fingerprint(this.file,this.options).then(e=>this._urlStorage.findUploadsByFingerprint(e))}resumeFromPreviousUpload(e){this.url=e.uploadUrl||null,this._parallelUploadUrls=e.parallelUploadUrls||null,this._urlStorageKey=e.urlStorageKey}start(){const{file:e}=this;if(!e)return void this._emitError(new Error("tus: no file or stream to upload provided"));if(![ye,_e,ve].includes(this.options.protocol))return void this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`));if(!this.options.endpoint&&!this.options.uploadUrl&&!this.url)return void this._emitError(new Error("tus: neither an endpoint or an upload URL is provided"));const{retryDelays:t}=this.options;if(null==t||"[object Array]"===Object.prototype.toString.call(t)){if(this.options.parallelUploads>1)for(const e of["uploadUrl","uploadSize","uploadLengthDeferred"])if(this.options[e])return void this._emitError(new Error(`tus: cannot use the ${e} option when parallelUploads is enabled`));if(this.options.parallelUploadBoundaries){if(this.options.parallelUploads<=1)return void this._emitError(new Error("tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled"));if(this.options.parallelUploads!==this.options.parallelUploadBoundaries.length)return void this._emitError(new Error("tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`"))}this.options.fingerprint(e,this.options).then(t=>(this._fingerprint=t,this._source?this._source:this.options.fileReader.openFile(e,this.options.chunkSize))).then(e=>{if(this._source=e,this.options.uploadLengthDeferred)this._size=null;else if(null!=this.options.uploadSize){if(this._size=Number(this.options.uploadSize),Number.isNaN(this._size))return void this._emitError(new Error("tus: cannot convert `uploadSize` option into a number"))}else if(this._size=this._source.size,null==this._size)return void this._emitError(new Error("tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option"));this.options.parallelUploads>1||null!=this._parallelUploadUrls?this._startParallelUpload():this._startSingleUpload()}).catch(e=>{this._emitError(e)})}else this._emitError(new Error("tus: the `retryDelays` option must either be an array or null"))}_startParallelUpload(){const e=this._size;let t=0;this._parallelUploads=[];const s=null!=this._parallelUploadUrls?this._parallelUploadUrls.length:this.options.parallelUploads,o=this.options.parallelUploadBoundaries??function(e,t){const s=Math.floor(e/t),o=[];for(let e=0;e{e.uploadUrl=this._parallelUploadUrls[t]||null}),this._parallelUploadUrls=new Array(o.length);const i=o.map((s,i)=>{let n=0;return this._source.slice(s.start,s.end).then(({value:r})=>new Promise((a,l)=>{const p={...this.options,uploadUrl:s.uploadUrl||null,storeFingerprintForResuming:!1,removeFingerprintOnSuccess:!1,parallelUploads:1,parallelUploadBoundaries:null,metadata:this.options.metadataForPartialUploads,headers:{...this.options.headers,"Upload-Concat":"partial"},onSuccess:a,onError:l,onProgress:s=>{t=t-n+s,n=s,this._emitProgress(t,e)},onUploadUrlAvailable:()=>{this._parallelUploadUrls[i]=c.url,this._parallelUploadUrls.filter(e=>Boolean(e)).length===o.length&&this._saveUploadInUrlStorage()}},c=new Ee(r,p);c.start(),this._parallelUploads.push(c)}))});let n;Promise.all(i).then(()=>{n=this._openRequest("POST",this.options.endpoint),n.setHeader("Upload-Concat",`final;${this._parallelUploadUrls.join(" ")}`);const e=Se(this.options.metadata);return""!==e&&n.setHeader("Upload-Metadata",e),this._sendRequest(n,null)}).then(e=>{if(!Re(e.getStatus(),200))return void this._emitHttpError(n,e,"tus: unexpected response while creating upload");const t=e.getHeader("Location");null!=t?(this.url=Ue(this.options.endpoint,t),this.url,this._emitSuccess(e)):this._emitHttpError(n,e,"tus: invalid or missing Location header")}).catch(e=>{this._emitError(e)})}_startSingleUpload(){return this._aborted=!1,null!=this.url?(this.url,void this._resumeUpload()):null!=this.options.uploadUrl?(this.options.uploadUrl,this.url=this.options.uploadUrl,void this._resumeUpload()):void this._createUpload()}abort(e){if(null!=this._parallelUploads)for(const t of this._parallelUploads)t.abort(e);return null!==this._req&&this._req.abort(),this._aborted=!0,null!=this._retryTimeout&&(clearTimeout(this._retryTimeout),this._retryTimeout=null),e&&null!=this.url?Ee.terminate(this.url,this.options).then(()=>this._removeFromUrlStorage()):Promise.resolve()}_emitHttpError(e,t,s,o){this._emitError(new G(s,o,e,t))}_emitError(e){if(!this._aborted){if(null!=this.options.retryDelays){if(null!=this._offset&&this._offset>this._offsetBeforeRetry&&(this._retryAttempt=0),ke(e,this._retryAttempt,this.options)){const e=this.options.retryDelays[this._retryAttempt++];return this._offsetBeforeRetry=this._offset,void(this._retryTimeout=setTimeout(()=>{this.start()},e))}}if("function"!=typeof this.options.onError)throw e;this.options.onError(e)}}_emitSuccess(e){this.options.removeFingerprintOnSuccess&&this._removeFromUrlStorage(),"function"==typeof this.options.onSuccess&&this.options.onSuccess({lastResponse:e})}_emitProgress(e,t){"function"==typeof this.options.onProgress&&this.options.onProgress(e,t)}_emitChunkComplete(e,t,s){"function"==typeof this.options.onChunkComplete&&this.options.onChunkComplete(e,t,s)}_createUpload(){if(!this.options.endpoint)return void this._emitError(new Error("tus: unable to create upload because no endpoint is provided"));const e=this._openRequest("POST",this.options.endpoint);this.options.uploadLengthDeferred?e.setHeader("Upload-Defer-Length","1"):e.setHeader("Upload-Length",`${this._size}`);const t=Se(this.options.metadata);let s;""!==t&&e.setHeader("Upload-Metadata",t),this.options.uploadDataDuringCreation&&!this.options.uploadLengthDeferred?(this._offset=0,s=this._addChunkToRequest(e)):(this.options.protocol!==_e&&this.options.protocol!==ve||e.setHeader("Upload-Complete","?0"),s=this._sendRequest(e,null)),s.then(t=>{if(!Re(t.getStatus(),200))return void this._emitHttpError(e,t,"tus: unexpected response while creating upload");const s=t.getHeader("Location");if(null!=s){if(this.url=Ue(this.options.endpoint,s),this.url,"function"==typeof this.options.onUploadUrlAvailable&&this.options.onUploadUrlAvailable(),0===this._size)return this._emitSuccess(t),void this._source.close();this._saveUploadInUrlStorage().then(()=>{this.options.uploadDataDuringCreation?this._handleUploadResponse(e,t):(this._offset=0,this._performUpload())})}else this._emitHttpError(e,t,"tus: invalid or missing Location header")}).catch(t=>{this._emitHttpError(e,null,"tus: failed to create upload",t)})}_resumeUpload(){const e=this._openRequest("HEAD",this.url);this._sendRequest(e,null).then(t=>{const s=t.getStatus();if(!Re(s,200))return 423===s?void this._emitHttpError(e,t,"tus: upload is currently locked; retry later"):(Re(s,400)&&this._removeFromUrlStorage(),this.options.endpoint?(this.url=null,void this._createUpload()):void this._emitHttpError(e,t,"tus: unable to resume upload (new upload cannot be created without an endpoint)"));const o=Number.parseInt(t.getHeader("Upload-Offset"),10);if(Number.isNaN(o))return void this._emitHttpError(e,t,"tus: invalid or missing offset value");const i=Number.parseInt(t.getHeader("Upload-Length"),10);!Number.isNaN(i)||this.options.uploadLengthDeferred||this.options.protocol!==ye?("function"==typeof this.options.onUploadUrlAvailable&&this.options.onUploadUrlAvailable(),this._saveUploadInUrlStorage().then(()=>{if(o===i)return this._emitProgress(i,i),void this._emitSuccess(t);this._offset=o,this._performUpload()})):this._emitHttpError(e,t,"tus: invalid or missing length value")}).catch(t=>{this._emitHttpError(e,null,"tus: failed to resume upload",t)})}_performUpload(){if(this._aborted)return;let e;this.options.overridePatchMethod?(e=this._openRequest("POST",this.url),e.setHeader("X-HTTP-Method-Override","PATCH")):e=this._openRequest("PATCH",this.url),e.setHeader("Upload-Offset",`${this._offset}`);this._addChunkToRequest(e).then(t=>{Re(t.getStatus(),200)?this._handleUploadResponse(e,t):this._emitHttpError(e,t,"tus: unexpected response while uploading chunk")}).catch(t=>{this._aborted||this._emitHttpError(e,null,`tus: failed to upload chunk at offset ${this._offset}`,t)})}_addChunkToRequest(e){const t=this._offset;let s=this._offset+this.options.chunkSize;return e.setProgressHandler(e=>{this._emitProgress(t+e,this._size)}),this.options.protocol===ye?e.setHeader("Content-Type","application/offset+octet-stream"):this.options.protocol===ve&&e.setHeader("Content-Type","application/partial-upload"),(s===Number.POSITIVE_INFINITY||s>this._size)&&!this.options.uploadLengthDeferred&&(s=this._size),this._source.slice(t,s).then(({value:t,done:s})=>{const o=t?.size?t.size:0;this.options.uploadLengthDeferred&&s&&(this._size=this._offset+o,e.setHeader("Upload-Length",`${this._size}`));const i=this._offset+o;return!this.options.uploadLengthDeferred&&s&&i!==this._size?Promise.reject(new Error(`upload was configured with a size of ${this._size} bytes, but the source is done after ${i} bytes`)):null===t?this._sendRequest(e):(this.options.protocol!==_e&&this.options.protocol!==ve||e.setHeader("Upload-Complete",s?"?1":"?0"),this._emitProgress(this._offset,this._size),this._sendRequest(e,t))})}_handleUploadResponse(e,t){const s=Number.parseInt(t.getHeader("Upload-Offset"),10);if(Number.isNaN(s))this._emitHttpError(e,t,"tus: invalid or missing offset value");else{if(this._emitProgress(s,this._size),this._emitChunkComplete(s-this._offset,s,this._size),this._offset=s,s===this._size)return this._emitSuccess(t),void this._source.close();this._performUpload()}}_openRequest(e,t){const s=we(e,t,this.options);return this._req=s,s}_removeFromUrlStorage(){this._urlStorageKey&&(this._urlStorage.removeUpload(this._urlStorageKey).catch(e=>{this._emitError(e)}),this._urlStorageKey=null)}_saveUploadInUrlStorage(){if(!this.options.storeFingerprintForResuming||!this._fingerprint||null!==this._urlStorageKey)return Promise.resolve();const e={size:this._size,metadata:this.options.metadata,creationTime:(new Date).toString()};return this._parallelUploads?e.parallelUploadUrls=this._parallelUploadUrls:e.uploadUrl=this.url,this._urlStorage.addUpload(this._fingerprint,e).then(e=>{this._urlStorageKey=e})}_sendRequest(e,t=null){return Ae(e,t,this.options)}}function Se(e){return Object.entries(e).map(([e,t])=>`${e} ${pe(String(t))}`).join(",")}function Re(e,t){return e>=t&&e{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});o.setHeader("X-Request-ID",e)}return o}async function Ae(e,t,s){"function"==typeof s.onBeforeRequest&&await s.onBeforeRequest(e);const o=await e.send(t);return"function"==typeof s.onAfterResponse&&await s.onAfterResponse(e,o),o}function ke(e,t,s){return!(null==s.retryDelays||t>=s.retryDelays.length||null==e.originalRequest)&&(s&&"function"==typeof s.onShouldRetry?s.onShouldRetry(e,t,s):Ce(e))}function Ce(e){const t=e.originalResponse?e.originalResponse.getStatus():0;return(!Re(t,400)||409===t||423===t)&&function(){let e=!0;return"undefined"!=typeof navigator&&!1===navigator.onLine&&(e=!1),e}()}function Ue(e,t){return new xe(t,e).toString()}Ee.defaultOptions=be;const Te=()=>"undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class Ie{constructor(e){this._file=e,this.size=e.size}slice(e,t){if("undefined"!=typeof window&&(void 0!==window.PhoneGap||void 0!==window.Cordova||void 0!==window.cordova))return s=this._file.slice(e,t),new Promise((e,t)=>{const o=new FileReader;o.onload=()=>{const t=new Uint8Array(o.result);e({value:t})},o.onerror=e=>{t(e)},o.readAsArrayBuffer(s)});var s;const o=this._file.slice(e,t),i=t>=this.size;return Promise.resolve({value:o,done:i})}close(){}}function $e(e){return void 0===e?0:void 0!==e.size?e.size:e.length}class He{constructor(e){this._buffer=void 0,this._bufferOffset=0,this._reader=e,this._done=!1}slice(e,t){return e(o?this._done=!0:void 0===this._buffer?this._buffer=s:this._buffer=function(e,t){if(e.concat)return e.concat(t);if(e instanceof Blob)return new Blob([e,t],{type:e.type});if(e.set){const s=new e.constructor(e.length+t.length);return s.set(e),s.set(t,e.length),s}throw new Error("Unknown data type")}(this._buffer,s),this._readUntilEnoughDataOrDone(e,t)))}_getDataFromBuffer(e,t){e>this._bufferOffset&&(this._buffer=this._buffer.slice(e-this._bufferOffset),this._bufferOffset=e);const s=0===$e(this._buffer);return this._done&&s?null:this._buffer.slice(0,t-e)}close(){this._reader.cancel&&this._reader.cancel()}}class Le{constructor(e,t){this._xhr=new XMLHttpRequest,this._xhr.open(e,t,!0),this._method=e,this._url=t,this._headers={}}getMethod(){return this._method}getURL(){return this._url}setHeader(e,t){this._xhr.setRequestHeader(e,t),this._headers[e]=t}getHeader(e){return this._headers[e]}setProgressHandler(e){"upload"in this._xhr&&(this._xhr.upload.onprogress=t=>{t.lengthComputable&&e(t.loaded)})}send(e=null){return new Promise((t,s)=>{this._xhr.onload=()=>{t(new De(this._xhr))},this._xhr.onerror=e=>{s(e)},this._xhr.send(e)})}abort(){return this._xhr.abort(),Promise.resolve()}getUnderlyingObject(){return this._xhr}}class De{constructor(e){this._xhr=e}getStatus(){return this._xhr.status}getHeader(e){return this._xhr.getResponseHeader(e)}getBody(){return this._xhr.responseText}getUnderlyingObject(){return this._xhr}}let Pe=!1;try{Pe="localStorage"in window;const e="tusSupport",t=localStorage.getItem(e);localStorage.setItem(e,t),null===t&&localStorage.removeItem(e)}catch(e){if(e.code!==e.SECURITY_ERR&&e.code!==e.QUOTA_EXCEEDED_ERR)throw e;Pe=!1}const Oe=Pe;const je={...Ee.defaultOptions,httpStack:new class{createRequest(e,t){return new Le(e,t)}getName(){return"XHRHttpStack"}},fileReader:new class{async openFile(e,t){if(Te()&&e&&void 0!==e.uri)try{const t=await(s=e.uri,new Promise((e,t)=>{const o=new XMLHttpRequest;o.responseType="blob",o.onload=()=>{const t=o.response;e(t)},o.onerror=e=>{t(e)},o.open("GET",s),o.send()}));return new Ie(t)}catch(e){throw new Error(`tus: cannot fetch \`file.uri\` as Blob, make sure the uri is correct and accessible. ${e}`)}var s;return"function"==typeof e.slice&&void 0!==e.size?Promise.resolve(new Ie(e)):"function"==typeof e.read?(t=Number(t),Number.isFinite(t)?Promise.resolve(new He(e,t)):Promise.reject(new Error("cannot create source for stream without a finite value for the `chunkSize` option"))):Promise.reject(new Error("source object may only be an instance of File, Blob, or Reader in this environment"))}},urlStorage:Oe?new class{findAllUploads(){const e=this._findEntries("tus::");return Promise.resolve(e)}findUploadsByFingerprint(e){const t=this._findEntries(`tus::${e}::`);return Promise.resolve(t)}removeUpload(e){return localStorage.removeItem(e),Promise.resolve()}addUpload(e,t){const s=`tus::${e}::${Math.round(1e12*Math.random())}`;return localStorage.setItem(s,JSON.stringify(t)),Promise.resolve(s)}_findEntries(e){const t=[];for(let s=0;snew Promise((s,o)=>{const i=new XMLHttpRequest;i.open("DELETE",e),i.onload=()=>{204===i.status?s():o(new Error)},i.setRequestHeader("Tus-Resumable","1.0.0"),i.setRequestHeader("X-CSRFToken",t),i.send(null)});class ze extends z{constructor({chunkSize:e,csrfToken:t,fieldName:s,file:o,formId:i,retryDelays:n,uploadIndex:r,uploadUrl:a}){super({name:o.name,status:"uploading",type:"tus",uploadIndex:r}),this.csrfToken=t,this.upload=new Ne(o,{chunkSize:e,endpoint:a,metadata:{fieldName:s,filename:o.name,formId:i},onAfterResponse:this.handleAfterReponse,onBeforeRequest:this.addCsrTokenToRequest,onError:this.handleError,onProgress:this.handleProgress,onSuccess:this.handleSucces,retryDelays:n??[0,1e3,3e3,5e3]}),this.onError=void 0,this.onProgress=void 0,this.onSuccess=void 0}async abort(){await this.upload.abort(!0)}async delete(){if(!this.upload.url)return Promise.resolve();await Fe(this.upload.url,this.csrfToken)}getId(){return this.id}getInitialFile(){return{id:this.id,name:this.name,size:this.getSize(),type:"tus",url:""}}getSize(){return this.upload.file.size}start(){this.upload.start()}addCsrTokenToRequest=e=>{e.setHeader("X-CSRFToken",this.csrfToken)};handleAfterReponse=(e,t)=>{const s=t.getHeader("ResourceId");s&&(this.id=s)};handleError=e=>{if(!this.onError)throw e;this.onError(e)};handleProgress=(e,t)=>{this.onProgress&&this.onProgress(e,t)};handleSucces=()=>{this.onSuccess&&this.onSuccess()}}class qe extends z{constructor({name:e,size:t,type:s,uploadIndex:o}){super({name:e,status:"done",type:s,uploadIndex:o}),this.size=t}async abort(){return Promise.resolve()}async delete(){return Promise.resolve()}getSize(){return this.size}}class Be extends qe{constructor(e,t){super({name:e.name,size:e.size,type:"placeholder",uploadIndex:t}),this.id=e.id}getId(){}getInitialFile(){return{id:this.id,name:this.name,size:this.size,type:"placeholder"}}}class Me extends qe{constructor(e,t){super({name:e.name,size:e.size,type:"existing",uploadIndex:t})}getId(){}getInitialFile(){return{name:this.name,size:this.size,type:"existing"}}}class Ge extends qe{constructor(e,t){super({name:e.original_name||e.name,size:e.size,type:"uploadedS3",uploadIndex:t}),this.id=e.id,this.key=e.name}getId(){return this.id}getInitialFile(){return{id:this.id,name:this.key,original_name:this.name,size:this.size,type:"s3"}}}class Ke extends qe{constructor({csrfToken:e,initialFile:t,uploadIndex:s,uploadUrl:o}){super({name:t.name,size:t.size,type:"uploadedTus",uploadIndex:s}),this.csrfToken=e,this.id=t.id,this.url=`${o}${t.id}`}async delete(){await Fe(this.url,this.csrfToken)}getId(){return this.id}getInitialFile(){return{id:this.id,name:this.name,size:this.size,type:"tus",url:""}}}class Xe{constructor({callbacks:e,chunkSize:t,csrfToken:s,eventEmitter:o,fieldName:i,form:n,formId:r,initial:a,input:l,multiple:p,parent:c,prefix:u,retryDelays:d,s3UploadDir:h,skipRequired:f,supportDropArea:m,translations:g,uploadUrl:x}){this.callbacks=e,this.chunkSize=t,this.csrfToken=s,this.eventEmitter=o,this.fieldName=i,this.form=n,this.formId=r,this.multiple=p,this.prefix=u,this.retryDelays=d,this.s3UploadDir=h,this.supportDropArea=m&&!l.disabled,this.uploadUrl=x,this.acceptedFileTypes=new C(l.accept),this.uploads=[],this.nextUploadIndex=0,this.renderer=new F({input:l,parent:c,skipRequired:f,translations:g});const y=this.renderer.container;m&&this.initDropArea(y,l.accept),this.addInitialFiles(a),this.checkDropHint(),l.addEventListener("change",this.onChange),y.addEventListener("click",this.handleClick)}addInitialFiles(e){if(0===e.length)return;const{multiple:t,renderer:s}=this,o=e=>{const{size:t}=e,o="s3"===e.type&&e.original_name?e.original_name:e.name,i=s.addUploadedFile(o,this.nextUploadIndex,t),n=(({csrfToken:e,initialFile:t,uploadIndex:s,uploadUrl:o})=>{switch(t.type){case"existing":return new Me(t,s);case"placeholder":return new Be(t,s);case"s3":return new Ge(t,s);case"tus":return new Ke({csrfToken:e,initialFile:t,uploadIndex:s,uploadUrl:o})}})({csrfToken:this.csrfToken,initialFile:e,uploadIndex:this.nextUploadIndex,uploadUrl:this.uploadUrl});this.uploads.push(n),this.emitEvent("addUpload",i,n)};if(t)e.forEach(e=>{o(e),this.nextUploadIndex+=1});else{const t=e[0];t&&o(t)}}checkDropHint(){if(!this.supportDropArea)return;0===this.uploads.filter(e=>Boolean(e)).length?this.renderer.renderDropHint():this.renderer.removeDropHint()}emitEvent(e,t,s){this.eventEmitter&&this.eventEmitter.emit(e,{element:t,fieldName:this.fieldName,fileName:s.name,metaDataField:this.getMetaDataField(),upload:s})}findUploadByName(e){return this.uploads.find(t=>t.name===e)}getMetaDataField(){return O(this.form,(e=this.fieldName,t=this.prefix,`${P(e,t)}-metadata`),this.prefix);var e,t}getUploadByIndex(e){return this.uploads.find(t=>t.uploadIndex===e)}async handleCancel(e){this.renderer.disableCancel(e.uploadIndex),await e.abort(),this.removeUploadFromList(e)}handleClick=e=>{const t=e.target,s=()=>{const e=t.getAttribute("data-index");if(!e)return;const s=parseInt(e,10);return this.getUploadByIndex(s)};if(t.classList.contains("dff-delete")&&!t.classList.contains("dff-disabled")){e.preventDefault();const t=s();t&&this.removeExistingUpload(t)}else if(t.classList.contains("dff-cancel")){e.preventDefault();const t=s();t&&this.handleCancel(t)}else if(t.classList.contains("dff-filename")){e.preventDefault();const t=s();"done"===t?.status&&this.callbacks.onClick&&this.callbacks.onClick({fieldName:this.fieldName,fileName:t.name,id:t.getId(),type:t.type})}};handleError=(e,t)=>{this.renderer.setError(e.uploadIndex),e.status="error";const{onError:s}=this.callbacks;s&&e instanceof ze&&s(t,e)};handleInvalidFiles=e=>{this.renderer.setErrorInvalidFiles(e)};handleProgress=(e,t,s)=>{const o=(t/s*100).toFixed(2);this.renderer.updateProgress(e.uploadIndex,o);const{onProgress:i}=this.callbacks;i&&e instanceof ze&&i(t,s,e)};handleSuccess=e=>{const{renderer:t}=this;this.updatePlaceholderInput(),t.clearInput(),t.setSuccess(e.uploadIndex,e.getSize()),e.status="done";const{onSuccess:s}=this.callbacks,o=this.renderer.findFileDiv(e.uploadIndex);o&&this.emitEvent("uploadComplete",o,e),s&&"tus"===e.type&&s(e)};initDropArea(e,t){new T({container:e,inputAccept:t,onUploadFiles:this.uploadFiles,renderer:this.renderer})}onChange=e=>{const t=e.target.files??[],s=[],o=[];for(const e of t)this.acceptedFileTypes.isAccepted(e.name)?s.push(e):o.push(e);this.handleInvalidFiles([...o]),this.uploadFiles([...s]),this.renderer.clearInput()};async removeExistingUpload(e){const t=this.renderer.findFileDiv(e.uploadIndex);if(t&&this.emitEvent("removeUpload",t,e),"uploading"===e.status)this.renderer.disableCancel(e.uploadIndex),await e.abort();else if("done"===e.status){this.renderer.disableDelete(e.uploadIndex);try{await e.delete()}catch{return void this.renderer.setDeleteFailed(e.uploadIndex)}}this.removeUploadFromList(e),this.updatePlaceholderInput()}removeUploadFromList(e){this.renderer.deleteFile(e.uploadIndex);const t=this.uploads.indexOf(e);t>=0&&this.uploads.splice(t,1),this.checkDropHint();const{onDelete:s}=this.callbacks;s&&s(e)}updatePlaceholderInput(){const e=O(this.form,j(this.fieldName,this.prefix),this.prefix);if(!e)return;const t=this.uploads.map(e=>e.getInitialFile());e.value=JSON.stringify(t)}async uploadFile(e){const{fieldName:t,formId:s,renderer:o,uploadUrl:i}=this,n=e.name,r=this.findUploadByName(n),a=r?r.uploadIndex:this.nextUploadIndex;r||(this.nextUploadIndex+=1),r&&await this.removeExistingUpload(r);const l=(()=>{const{csrfToken:o,s3UploadDir:n}=this;return null!=n?new M({csrfToken:o,endpoint:i,file:e,s3UploadDir:n,uploadIndex:a}):new ze({chunkSize:this.chunkSize,csrfToken:this.csrfToken,fieldName:t,file:e,formId:s,retryDelays:this.retryDelays,uploadIndex:a,uploadUrl:i})})();l.onError=e=>{this.handleError(l,e)},l.onProgress=(e,t)=>{this.handleProgress(l,e,t)},l.onSuccess=()=>{this.handleSuccess(l)},l.start(),this.uploads.push(l);const p=o.addNewUpload(n,a);this.emitEvent("addUpload",p,l)}uploadFiles=async e=>{if(0!==e.length){if(this.multiple)for(const t of e)await this.uploadFile(t);else{for(const e of this.uploads)this.renderer.deleteFile(e.uploadIndex);this.uploads=[];const t=e[0];t&&await this.uploadFile(t)}this.checkDropHint()}}}const Qe=(e,t={})=>{const s=()=>t.prefix??null,o=t=>N(e,t,s()),i=o("upload_url"),n=o("form_id"),r=o("s3_upload_dir"),a=t.skipRequired??!1,l=s(),p=O(e,"csrfmiddlewaretoken",null)?.value;if(!p)throw Error("Csrf token not found");n&&i&&e.querySelectorAll(".dff-uploader").forEach(c=>{const u=c.querySelector(".dff-container");if(!u)return;const d=u.querySelector("input[type=file]");if(!d||!(e=>!t.prefix||e.startsWith(`${t.prefix}-`))(d.name))return;const h=d.name,{multiple:f}=d,m=(e=>{const t=o(j(e,s()));return t?JSON.parse(t).filter(e=>e.type):[]})(h),g=u.getAttribute("data-translations"),x=g?JSON.parse(g):{},y=!(!1===t.supportDropArea);new Xe({callbacks:t.callbacks??{},chunkSize:t.chunkSize??2621440,csrfToken:p,eventEmitter:t.eventEmitter,fieldName:h,form:e,formId:n,initial:m,input:d,multiple:f,parent:u,prefix:l,retryDelays:t.retryDelays??null,s3UploadDir:r??null,skipRequired:a,supportDropArea:y,translations:x,uploadUrl:i})})};window.autoInitFileForms=()=>{const t=window.initUploadFields;var s;(s=Array.from(document.querySelectorAll(".dff-uploader")).map(e),Array.from(new Set(s).values())).forEach(t)},window.initFormSet=(e,t)=>{let s;s="string"==typeof t?{prefix:t}:t;const o=s.prefix??"form",i=N(e,"TOTAL_FORMS",o);if(!i)return;const n=parseInt(i,10);for(let t=0;t]/;return I=function(t){var s,o=""+t,i=e.exec(o);if(!i)return o;var n="",r=0,a=0;for(r=i.index;rt?`${t}-${e}`:e,P=(e,t)=>t?e.slice(t.length+1):e,O=(e,t,s)=>{const o=D(t,s),i=e.querySelector(`[name="${o}"]`);return i||null},j=(e,t)=>`${P(e,t)}-uploads`,N=(e,t,s)=>O(e,t,s)?.value;class F{constructor({input:e,parent:t,skipRequired:s,translations:o}){this.container=this.createFilesContainer(t),this.errors=this.createErrorContainer(t),this.input=e,this.translations=o,s&&(this.input.required=!1)}addNewUpload(e,t){const s=this.addFile(e,t),o=document.createElement("span");o.className="dff-progress";const i=document.createElement("span");i.className="dff-progress-inner",o.appendChild(i),s.appendChild(o);const n=document.createElement("a");return n.className="dff-cancel",this.setTextContent(n,this.getTranslation("Cancel")),n.setAttribute("data-index",t.toString()),n.href="#",s.appendChild(n),s}addUploadedFile(e,t,s){const o=this.addFile(e,t);return this.setSuccess(t,s),o}clearInput(){const{input:e}=this;e.value=""}deleteFile(e){const t=this.findFileDiv(e);t&&t.remove()}disableCancel(e){const t=this.findCancelSpan(e);t&&t.classList.add("dff-disabled")}disableDelete(e){const t=this.findDeleteLink(e);t&&t.classList.add("dff-disabled")}findFileDiv(e){return this.container.querySelector(`.dff-file-id-${e.toString()}`)}removeDropHint(){const e=this.container.querySelector(".dff-drop-hint");e&&e.remove()}renderDropHint(){if(this.container.querySelector(".dff-drop-hint"))return;const e=document.createElement("div");e.className="dff-drop-hint",this.setTextContent(e,this.getTranslation("Drop your files here")),this.container.appendChild(e)}setDeleteFailed(e){this.setErrorMessage(e,this.getTranslation("Delete failed")),this.enableDelete(e)}setError(e){this.setErrorMessage(e,this.getTranslation("Upload failed"));const t=this.findFileDiv(e);t&&t.classList.add("dff-upload-fail"),this.removeProgress(e),this.removeCancel(e)}setErrorInvalidFiles(e){const t=document.createElement("ul");for(const s of e){const e=document.createElement("li"),o=this.getTranslation("Invalid file type");this.setTextContent(e,`${s.name}: ${o}`),e.className="dff-error",t.appendChild(e)}this.errors.replaceChildren(t),this.clearInput()}setSuccess(e,t){const s=this.findFileDiv(e);if(s){if(s.classList.add("dff-upload-success"),null!=t){const e=document.createElement("span");this.setTextContent(e,((e,t)=>{if(0===e)return"0 Bytes";const s=t,o=Math.floor(Math.log(e)/Math.log(1024)),i=parseFloat((e/1024**o).toFixed(s)),n=["Bytes","KB","MB","GB"][o];return null==n?"":`${i.toString()} ${n}`})(t,2)),e.className="dff-filesize",s.appendChild(e)}const o=document.createElement("a");this.setTextContent(o,this.getTranslation("Delete")),o.className="dff-delete",o.setAttribute("data-index",e.toString()),o.href="#",s.appendChild(o)}this.removeProgress(e),this.removeCancel(e)}updateProgress(e,t){const s=this.container.querySelector(`.dff-file-id-${e.toString()}`);if(s){const e=s.querySelector(".dff-progress-inner");e&&(e.style.width=`${t}%`)}}addFile(e,t){const s=document.createElement("div");s.className=`dff-file dff-file-id-${t.toString()}`;const o=document.createElement("span");return o.innerHTML=L(e),o.className="dff-filename",o.setAttribute("data-index",t.toString()),s.appendChild(o),this.container.appendChild(s),this.input.required=!1,s}createErrorContainer=e=>{const t=document.createElement("div");return t.className="dff-invalid-files",e.appendChild(t),t};createFilesContainer=e=>{const t=document.createElement("div");return t.className="dff-files",e.appendChild(t),t};enableDelete(e){const t=this.findDeleteLink(e);t&&t.classList.remove("dff-disabled")}findCancelSpan(e){const t=this.findFileDiv(e);return t?t.querySelector(".dff-cancel"):null}findDeleteLink(e){const t=this.findFileDiv(e);return t?t.querySelector(".dff-delete"):t}getTranslation(e){return this.translations[e]??e}removeCancel(e){const t=this.findCancelSpan(e);t&&t.remove()}removeProgress(e){const t=this.findFileDiv(e);if(t){const e=t.querySelector(".dff-progress");e&&e.remove()}}setErrorMessage(e,t){const s=this.findFileDiv(e);if(!s)return;const o=s.querySelector(".dff-error");o&&o.remove();const i=document.createElement("span");i.classList.add("dff-error"),this.setTextContent(i,t),s.appendChild(i)}setTextContent(e,t){e.append(document.createTextNode(t))}}let z=class{constructor({name:e,status:t,type:s,uploadIndex:o}){this.name=e,this.status=t,this.type=s,this.uploadIndex=o}async abort(){}async delete(){}};function q(){return function(e){var t=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var s=e.shift();e[0]=s+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var o=0;o0&&(i=i.replace(/^[\/]+/,"")),i=o0?"?":"")+r.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}const B=(e,t)=>{const s=e.indexOf(t);-1!==s&&e.splice(s,1)};class M extends z{constructor({csrfToken:e,endpoint:t,file:s,s3UploadDir:o,uploadIndex:i}){super({name:s.name,status:"uploading",type:"s3",uploadIndex:i}),this.csrfToken=e,this.endpoint=t,this.file=s,this.s3UploadDir=o,this.key=null,this.uploadId=null,this.parts=[],this.createdPromise=Promise.reject(new Error),this.chunks=[],this.chunkState=[],this.uploading=[],this.onError=void 0,this.onProgress=void 0,this.onSuccess=void 0,this.initChunks(),this.createdPromise.catch(()=>({}))}async abort(){this.uploading.slice().forEach(e=>{e.abort()}),this.uploading=[],await this.createdPromise,this.key&&this.uploadId&&await(({csrfToken:e,endpoint:t,key:s,uploadId:o})=>{const i=encodeURIComponent(s),n=encodeURIComponent(o),r=new Headers({"X-CSRFToken":e}),a=q(t,n,`?key=${i}`);return fetch(a,{headers:r,method:"delete"}).then(e=>e.json())})({csrfToken:this.csrfToken,endpoint:this.endpoint,key:this.key,uploadId:this.uploadId})}async delete(){return Promise.resolve()}getId(){return this.uploadId??void 0}getInitialFile(){return{id:this.uploadId??"",name:this.key??"",original_name:this.file.name,size:this.file.size,type:"s3"}}getSize(){return this.file.size}start(){this.createUpload()}completeUpload(){return this.parts.sort((e,t)=>e.PartNumber-t.PartNumber),this.uploadId&&this.key?(({csrfToken:e,endpoint:t,key:s,parts:o,uploadId:i})=>{const n=encodeURIComponent(s),r=encodeURIComponent(i),a=new Headers({"X-CSRFToken":e}),l=q(t,r,"complete",`?key=${n}`);return fetch(l,{body:JSON.stringify({parts:o}),headers:a,method:"post"}).then(e=>e.json()).then(e=>e)})({csrfToken:this.csrfToken,endpoint:this.endpoint,key:this.key,parts:this.parts,uploadId:this.uploadId}).then(()=>{this.onSuccess&&this.onSuccess()},e=>{this.handleError(e)}):Promise.resolve()}createUpload(){return this.createdPromise=(({csrfToken:e,endpoint:t,file:s,s3UploadDir:o})=>{const i=new Headers({accept:"application/json","content-type":"application/json","X-CSRFToken":e});return fetch(t,{body:JSON.stringify({contentType:s.type,filename:s.name,s3UploadDir:o}),headers:i,method:"post"}).then(e=>e.json()).then(e=>e)})({csrfToken:this.csrfToken,endpoint:this.endpoint,file:this.file,s3UploadDir:this.s3UploadDir}),this.createdPromise.then(e=>{if(!("object"==typeof e&&e&&"string"==typeof e.uploadId&&"string"==typeof e.key))throw new TypeError("AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.");this.key=e.key,this.uploadId=e.uploadId,this.uploadParts()}).catch(e=>{this.handleError(e)})}handleError(e){if(!this.onError)throw e;this.onError(e)}initChunks(){const e=[],t=(s=this.file,Math.ceil(s.size/1e4));var s;const o=Math.max(5242880,Math.ceil(this.file.size/1e4)),i=Math.max(t,o);for(let t=0;t({busy:!1,done:!1,uploaded:0}))}onPartComplete(e,t){const s=this.chunkState[e];s&&(s.etag=t,s.done=!0);const o={ETag:t,PartNumber:e+1};this.parts.push(o),this.uploadParts()}onPartProgress(e,t){const s=this.chunkState[e];if(s&&(s.uploaded=t),this.onProgress){const e=this.chunkState.reduce((e,t)=>e+t.uploaded,0);this.onProgress(e,this.file.size)}}uploadPart(e){const t=this.chunkState[e];return t&&(t.busy=!0),this.key&&this.uploadId?(({csrfToken:e,endpoint:t,key:s,number:o,uploadId:i})=>{const n=encodeURIComponent(s),r=new Headers({"X-CSRFToken":e}),a=q(t,i,o.toString(),`?key=${n}`);return fetch(a,{headers:r,method:"get"}).then(e=>e.json()).then(e=>e)})({csrfToken:this.csrfToken,endpoint:this.endpoint,key:this.key,number:e+1,uploadId:this.uploadId}).then(e=>{if(!("object"==typeof e&&"string"==typeof e.url))throw new TypeError("AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.");return e}).then(({url:t})=>{this.uploadPartBytes(e,t)},e=>{this.handleError(e)}):Promise.resolve()}uploadPartBytes(e,t){const s=this.chunks[e],o=new XMLHttpRequest;o.open("PUT",t,!0),o.responseType="text",this.uploading.push(o),o.upload.addEventListener("progress",t=>{t.lengthComputable&&this.onPartProgress(e,t.loaded)}),o.addEventListener("abort",()=>{B(this.uploading,o);const t=this.chunkState[e];t&&(t.busy=!1)}),o.addEventListener("load",()=>{B(this.uploading,o);const t=this.chunkState[e];if(t&&(t.busy=!1),o.status<200||o.status>=300)return void this.handleError(new Error("Non 2xx"));this.onPartProgress(e,s?.size??0);const i=o.getResponseHeader("ETag");null!==i?this.onPartComplete(e,i):this.handleError(new Error("AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions."))}),o.addEventListener("error",()=>{B(this.uploading,o);const t=this.chunkState[e];t&&(t.busy=!1);const s=new Error("Unknown error");this.handleError(s)}),o.send(s)}uploadParts(){const e=1-this.uploading.length;if(0===e)return;if(this.chunkState.every(e=>e.done))return void this.completeUpload();const t=[];for(let s=0;s=e))break}t.forEach(e=>{this.uploadPart(e)})}}class G extends Error{constructor(e,t=null,s=null,o=null){if(super(e),this.originalRequest=s,this.originalResponse=o,this.causingError=t,null!=t&&(e+=`, caused by ${t.toString()}`),null!=s){const t=s.getHeader("X-Request-ID")||"n/a";e+=`, originated from request (method: ${s.getMethod()}, url: ${s.getURL()}, response code: ${o?o.getStatus():"n/a"}, response text: ${o?o.getBody()||"":"n/a"}, request id: ${t})`}this.message=e}}const K="function"==typeof Buffer,X=("function"==typeof TextDecoder&&new TextDecoder,"function"==typeof TextEncoder?new TextEncoder:void 0),Q=Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="),W=(e=>{let t={};return e.forEach((e,s)=>t[e]=s),t})(Q),Z=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,J=String.fromCharCode.bind(String),V=("function"==typeof Uint8Array.from&&Uint8Array.from.bind(Uint8Array),e=>e.replace(/=/g,"").replace(/[+\/]/g,e=>"+"==e?"-":"_")),Y=e=>e.replace(/[^A-Za-z0-9\+\/]/g,""),ee=e=>{let t,s,o,i,n="";const r=e.length%3;for(let r=0;r255||(o=e.charCodeAt(r++))>255||(i=e.charCodeAt(r++))>255)throw new TypeError("invalid character found");t=s<<16|o<<8|i,n+=Q[t>>18&63]+Q[t>>12&63]+Q[t>>6&63]+Q[63&t]}return r?n.slice(0,r-3)+"===".substring(r):n},te="function"==typeof btoa?e=>btoa(e):K?e=>Buffer.from(e,"binary").toString("base64"):ee,se=K?e=>Buffer.from(e).toString("base64"):e=>{let t=[];for(let s=0,o=e.length;s{if(e.length<2)return(t=e.charCodeAt(0))<128?e:t<2048?J(192|t>>>6)+J(128|63&t):J(224|t>>>12&15)+J(128|t>>>6&63)+J(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return J(240|t>>>18&7)+J(128|t>>>12&63)+J(128|t>>>6&63)+J(128|63&t)},ie=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ne=e=>e.replace(ie,oe),re=K?e=>Buffer.from(e,"utf8").toString("base64"):X?e=>se(X.encode(e)):e=>te(ne(e)),ae=(e,t=!1)=>t?V(re(e)):re(e),le=e=>{if(e=e.replace(/\s+/g,""),!Z.test(e))throw new TypeError("malformed base64.");let t,s,o;e+="==".slice(2-(3&e.length));let i=[];for(let n=0;n>16&255)):64===o?i.push(J(t>>16&255,t>>8&255)):i.push(J(t>>16&255,t>>8&255,255&t));return i.join("")},pe=ae;var ce,ue;var de,he,fe,me={};var ge=function(){if(fe)return he;fe=1;var e=ue?ce:(ue=1,ce=function(e,t){if(t=t.split(":")[0],!(e=+e))return!1;switch(t){case"http":case"ws":return 80!==e;case"https":case"wss":return 443!==e;case"ftp":return 21!==e;case"gopher":return 70!==e;case"file":return!1}return 0!==e}),t=function(){if(de)return me;de=1;var e=Object.prototype.hasOwnProperty;function t(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(e){return null}}function s(e){try{return encodeURIComponent(e)}catch(e){return null}}return me.stringify=function(t,o){o=o||"";var i,n,r=[];for(n in"string"!=typeof o&&(o="?"),t)if(e.call(t,n)){if((i=t[n])||null!=i&&!isNaN(i)||(i=""),n=s(n),i=s(i),null===n||null===i)continue;r.push(n+"="+i)}return r.length?o+r.join("&"):""},me.parse=function(e){for(var s,o=/([^=?#&]+)=?([^&]*)/g,i={};s=o.exec(e);){var n=t(s[1]),r=t(s[2]);null===n||null===r||n in i||(i[n]=r)}return i},me}(),s=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,o=/[\n\r\t]/g,i=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,n=/:\d+$/,r=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,l=/^[a-zA-Z]:/;function p(e){return(e||"").toString().replace(s,"")}var c=[["#","hash"],["?","query"],function(e,t){return h(t.protocol)?e.replace(/\\/g,"/"):e},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],u={hash:1,query:1};function d(e){var t,s=("undefined"!=typeof window?window:void 0!==a?a:"undefined"!=typeof self?self:{}).location||{},o={},n=typeof(e=e||s);if("blob:"===e.protocol)o=new m(unescape(e.pathname),{});else if("string"===n)for(t in o=new m(e,{}),u)delete o[t];else if("object"===n){for(t in e)t in u||(o[t]=e[t]);void 0===o.slashes&&(o.slashes=i.test(e.href))}return o}function h(e){return"file:"===e||"ftp:"===e||"http:"===e||"https:"===e||"ws:"===e||"wss:"===e}function f(e,t){e=(e=p(e)).replace(o,""),t=t||{};var s,i=r.exec(e),n=i[1]?i[1].toLowerCase():"",a=!!i[2],l=!!i[3],c=0;return a?l?(s=i[2]+i[3]+i[4],c=i[2].length+i[3].length):(s=i[2]+i[4],c=i[2].length):l?(s=i[3]+i[4],c=i[3].length):s=i[4],"file:"===n?c>=2&&(s=s.slice(2)):h(n)?s=i[4]:n?a&&(s=s.slice(2)):c>=2&&h(t.protocol)&&(s=i[4]),{protocol:n,slashes:a||h(n),slashesCount:c,rest:s}}function m(s,i,n){if(s=(s=p(s)).replace(o,""),!(this instanceof m))return new m(s,i,n);var r,a,u,g,x,y,_=c.slice(),v=typeof i,b=this,E=0;for("object"!==v&&"string"!==v&&(n=i,i=null),n&&"function"!=typeof n&&(n=t.parse),r=!(a=f(s||"",i=d(i))).protocol&&!a.slashes,b.slashes=a.slashes||r&&i.slashes,b.protocol=a.protocol||i.protocol||"",s=a.rest,("file:"===a.protocol&&(2!==a.slashesCount||l.test(s))||!a.slashes&&(a.protocol||a.slashesCount<2||!h(b.protocol)))&&(_[3]=[/(.*)/,"pathname"]);E<_.length;E++)"function"!=typeof(g=_[E])?(u=g[0],y=g[1],u!=u?b[y]=s:"string"==typeof u?~(x="@"===u?s.lastIndexOf(u):s.indexOf(u))&&("number"==typeof g[2]?(b[y]=s.slice(0,x),s=s.slice(x+g[2])):(b[y]=s.slice(x),s=s.slice(0,x))):(x=u.exec(s))&&(b[y]=x[1],s=s.slice(0,x.index)),b[y]=b[y]||r&&g[3]&&i[y]||"",g[4]&&(b[y]=b[y].toLowerCase())):s=g(s,b);n&&(b.query=n(b.query)),r&&i.slashes&&"/"!==b.pathname.charAt(0)&&(""!==b.pathname||""!==i.pathname)&&(b.pathname=function(e,t){if(""===e)return t;for(var s=(t||"/").split("/").slice(0,-1).concat(e.split("/")),o=s.length,i=s[o-1],n=!1,r=0;o--;)"."===s[o]?s.splice(o,1):".."===s[o]?(s.splice(o,1),r++):r&&(0===o&&(n=!0),s.splice(o,1),r--);return n&&s.unshift(""),"."!==i&&".."!==i||s.push(""),s.join("/")}(b.pathname,i.pathname)),"/"!==b.pathname.charAt(0)&&h(b.protocol)&&(b.pathname="/"+b.pathname),e(b.port,b.protocol)||(b.host=b.hostname,b.port=""),b.username=b.password="",b.auth&&(~(x=b.auth.indexOf(":"))?(b.username=b.auth.slice(0,x),b.username=encodeURIComponent(decodeURIComponent(b.username)),b.password=b.auth.slice(x+1),b.password=encodeURIComponent(decodeURIComponent(b.password))):b.username=encodeURIComponent(decodeURIComponent(b.auth)),b.auth=b.password?b.username+":"+b.password:b.username),b.origin="file:"!==b.protocol&&h(b.protocol)&&b.host?b.protocol+"//"+b.host:"null",b.href=b.toString()}return m.prototype={set:function(s,o,i){var r=this;switch(s){case"query":"string"==typeof o&&o.length&&(o=(i||t.parse)(o)),r[s]=o;break;case"port":r[s]=o,e(o,r.protocol)?o&&(r.host=r.hostname+":"+o):(r.host=r.hostname,r[s]="");break;case"hostname":r[s]=o,r.port&&(o+=":"+r.port),r.host=o;break;case"host":r[s]=o,n.test(o)?(o=o.split(":"),r.port=o.pop(),r.hostname=o.join(":")):(r.hostname=o,r.port="");break;case"protocol":r.protocol=o.toLowerCase(),r.slashes=!i;break;case"pathname":case"hash":if(o){var a="pathname"===s?"/":"#";r[s]=o.charAt(0)!==a?a+o:o}else r[s]=o;break;case"username":case"password":r[s]=encodeURIComponent(o);break;case"auth":var l=o.indexOf(":");~l?(r.username=o.slice(0,l),r.username=encodeURIComponent(decodeURIComponent(r.username)),r.password=o.slice(l+1),r.password=encodeURIComponent(decodeURIComponent(r.password))):r.username=encodeURIComponent(decodeURIComponent(o))}for(var p=0;p{if(204!==e.getStatus())throw new G("tus: unexpected response while terminating upload",null,s,e)}).catch(o=>{if(o instanceof G||(o=new G("tus: failed to terminate upload",o,s,null)),!ke(o,0,t))throw o;const i=t.retryDelays[0],n=t.retryDelays.slice(1),r={...t,retryDelays:n};return new Promise(e=>setTimeout(e,i)).then(()=>Ee.terminate(e,r))})}findPreviousUploads(){return this.options.fingerprint(this.file,this.options).then(e=>this._urlStorage.findUploadsByFingerprint(e))}resumeFromPreviousUpload(e){this.url=e.uploadUrl||null,this._parallelUploadUrls=e.parallelUploadUrls||null,this._urlStorageKey=e.urlStorageKey}start(){const{file:e}=this;if(!e)return void this._emitError(new Error("tus: no file or stream to upload provided"));if(![ye,_e,ve].includes(this.options.protocol))return void this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`));if(!this.options.endpoint&&!this.options.uploadUrl&&!this.url)return void this._emitError(new Error("tus: neither an endpoint or an upload URL is provided"));const{retryDelays:t}=this.options;if(null==t||"[object Array]"===Object.prototype.toString.call(t)){if(this.options.parallelUploads>1)for(const e of["uploadUrl","uploadSize","uploadLengthDeferred"])if(this.options[e])return void this._emitError(new Error(`tus: cannot use the ${e} option when parallelUploads is enabled`));if(this.options.parallelUploadBoundaries){if(this.options.parallelUploads<=1)return void this._emitError(new Error("tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled"));if(this.options.parallelUploads!==this.options.parallelUploadBoundaries.length)return void this._emitError(new Error("tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`"))}this.options.fingerprint(e,this.options).then(t=>(this._fingerprint=t,this._source?this._source:this.options.fileReader.openFile(e,this.options.chunkSize))).then(e=>{if(this._source=e,this.options.uploadLengthDeferred)this._size=null;else if(null!=this.options.uploadSize){if(this._size=Number(this.options.uploadSize),Number.isNaN(this._size))return void this._emitError(new Error("tus: cannot convert `uploadSize` option into a number"))}else if(this._size=this._source.size,null==this._size)return void this._emitError(new Error("tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option"));this.options.parallelUploads>1||null!=this._parallelUploadUrls?this._startParallelUpload():this._startSingleUpload()}).catch(e=>{this._emitError(e)})}else this._emitError(new Error("tus: the `retryDelays` option must either be an array or null"))}_startParallelUpload(){const e=this._size;let t=0;this._parallelUploads=[];const s=null!=this._parallelUploadUrls?this._parallelUploadUrls.length:this.options.parallelUploads,o=this.options.parallelUploadBoundaries??function(e,t){const s=Math.floor(e/t),o=[];for(let e=0;e{e.uploadUrl=this._parallelUploadUrls[t]||null}),this._parallelUploadUrls=new Array(o.length);const i=o.map((s,i)=>{let n=0;return this._source.slice(s.start,s.end).then(({value:r})=>new Promise((a,l)=>{const p={...this.options,uploadUrl:s.uploadUrl||null,storeFingerprintForResuming:!1,removeFingerprintOnSuccess:!1,parallelUploads:1,parallelUploadBoundaries:null,metadata:this.options.metadataForPartialUploads,headers:{...this.options.headers,"Upload-Concat":"partial"},onSuccess:a,onError:l,onProgress:s=>{t=t-n+s,n=s,this._emitProgress(t,e)},onUploadUrlAvailable:()=>{this._parallelUploadUrls[i]=c.url,this._parallelUploadUrls.filter(e=>Boolean(e)).length===o.length&&this._saveUploadInUrlStorage()}},c=new Ee(r,p);c.start(),this._parallelUploads.push(c)}))});let n;Promise.all(i).then(()=>{n=this._openRequest("POST",this.options.endpoint),n.setHeader("Upload-Concat",`final;${this._parallelUploadUrls.join(" ")}`);const e=Se(this.options.metadata);return""!==e&&n.setHeader("Upload-Metadata",e),this._sendRequest(n,null)}).then(e=>{if(!Re(e.getStatus(),200))return void this._emitHttpError(n,e,"tus: unexpected response while creating upload");const t=e.getHeader("Location");null!=t?(this.url=Ue(this.options.endpoint,t),this.url,this._emitSuccess(e)):this._emitHttpError(n,e,"tus: invalid or missing Location header")}).catch(e=>{this._emitError(e)})}_startSingleUpload(){return this._aborted=!1,null!=this.url?(this.url,void this._resumeUpload()):null!=this.options.uploadUrl?(this.options.uploadUrl,this.url=this.options.uploadUrl,void this._resumeUpload()):void this._createUpload()}abort(e){if(null!=this._parallelUploads)for(const t of this._parallelUploads)t.abort(e);return null!==this._req&&this._req.abort(),this._aborted=!0,null!=this._retryTimeout&&(clearTimeout(this._retryTimeout),this._retryTimeout=null),e&&null!=this.url?Ee.terminate(this.url,this.options).then(()=>this._removeFromUrlStorage()):Promise.resolve()}_emitHttpError(e,t,s,o){this._emitError(new G(s,o,e,t))}_emitError(e){if(!this._aborted){if(null!=this.options.retryDelays){if(null!=this._offset&&this._offset>this._offsetBeforeRetry&&(this._retryAttempt=0),ke(e,this._retryAttempt,this.options)){const e=this.options.retryDelays[this._retryAttempt++];return this._offsetBeforeRetry=this._offset,void(this._retryTimeout=setTimeout(()=>{this.start()},e))}}if("function"!=typeof this.options.onError)throw e;this.options.onError(e)}}_emitSuccess(e){this.options.removeFingerprintOnSuccess&&this._removeFromUrlStorage(),"function"==typeof this.options.onSuccess&&this.options.onSuccess({lastResponse:e})}_emitProgress(e,t){"function"==typeof this.options.onProgress&&this.options.onProgress(e,t)}_emitChunkComplete(e,t,s){"function"==typeof this.options.onChunkComplete&&this.options.onChunkComplete(e,t,s)}_createUpload(){if(!this.options.endpoint)return void this._emitError(new Error("tus: unable to create upload because no endpoint is provided"));const e=this._openRequest("POST",this.options.endpoint);this.options.uploadLengthDeferred?e.setHeader("Upload-Defer-Length","1"):e.setHeader("Upload-Length",`${this._size}`);const t=Se(this.options.metadata);let s;""!==t&&e.setHeader("Upload-Metadata",t),this.options.uploadDataDuringCreation&&!this.options.uploadLengthDeferred?(this._offset=0,s=this._addChunkToRequest(e)):(this.options.protocol!==_e&&this.options.protocol!==ve||e.setHeader("Upload-Complete","?0"),s=this._sendRequest(e,null)),s.then(t=>{if(!Re(t.getStatus(),200))return void this._emitHttpError(e,t,"tus: unexpected response while creating upload");const s=t.getHeader("Location");if(null!=s){if(this.url=Ue(this.options.endpoint,s),this.url,"function"==typeof this.options.onUploadUrlAvailable&&this.options.onUploadUrlAvailable(),0===this._size)return this._emitSuccess(t),void this._source.close();this._saveUploadInUrlStorage().then(()=>{this.options.uploadDataDuringCreation?this._handleUploadResponse(e,t):(this._offset=0,this._performUpload())})}else this._emitHttpError(e,t,"tus: invalid or missing Location header")}).catch(t=>{this._emitHttpError(e,null,"tus: failed to create upload",t)})}_resumeUpload(){const e=this._openRequest("HEAD",this.url);this._sendRequest(e,null).then(t=>{const s=t.getStatus();if(!Re(s,200))return 423===s?void this._emitHttpError(e,t,"tus: upload is currently locked; retry later"):(Re(s,400)&&this._removeFromUrlStorage(),this.options.endpoint?(this.url=null,void this._createUpload()):void this._emitHttpError(e,t,"tus: unable to resume upload (new upload cannot be created without an endpoint)"));const o=Number.parseInt(t.getHeader("Upload-Offset"),10);if(Number.isNaN(o))return void this._emitHttpError(e,t,"tus: invalid or missing offset value");const i=Number.parseInt(t.getHeader("Upload-Length"),10);!Number.isNaN(i)||this.options.uploadLengthDeferred||this.options.protocol!==ye?("function"==typeof this.options.onUploadUrlAvailable&&this.options.onUploadUrlAvailable(),this._saveUploadInUrlStorage().then(()=>{if(o===i)return this._emitProgress(i,i),void this._emitSuccess(t);this._offset=o,this._performUpload()})):this._emitHttpError(e,t,"tus: invalid or missing length value")}).catch(t=>{this._emitHttpError(e,null,"tus: failed to resume upload",t)})}_performUpload(){if(this._aborted)return;let e;this.options.overridePatchMethod?(e=this._openRequest("POST",this.url),e.setHeader("X-HTTP-Method-Override","PATCH")):e=this._openRequest("PATCH",this.url),e.setHeader("Upload-Offset",`${this._offset}`);this._addChunkToRequest(e).then(t=>{Re(t.getStatus(),200)?this._handleUploadResponse(e,t):this._emitHttpError(e,t,"tus: unexpected response while uploading chunk")}).catch(t=>{this._aborted||this._emitHttpError(e,null,`tus: failed to upload chunk at offset ${this._offset}`,t)})}_addChunkToRequest(e){const t=this._offset;let s=this._offset+this.options.chunkSize;return e.setProgressHandler(e=>{this._emitProgress(t+e,this._size)}),this.options.protocol===ye?e.setHeader("Content-Type","application/offset+octet-stream"):this.options.protocol===ve&&e.setHeader("Content-Type","application/partial-upload"),(s===Number.POSITIVE_INFINITY||s>this._size)&&!this.options.uploadLengthDeferred&&(s=this._size),this._source.slice(t,s).then(({value:t,done:s})=>{const o=t?.size?t.size:0;this.options.uploadLengthDeferred&&s&&(this._size=this._offset+o,e.setHeader("Upload-Length",`${this._size}`));const i=this._offset+o;return!this.options.uploadLengthDeferred&&s&&i!==this._size?Promise.reject(new Error(`upload was configured with a size of ${this._size} bytes, but the source is done after ${i} bytes`)):null===t?this._sendRequest(e):(this.options.protocol!==_e&&this.options.protocol!==ve||e.setHeader("Upload-Complete",s?"?1":"?0"),this._emitProgress(this._offset,this._size),this._sendRequest(e,t))})}_handleUploadResponse(e,t){const s=Number.parseInt(t.getHeader("Upload-Offset"),10);if(Number.isNaN(s))this._emitHttpError(e,t,"tus: invalid or missing offset value");else{if(this._emitProgress(s,this._size),this._emitChunkComplete(s-this._offset,s,this._size),this._offset=s,s===this._size)return this._emitSuccess(t),void this._source.close();this._performUpload()}}_openRequest(e,t){const s=we(e,t,this.options);return this._req=s,s}_removeFromUrlStorage(){this._urlStorageKey&&(this._urlStorage.removeUpload(this._urlStorageKey).catch(e=>{this._emitError(e)}),this._urlStorageKey=null)}_saveUploadInUrlStorage(){if(!this.options.storeFingerprintForResuming||!this._fingerprint||null!==this._urlStorageKey)return Promise.resolve();const e={size:this._size,metadata:this.options.metadata,creationTime:(new Date).toString()};return this._parallelUploads?e.parallelUploadUrls=this._parallelUploadUrls:e.uploadUrl=this.url,this._urlStorage.addUpload(this._fingerprint,e).then(e=>{this._urlStorageKey=e})}_sendRequest(e,t=null){return Ae(e,t,this.options)}}function Se(e){return Object.entries(e).map(([e,t])=>`${e} ${pe(String(t))}`).join(",")}function Re(e,t){return e>=t&&e{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)});o.setHeader("X-Request-ID",e)}return o}async function Ae(e,t,s){"function"==typeof s.onBeforeRequest&&await s.onBeforeRequest(e);const o=await e.send(t);return"function"==typeof s.onAfterResponse&&await s.onAfterResponse(e,o),o}function ke(e,t,s){return!(null==s.retryDelays||t>=s.retryDelays.length||null==e.originalRequest)&&(s&&"function"==typeof s.onShouldRetry?s.onShouldRetry(e,t,s):Ce(e))}function Ce(e){const t=e.originalResponse?e.originalResponse.getStatus():0;return(!Re(t,400)||409===t||423===t)&&function(){let e=!0;return"undefined"!=typeof navigator&&!1===navigator.onLine&&(e=!1),e}()}function Ue(e,t){return new xe(t,e).toString()}Ee.defaultOptions=be;const Te=()=>"undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class Ie{constructor(e){this._file=e,this.size=e.size}slice(e,t){if("undefined"!=typeof window&&(void 0!==window.PhoneGap||void 0!==window.Cordova||void 0!==window.cordova))return s=this._file.slice(e,t),new Promise((e,t)=>{const o=new FileReader;o.onload=()=>{const t=new Uint8Array(o.result);e({value:t})},o.onerror=e=>{t(e)},o.readAsArrayBuffer(s)});var s;const o=this._file.slice(e,t),i=t>=this.size;return Promise.resolve({value:o,done:i})}close(){}}function $e(e){return void 0===e?0:void 0!==e.size?e.size:e.length}class He{constructor(e){this._buffer=void 0,this._bufferOffset=0,this._reader=e,this._done=!1}slice(e,t){return e(o?this._done=!0:void 0===this._buffer?this._buffer=s:this._buffer=function(e,t){if(e.concat)return e.concat(t);if(e instanceof Blob)return new Blob([e,t],{type:e.type});if(e.set){const s=new e.constructor(e.length+t.length);return s.set(e),s.set(t,e.length),s}throw new Error("Unknown data type")}(this._buffer,s),this._readUntilEnoughDataOrDone(e,t)))}_getDataFromBuffer(e,t){e>this._bufferOffset&&(this._buffer=this._buffer.slice(e-this._bufferOffset),this._bufferOffset=e);const s=0===$e(this._buffer);return this._done&&s?null:this._buffer.slice(0,t-e)}close(){this._reader.cancel&&this._reader.cancel()}}class Le{constructor(e,t){this._xhr=new XMLHttpRequest,this._xhr.open(e,t,!0),this._method=e,this._url=t,this._headers={}}getMethod(){return this._method}getURL(){return this._url}setHeader(e,t){this._xhr.setRequestHeader(e,t),this._headers[e]=t}getHeader(e){return this._headers[e]}setProgressHandler(e){"upload"in this._xhr&&(this._xhr.upload.onprogress=t=>{t.lengthComputable&&e(t.loaded)})}send(e=null){return new Promise((t,s)=>{this._xhr.onload=()=>{t(new De(this._xhr))},this._xhr.onerror=e=>{s(e)},this._xhr.send(e)})}abort(){return this._xhr.abort(),Promise.resolve()}getUnderlyingObject(){return this._xhr}}class De{constructor(e){this._xhr=e}getStatus(){return this._xhr.status}getHeader(e){return this._xhr.getResponseHeader(e)}getBody(){return this._xhr.responseText}getUnderlyingObject(){return this._xhr}}let Pe=!1;try{Pe="localStorage"in window;const e="tusSupport",t=localStorage.getItem(e);localStorage.setItem(e,t),null===t&&localStorage.removeItem(e)}catch(e){if(e.code!==e.SECURITY_ERR&&e.code!==e.QUOTA_EXCEEDED_ERR)throw e;Pe=!1}const Oe=Pe;const je={...Ee.defaultOptions,httpStack:new class{createRequest(e,t){return new Le(e,t)}getName(){return"XHRHttpStack"}},fileReader:new class{async openFile(e,t){if(Te()&&e&&void 0!==e.uri)try{const t=await(s=e.uri,new Promise((e,t)=>{const o=new XMLHttpRequest;o.responseType="blob",o.onload=()=>{const t=o.response;e(t)},o.onerror=e=>{t(e)},o.open("GET",s),o.send()}));return new Ie(t)}catch(e){throw new Error(`tus: cannot fetch \`file.uri\` as Blob, make sure the uri is correct and accessible. ${e}`)}var s;return"function"==typeof e.slice&&void 0!==e.size?Promise.resolve(new Ie(e)):"function"==typeof e.read?(t=Number(t),Number.isFinite(t)?Promise.resolve(new He(e,t)):Promise.reject(new Error("cannot create source for stream without a finite value for the `chunkSize` option"))):Promise.reject(new Error("source object may only be an instance of File, Blob, or Reader in this environment"))}},urlStorage:Oe?new class{findAllUploads(){const e=this._findEntries("tus::");return Promise.resolve(e)}findUploadsByFingerprint(e){const t=this._findEntries(`tus::${e}::`);return Promise.resolve(t)}removeUpload(e){return localStorage.removeItem(e),Promise.resolve()}addUpload(e,t){const s=`tus::${e}::${Math.round(1e12*Math.random())}`;return localStorage.setItem(s,JSON.stringify(t)),Promise.resolve(s)}_findEntries(e){const t=[];for(let s=0;snew Promise((s,o)=>{const i=new XMLHttpRequest;i.open("DELETE",e),i.onload=()=>{204===i.status?s():o(new Error)},i.setRequestHeader("Tus-Resumable","1.0.0"),i.setRequestHeader("X-CSRFToken",t),i.send(null)});class ze extends z{constructor({chunkSize:e,csrfToken:t,fieldName:s,file:o,formId:i,retryDelays:n,uploadIndex:r,uploadUrl:a}){super({name:o.name,status:"uploading",type:"tus",uploadIndex:r}),this.csrfToken=t,this.upload=new Ne(o,{chunkSize:e,endpoint:a,metadata:{fieldName:s,filename:o.name,formId:i},onAfterResponse:this.handleAfterReponse,onBeforeRequest:this.addCsrTokenToRequest,onError:this.handleError,onProgress:this.handleProgress,onSuccess:this.handleSucces,retryDelays:n??[0,1e3,3e3,5e3]}),this.onError=void 0,this.onProgress=void 0,this.onSuccess=void 0}async abort(){await this.upload.abort(!0)}async delete(){if(!this.upload.url)return Promise.resolve();await Fe(this.upload.url,this.csrfToken)}getId(){return this.id}getInitialFile(){return{id:this.id,name:this.name,size:this.getSize(),type:"tus",url:""}}getSize(){return this.upload.file.size}start(){this.upload.start()}addCsrTokenToRequest=e=>{e.setHeader("X-CSRFToken",this.csrfToken)};handleAfterReponse=(e,t)=>{const s=t.getHeader("ResourceId");s&&(this.id=s)};handleError=e=>{if(!this.onError)throw e;this.onError(e)};handleProgress=(e,t)=>{this.onProgress&&this.onProgress(e,t)};handleSucces=()=>{this.onSuccess&&this.onSuccess()}}class qe extends z{constructor({name:e,size:t,type:s,uploadIndex:o}){super({name:e,status:"done",type:s,uploadIndex:o}),this.size=t}async abort(){return Promise.resolve()}async delete(){return Promise.resolve()}getSize(){return this.size}}class Be extends qe{constructor(e,t){super({name:e.name,size:e.size,type:"placeholder",uploadIndex:t}),this.id=e.id}getId(){}getInitialFile(){return{id:this.id,name:this.name,size:this.size,type:"placeholder"}}}class Me extends qe{constructor(e,t){super({name:e.name,size:e.size,type:"existing",uploadIndex:t})}getId(){}getInitialFile(){return{name:this.name,size:this.size,type:"existing"}}}class Ge extends qe{constructor(e,t){super({name:e.original_name||e.name,size:e.size,type:"uploadedS3",uploadIndex:t}),this.id=e.id,this.key=e.name}getId(){return this.id}getInitialFile(){return{id:this.id,name:this.key,original_name:this.name,size:this.size,type:"s3"}}}class Ke extends qe{constructor({csrfToken:e,initialFile:t,uploadIndex:s,uploadUrl:o}){super({name:t.name,size:t.size,type:"uploadedTus",uploadIndex:s}),this.csrfToken=e,this.id=t.id,this.url=`${o}${t.id}`}async delete(){await Fe(this.url,this.csrfToken)}getId(){return this.id}getInitialFile(){return{id:this.id,name:this.name,size:this.size,type:"tus",url:""}}}class Xe{constructor({callbacks:e,chunkSize:t,csrfToken:s,eventEmitter:o,fieldName:i,form:n,formId:r,initial:a,input:l,multiple:p,parent:c,prefix:u,retryDelays:d,s3UploadDir:h,skipRequired:f,supportDropArea:m,translations:g,uploadUrl:x}){this.callbacks=e,this.chunkSize=t,this.csrfToken=s,this.eventEmitter=o,this.fieldName=i,this.form=n,this.formId=r,this.multiple=p,this.prefix=u,this.retryDelays=d,this.s3UploadDir=h,this.supportDropArea=m&&!l.disabled,this.uploadUrl=x,this.acceptedFileTypes=new C(l.accept),this.uploads=[],this.nextUploadIndex=0,this.renderer=new F({input:l,parent:c,skipRequired:f,translations:g});const y=this.renderer.container;m&&this.initDropArea(y,l.accept),this.addInitialFiles(a),this.checkDropHint(),l.addEventListener("change",this.onChange),y.addEventListener("click",this.handleClick)}addInitialFiles(e){if(0===e.length)return;const{multiple:t,renderer:s}=this,o=e=>{const{size:t}=e,o="s3"===e.type&&e.original_name?e.original_name:e.name,i=s.addUploadedFile(o,this.nextUploadIndex,t),n=(({csrfToken:e,initialFile:t,uploadIndex:s,uploadUrl:o})=>{switch(t.type){case"existing":return new Me(t,s);case"placeholder":return new Be(t,s);case"s3":return new Ge(t,s);case"tus":return new Ke({csrfToken:e,initialFile:t,uploadIndex:s,uploadUrl:o})}})({csrfToken:this.csrfToken,initialFile:e,uploadIndex:this.nextUploadIndex,uploadUrl:this.uploadUrl});this.uploads.push(n),this.emitEvent("addUpload",i,n)};if(t)e.forEach(e=>{o(e),this.nextUploadIndex+=1});else{const t=e[0];t&&o(t)}}checkDropHint(){if(!this.supportDropArea)return;0===this.uploads.filter(e=>Boolean(e)).length?this.renderer.renderDropHint():this.renderer.removeDropHint()}emitEvent(e,t,s){this.eventEmitter&&this.eventEmitter.emit(e,{element:t,fieldName:this.fieldName,fileName:s.name,metaDataField:this.getMetaDataField(),upload:s})}findUploadByName(e){return this.uploads.find(t=>t.name===e)}getMetaDataField(){return O(this.form,(e=this.fieldName,t=this.prefix,`${P(e,t)}-metadata`),this.prefix);var e,t}getUploadByIndex(e){return this.uploads.find(t=>t.uploadIndex===e)}async handleCancel(e){this.renderer.disableCancel(e.uploadIndex),await e.abort(),this.removeUploadFromList(e)}handleClick=e=>{const t=e.target,s=()=>{const e=t.getAttribute("data-index");if(!e)return;const s=parseInt(e,10);return this.getUploadByIndex(s)};if(t.classList.contains("dff-delete")&&!t.classList.contains("dff-disabled")){e.preventDefault();const t=s();t&&this.removeExistingUpload(t)}else if(t.classList.contains("dff-cancel")){e.preventDefault();const t=s();t&&this.handleCancel(t)}else if(t.classList.contains("dff-filename")){e.preventDefault();const t=s();"done"===t?.status&&this.callbacks.onClick&&this.callbacks.onClick({fieldName:this.fieldName,fileName:t.name,id:t.getId(),type:t.type})}};handleError=(e,t)=>{this.renderer.setError(e.uploadIndex),e.status="error";const{onError:s}=this.callbacks;s&&e instanceof ze&&s(t,e)};handleInvalidFiles=e=>{this.renderer.setErrorInvalidFiles(e)};handleProgress=(e,t,s)=>{const o=(t/s*100).toFixed(2);this.renderer.updateProgress(e.uploadIndex,o);const{onProgress:i}=this.callbacks;i&&e instanceof ze&&i(t,s,e)};handleSuccess=e=>{const{renderer:t}=this;this.updatePlaceholderInput(),t.clearInput(),t.setSuccess(e.uploadIndex,e.getSize()),e.status="done";const{onSuccess:s}=this.callbacks,o=this.renderer.findFileDiv(e.uploadIndex);o&&this.emitEvent("uploadComplete",o,e),s&&"tus"===e.type&&s(e)};initDropArea(e,t){new T({container:e,inputAccept:t,onUploadFiles:this.uploadFiles,renderer:this.renderer})}onChange=e=>{const t=e.target.files??[],s=[],o=[];for(const e of t)this.acceptedFileTypes.isAccepted(e.name)?s.push(e):o.push(e);this.handleInvalidFiles([...o]),this.uploadFiles([...s]),this.renderer.clearInput()};async removeExistingUpload(e){const t=this.renderer.findFileDiv(e.uploadIndex);if(t&&this.emitEvent("removeUpload",t,e),"uploading"===e.status)this.renderer.disableCancel(e.uploadIndex),await e.abort();else if("done"===e.status){this.renderer.disableDelete(e.uploadIndex);try{await e.delete()}catch{return void this.renderer.setDeleteFailed(e.uploadIndex)}}this.removeUploadFromList(e),this.updatePlaceholderInput()}removeUploadFromList(e){this.renderer.deleteFile(e.uploadIndex);const t=this.uploads.indexOf(e);t>=0&&this.uploads.splice(t,1),this.checkDropHint();const{onDelete:s}=this.callbacks;s&&s(e)}updatePlaceholderInput(){const e=O(this.form,j(this.fieldName,this.prefix),this.prefix);if(!e)return;const t=this.uploads.map(e=>e.getInitialFile());e.value=JSON.stringify(t)}async uploadFile(e){const{fieldName:t,formId:s,renderer:o,uploadUrl:i}=this,n=e.name,r=this.findUploadByName(n),a=r?r.uploadIndex:this.nextUploadIndex;r||(this.nextUploadIndex+=1),r&&await this.removeExistingUpload(r);const l=(()=>{const{csrfToken:o,s3UploadDir:n}=this;return null!=n?new M({csrfToken:o,endpoint:i,file:e,s3UploadDir:n,uploadIndex:a}):new ze({chunkSize:this.chunkSize,csrfToken:this.csrfToken,fieldName:t,file:e,formId:s,retryDelays:this.retryDelays,uploadIndex:a,uploadUrl:i})})();l.onError=e=>{this.handleError(l,e)},l.onProgress=(e,t)=>{this.handleProgress(l,e,t)},l.onSuccess=()=>{this.handleSuccess(l)},l.start(),this.uploads.push(l);const p=o.addNewUpload(n,a);this.emitEvent("addUpload",p,l)}uploadFiles=async e=>{if(0!==e.length){if(this.multiple)for(const t of e)await this.uploadFile(t);else{for(const e of this.uploads)this.renderer.deleteFile(e.uploadIndex);this.uploads=[];const t=e[0];t&&await this.uploadFile(t)}this.checkDropHint()}}}const Qe=(e,t={})=>{const s=()=>t.prefix??null,o=t=>N(e,t,s()),i=o("upload_url"),n=o("form_id"),r=o("s3_upload_dir"),a=t.skipRequired??!1,l=s(),p=O(e,"csrfmiddlewaretoken",null)?.value;if(!p)throw Error("Csrf token not found");n&&i&&e.querySelectorAll(".dff-uploader").forEach(c=>{const u=c.querySelector(".dff-container");if(!u)return;const d=u.querySelector("input[type=file]");if(!d||!(e=>!t.prefix||e.startsWith(`${t.prefix}-`))(d.name))return;const h=d.name,{multiple:f}=d,m=(e=>{const t=o(j(e,s()));return t?JSON.parse(t).filter(e=>e.type):[]})(h),g=u.getAttribute("data-translations"),x=g?JSON.parse(g):{},y=!(!1===t.supportDropArea);new Xe({callbacks:t.callbacks??{},chunkSize:t.chunkSize??2621440,csrfToken:p,eventEmitter:t.eventEmitter,fieldName:h,form:e,formId:n,initial:m,input:d,multiple:f,parent:u,prefix:l,retryDelays:t.retryDelays??null,s3UploadDir:r??null,skipRequired:a,supportDropArea:y,translations:x,uploadUrl:i})})};window.autoInitFileForms=()=>{const t=window.initUploadFields;var s;(s=Array.from(document.querySelectorAll(".dff-uploader")).map(e),Array.from(new Set(s).values())).forEach(t)},window.initFormSet=(e,t)=>{let s;s="string"==typeof t?{prefix:t}:t;const o=s.prefix??"form",i=N(e,"TOTAL_FORMS",o);if(!i)return;const n=parseInt(i,10);for(let t=0;t {\n const parent = element.parentElement;\n\n if (!parent) {\n return null;\n }\n\n if (parent.tagName === \"FORM\") {\n return parent;\n }\n\n return findForm(parent);\n};\n\nconst unique = (values: unknown[]): unknown[] =>\n Array.from(new Set(values).values());\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nconst autoInitFileForms = (): void => {\n const initUploadFields = window.initUploadFields as () => void; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n\n const forms = unique(\n Array.from(document.querySelectorAll(\".dff-uploader\")).map(findForm)\n );\n forms.forEach(initUploadFields);\n};\n\nexport default autoInitFileForms;\n","const types = {\n 'application/andrew-inset': ['ez'],\n 'application/appinstaller': ['appinstaller'],\n 'application/applixware': ['aw'],\n 'application/appx': ['appx'],\n 'application/appxbundle': ['appxbundle'],\n 'application/atom+xml': ['atom'],\n 'application/atomcat+xml': ['atomcat'],\n 'application/atomdeleted+xml': ['atomdeleted'],\n 'application/atomsvc+xml': ['atomsvc'],\n 'application/atsc-dwd+xml': ['dwd'],\n 'application/atsc-held+xml': ['held'],\n 'application/atsc-rsat+xml': ['rsat'],\n 'application/automationml-aml+xml': ['aml'],\n 'application/automationml-amlx+zip': ['amlx'],\n 'application/bdoc': ['bdoc'],\n 'application/calendar+xml': ['xcs'],\n 'application/ccxml+xml': ['ccxml'],\n 'application/cdfx+xml': ['cdfx'],\n 'application/cdmi-capability': ['cdmia'],\n 'application/cdmi-container': ['cdmic'],\n 'application/cdmi-domain': ['cdmid'],\n 'application/cdmi-object': ['cdmio'],\n 'application/cdmi-queue': ['cdmiq'],\n 'application/cpl+xml': ['cpl'],\n 'application/cu-seeme': ['cu'],\n 'application/cwl': ['cwl'],\n 'application/dash+xml': ['mpd'],\n 'application/dash-patch+xml': ['mpp'],\n 'application/davmount+xml': ['davmount'],\n 'application/dicom': ['dcm'],\n 'application/docbook+xml': ['dbk'],\n 'application/dssc+der': ['dssc'],\n 'application/dssc+xml': ['xdssc'],\n 'application/ecmascript': ['ecma'],\n 'application/emma+xml': ['emma'],\n 'application/emotionml+xml': ['emotionml'],\n 'application/epub+zip': ['epub'],\n 'application/exi': ['exi'],\n 'application/express': ['exp'],\n 'application/fdf': ['fdf'],\n 'application/fdt+xml': ['fdt'],\n 'application/font-tdpfr': ['pfr'],\n 'application/geo+json': ['geojson'],\n 'application/gml+xml': ['gml'],\n 'application/gpx+xml': ['gpx'],\n 'application/gxf': ['gxf'],\n 'application/gzip': ['gz'],\n 'application/hjson': ['hjson'],\n 'application/hyperstudio': ['stk'],\n 'application/inkml+xml': ['ink', 'inkml'],\n 'application/ipfix': ['ipfix'],\n 'application/its+xml': ['its'],\n 'application/java-archive': ['jar', 'war', 'ear'],\n 'application/java-serialized-object': ['ser'],\n 'application/java-vm': ['class'],\n 'application/javascript': ['*js'],\n 'application/json': ['json', 'map'],\n 'application/json5': ['json5'],\n 'application/jsonml+json': ['jsonml'],\n 'application/ld+json': ['jsonld'],\n 'application/lgr+xml': ['lgr'],\n 'application/lost+xml': ['lostxml'],\n 'application/mac-binhex40': ['hqx'],\n 'application/mac-compactpro': ['cpt'],\n 'application/mads+xml': ['mads'],\n 'application/manifest+json': ['webmanifest'],\n 'application/marc': ['mrc'],\n 'application/marcxml+xml': ['mrcx'],\n 'application/mathematica': ['ma', 'nb', 'mb'],\n 'application/mathml+xml': ['mathml'],\n 'application/mbox': ['mbox'],\n 'application/media-policy-dataset+xml': ['mpf'],\n 'application/mediaservercontrol+xml': ['mscml'],\n 'application/metalink+xml': ['metalink'],\n 'application/metalink4+xml': ['meta4'],\n 'application/mets+xml': ['mets'],\n 'application/mmt-aei+xml': ['maei'],\n 'application/mmt-usd+xml': ['musd'],\n 'application/mods+xml': ['mods'],\n 'application/mp21': ['m21', 'mp21'],\n 'application/mp4': ['*mp4', '*mpg4', 'mp4s', 'm4p'],\n 'application/msix': ['msix'],\n 'application/msixbundle': ['msixbundle'],\n 'application/msword': ['doc', 'dot'],\n 'application/mxf': ['mxf'],\n 'application/n-quads': ['nq'],\n 'application/n-triples': ['nt'],\n 'application/node': ['cjs'],\n 'application/octet-stream': [\n 'bin',\n 'dms',\n 'lrf',\n 'mar',\n 'so',\n 'dist',\n 'distz',\n 'pkg',\n 'bpk',\n 'dump',\n 'elc',\n 'deploy',\n 'exe',\n 'dll',\n 'deb',\n 'dmg',\n 'iso',\n 'img',\n 'msi',\n 'msp',\n 'msm',\n 'buffer',\n ],\n 'application/oda': ['oda'],\n 'application/oebps-package+xml': ['opf'],\n 'application/ogg': ['ogx'],\n 'application/omdoc+xml': ['omdoc'],\n 'application/onenote': [\n 'onetoc',\n 'onetoc2',\n 'onetmp',\n 'onepkg',\n 'one',\n 'onea',\n ],\n 'application/oxps': ['oxps'],\n 'application/p2p-overlay+xml': ['relo'],\n 'application/patch-ops-error+xml': ['xer'],\n 'application/pdf': ['pdf'],\n 'application/pgp-encrypted': ['pgp'],\n 'application/pgp-keys': ['asc'],\n 'application/pgp-signature': ['sig', '*asc'],\n 'application/pics-rules': ['prf'],\n 'application/pkcs10': ['p10'],\n 'application/pkcs7-mime': ['p7m', 'p7c'],\n 'application/pkcs7-signature': ['p7s'],\n 'application/pkcs8': ['p8'],\n 'application/pkix-attr-cert': ['ac'],\n 'application/pkix-cert': ['cer'],\n 'application/pkix-crl': ['crl'],\n 'application/pkix-pkipath': ['pkipath'],\n 'application/pkixcmp': ['pki'],\n 'application/pls+xml': ['pls'],\n 'application/postscript': ['ai', 'eps', 'ps'],\n 'application/provenance+xml': ['provx'],\n 'application/pskc+xml': ['pskcxml'],\n 'application/raml+yaml': ['raml'],\n 'application/rdf+xml': ['rdf', 'owl'],\n 'application/reginfo+xml': ['rif'],\n 'application/relax-ng-compact-syntax': ['rnc'],\n 'application/resource-lists+xml': ['rl'],\n 'application/resource-lists-diff+xml': ['rld'],\n 'application/rls-services+xml': ['rs'],\n 'application/route-apd+xml': ['rapd'],\n 'application/route-s-tsid+xml': ['sls'],\n 'application/route-usd+xml': ['rusd'],\n 'application/rpki-ghostbusters': ['gbr'],\n 'application/rpki-manifest': ['mft'],\n 'application/rpki-roa': ['roa'],\n 'application/rsd+xml': ['rsd'],\n 'application/rss+xml': ['rss'],\n 'application/rtf': ['rtf'],\n 'application/sbml+xml': ['sbml'],\n 'application/scvp-cv-request': ['scq'],\n 'application/scvp-cv-response': ['scs'],\n 'application/scvp-vp-request': ['spq'],\n 'application/scvp-vp-response': ['spp'],\n 'application/sdp': ['sdp'],\n 'application/senml+xml': ['senmlx'],\n 'application/sensml+xml': ['sensmlx'],\n 'application/set-payment-initiation': ['setpay'],\n 'application/set-registration-initiation': ['setreg'],\n 'application/shf+xml': ['shf'],\n 'application/sieve': ['siv', 'sieve'],\n 'application/smil+xml': ['smi', 'smil'],\n 'application/sparql-query': ['rq'],\n 'application/sparql-results+xml': ['srx'],\n 'application/sql': ['sql'],\n 'application/srgs': ['gram'],\n 'application/srgs+xml': ['grxml'],\n 'application/sru+xml': ['sru'],\n 'application/ssdl+xml': ['ssdl'],\n 'application/ssml+xml': ['ssml'],\n 'application/swid+xml': ['swidtag'],\n 'application/tei+xml': ['tei', 'teicorpus'],\n 'application/thraud+xml': ['tfi'],\n 'application/timestamped-data': ['tsd'],\n 'application/toml': ['toml'],\n 'application/trig': ['trig'],\n 'application/ttml+xml': ['ttml'],\n 'application/ubjson': ['ubj'],\n 'application/urc-ressheet+xml': ['rsheet'],\n 'application/urc-targetdesc+xml': ['td'],\n 'application/voicexml+xml': ['vxml'],\n 'application/wasm': ['wasm'],\n 'application/watcherinfo+xml': ['wif'],\n 'application/widget': ['wgt'],\n 'application/winhlp': ['hlp'],\n 'application/wsdl+xml': ['wsdl'],\n 'application/wspolicy+xml': ['wspolicy'],\n 'application/xaml+xml': ['xaml'],\n 'application/xcap-att+xml': ['xav'],\n 'application/xcap-caps+xml': ['xca'],\n 'application/xcap-diff+xml': ['xdf'],\n 'application/xcap-el+xml': ['xel'],\n 'application/xcap-ns+xml': ['xns'],\n 'application/xenc+xml': ['xenc'],\n 'application/xfdf': ['xfdf'],\n 'application/xhtml+xml': ['xhtml', 'xht'],\n 'application/xliff+xml': ['xlf'],\n 'application/xml': ['xml', 'xsl', 'xsd', 'rng'],\n 'application/xml-dtd': ['dtd'],\n 'application/xop+xml': ['xop'],\n 'application/xproc+xml': ['xpl'],\n 'application/xslt+xml': ['*xsl', 'xslt'],\n 'application/xspf+xml': ['xspf'],\n 'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'],\n 'application/yang': ['yang'],\n 'application/yin+xml': ['yin'],\n 'application/zip': ['zip'],\n 'application/zip+dotlottie': ['lottie'],\n 'audio/3gpp': ['*3gpp'],\n 'audio/aac': ['adts', 'aac'],\n 'audio/adpcm': ['adp'],\n 'audio/amr': ['amr'],\n 'audio/basic': ['au', 'snd'],\n 'audio/midi': ['mid', 'midi', 'kar', 'rmi'],\n 'audio/mobile-xmf': ['mxmf'],\n 'audio/mp3': ['*mp3'],\n 'audio/mp4': ['m4a', 'mp4a', 'm4b'],\n 'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'],\n 'audio/ogg': ['oga', 'ogg', 'spx', 'opus'],\n 'audio/s3m': ['s3m'],\n 'audio/silk': ['sil'],\n 'audio/wav': ['wav'],\n 'audio/wave': ['*wav'],\n 'audio/webm': ['weba'],\n 'audio/xm': ['xm'],\n 'font/collection': ['ttc'],\n 'font/otf': ['otf'],\n 'font/ttf': ['ttf'],\n 'font/woff': ['woff'],\n 'font/woff2': ['woff2'],\n 'image/aces': ['exr'],\n 'image/apng': ['apng'],\n 'image/avci': ['avci'],\n 'image/avcs': ['avcs'],\n 'image/avif': ['avif'],\n 'image/bmp': ['bmp', 'dib'],\n 'image/cgm': ['cgm'],\n 'image/dicom-rle': ['drle'],\n 'image/dpx': ['dpx'],\n 'image/emf': ['emf'],\n 'image/fits': ['fits'],\n 'image/g3fax': ['g3'],\n 'image/gif': ['gif'],\n 'image/heic': ['heic'],\n 'image/heic-sequence': ['heics'],\n 'image/heif': ['heif'],\n 'image/heif-sequence': ['heifs'],\n 'image/hej2k': ['hej2'],\n 'image/ief': ['ief'],\n 'image/jaii': ['jaii'],\n 'image/jais': ['jais'],\n 'image/jls': ['jls'],\n 'image/jp2': ['jp2', 'jpg2'],\n 'image/jpeg': ['jpg', 'jpeg', 'jpe'],\n 'image/jph': ['jph'],\n 'image/jphc': ['jhc'],\n 'image/jpm': ['jpm', 'jpgm'],\n 'image/jpx': ['jpx', 'jpf'],\n 'image/jxl': ['jxl'],\n 'image/jxr': ['jxr'],\n 'image/jxra': ['jxra'],\n 'image/jxrs': ['jxrs'],\n 'image/jxs': ['jxs'],\n 'image/jxsc': ['jxsc'],\n 'image/jxsi': ['jxsi'],\n 'image/jxss': ['jxss'],\n 'image/ktx': ['ktx'],\n 'image/ktx2': ['ktx2'],\n 'image/pjpeg': ['jfif'],\n 'image/png': ['png'],\n 'image/sgi': ['sgi'],\n 'image/svg+xml': ['svg', 'svgz'],\n 'image/t38': ['t38'],\n 'image/tiff': ['tif', 'tiff'],\n 'image/tiff-fx': ['tfx'],\n 'image/webp': ['webp'],\n 'image/wmf': ['wmf'],\n 'message/disposition-notification': ['disposition-notification'],\n 'message/global': ['u8msg'],\n 'message/global-delivery-status': ['u8dsn'],\n 'message/global-disposition-notification': ['u8mdn'],\n 'message/global-headers': ['u8hdr'],\n 'message/rfc822': ['eml', 'mime', 'mht', 'mhtml'],\n 'model/3mf': ['3mf'],\n 'model/gltf+json': ['gltf'],\n 'model/gltf-binary': ['glb'],\n 'model/iges': ['igs', 'iges'],\n 'model/jt': ['jt'],\n 'model/mesh': ['msh', 'mesh', 'silo'],\n 'model/mtl': ['mtl'],\n 'model/obj': ['obj'],\n 'model/prc': ['prc'],\n 'model/step': ['step', 'stp', 'stpnc', 'p21', '210'],\n 'model/step+xml': ['stpx'],\n 'model/step+zip': ['stpz'],\n 'model/step-xml+zip': ['stpxz'],\n 'model/stl': ['stl'],\n 'model/u3d': ['u3d'],\n 'model/vrml': ['wrl', 'vrml'],\n 'model/x3d+binary': ['*x3db', 'x3dbz'],\n 'model/x3d+fastinfoset': ['x3db'],\n 'model/x3d+vrml': ['*x3dv', 'x3dvz'],\n 'model/x3d+xml': ['x3d', 'x3dz'],\n 'model/x3d-vrml': ['x3dv'],\n 'text/cache-manifest': ['appcache', 'manifest'],\n 'text/calendar': ['ics', 'ifb'],\n 'text/coffeescript': ['coffee', 'litcoffee'],\n 'text/css': ['css'],\n 'text/csv': ['csv'],\n 'text/html': ['html', 'htm', 'shtml'],\n 'text/jade': ['jade'],\n 'text/javascript': ['js', 'mjs'],\n 'text/jsx': ['jsx'],\n 'text/less': ['less'],\n 'text/markdown': ['md', 'markdown'],\n 'text/mathml': ['mml'],\n 'text/mdx': ['mdx'],\n 'text/n3': ['n3'],\n 'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'],\n 'text/richtext': ['rtx'],\n 'text/rtf': ['*rtf'],\n 'text/sgml': ['sgml', 'sgm'],\n 'text/shex': ['shex'],\n 'text/slim': ['slim', 'slm'],\n 'text/spdx': ['spdx'],\n 'text/stylus': ['stylus', 'styl'],\n 'text/tab-separated-values': ['tsv'],\n 'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'],\n 'text/turtle': ['ttl'],\n 'text/uri-list': ['uri', 'uris', 'urls'],\n 'text/vcard': ['vcard'],\n 'text/vtt': ['vtt'],\n 'text/wgsl': ['wgsl'],\n 'text/xml': ['*xml'],\n 'text/yaml': ['yaml', 'yml'],\n 'video/3gpp': ['3gp', '3gpp'],\n 'video/3gpp2': ['3g2'],\n 'video/h261': ['h261'],\n 'video/h263': ['h263'],\n 'video/h264': ['h264'],\n 'video/iso.segment': ['m4s'],\n 'video/jpeg': ['jpgv'],\n 'video/jpm': ['*jpm', '*jpgm'],\n 'video/mj2': ['mj2', 'mjp2'],\n 'video/mp2t': ['ts', 'm2t', 'm2ts', 'mts'],\n 'video/mp4': ['mp4', 'mp4v', 'mpg4'],\n 'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'],\n 'video/ogg': ['ogv'],\n 'video/quicktime': ['qt', 'mov'],\n 'video/webm': ['webm'],\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map((ext) => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred)\n continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string')\n return null;\n const last = path.replace(/^.*[/\\\\]/s, '').toLowerCase();\n const ext = last.replace(/^.*\\./s, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath)\n return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string')\n return null;\n type = type?.split?.(';')[0];\n return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n }\n getAllExtensions(type) {\n if (typeof type !== 'string')\n return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes)._freeze();\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","import mime from \"mime/lite\";\nimport picomatch from \"picomatch/posix\";\n\nconst parseInputAccept = (inputAccept: string): [string[], string[]] => {\n const extensions: string[] = [];\n const mimeTypes: string[] = [];\n\n inputAccept\n .split(\",\")\n .map(mimeType => mimeType.trim())\n .filter(Boolean)\n .forEach(fileType => {\n if (fileType.startsWith(\".\")) {\n extensions.push(`*${fileType}`);\n } else {\n mimeTypes.push(fileType);\n }\n });\n\n return [extensions, mimeTypes];\n};\n\nclass AcceptedFileTypes {\n private extensions: string[];\n private mimeTypes: string[];\n\n constructor(inputAccept: string) {\n const [extensions, mimeTypes] = parseInputAccept(inputAccept);\n\n this.extensions = extensions;\n this.mimeTypes = mimeTypes;\n }\n\n public isAccepted(fileName: string): boolean {\n if (this.extensions.length === 0 && this.mimeTypes.length === 0) {\n return true;\n }\n return (\n this.isMimeTypeAccepted(mime.getType(fileName)) ||\n this.isExtensionAccepted(fileName)\n );\n }\n\n private isExtensionAccepted(fileName: string): boolean {\n if (this.extensions.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(fileName, this.extensions, { nocase: true });\n }\n\n private isMimeTypeAccepted(mimeType: null | string): boolean {\n if (!mimeType || this.mimeTypes.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(mimeType, this.mimeTypes);\n }\n}\n\nexport default AcceptedFileTypes;\n","import AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\n\nconst getEntriesFromDirectory = async (\n directoryEntry: FileSystemDirectoryEntry\n): Promise =>\n new Promise((resolve, reject) => {\n directoryEntry.createReader().readEntries(resolve, reject);\n });\n\nconst getFileFromFileSystemFileEntry = async (\n fileEntry: FileSystemFileEntry\n): Promise =>\n new Promise((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\nconst getFilesFromFileSystemEntries = async (\n entries: FileSystemEntry[]\n): Promise => {\n const result: File[] = [];\n\n for (const entry of entries) {\n const filesFromEntry = await getFilesFromFileSystemEntry(entry);\n filesFromEntry.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromFileSystemEntry = async (\n entry: FileSystemEntry\n): Promise => {\n const result: File[] = [];\n\n if (entry.isFile) {\n const file = await getFileFromFileSystemFileEntry(\n entry as FileSystemFileEntry\n );\n result.push(file);\n } else if (entry.isDirectory) {\n const entriesFromDirectory = await getEntriesFromDirectory(\n entry as FileSystemDirectoryEntry\n );\n const files = await getFilesFromFileSystemEntries(entriesFromDirectory);\n files.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromDataTransfer = async (\n dataTransfer: DataTransfer\n): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (dataTransfer.items) {\n const files: File[] = [];\n\n for (const item of dataTransfer.items) {\n const fileSystemEntry = item.webkitGetAsEntry();\n if (fileSystemEntry) {\n const filesFromEntry = await getFilesFromFileSystemEntry(\n fileSystemEntry\n );\n filesFromEntry.forEach(file => files.push(file));\n } else {\n const file = item.getAsFile();\n\n if (file) {\n files.push(file);\n }\n }\n }\n\n return files;\n } else {\n // backwards compatibility\n return [...dataTransfer.files];\n }\n};\n\nclass DropArea {\n acceptedFileTypes: AcceptedFileTypes;\n container: Element;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n\n constructor({\n container,\n inputAccept,\n onUploadFiles,\n renderer\n }: {\n container: Element;\n inputAccept: string;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n }) {\n this.container = container;\n this.onUploadFiles = onUploadFiles;\n this.acceptedFileTypes = new AcceptedFileTypes(inputAccept);\n this.renderer = renderer;\n\n container.addEventListener(\"dragenter\", () => {\n container.classList.add(\"dff-dropping\");\n });\n container.addEventListener(\"dragleave\", () => {\n container.classList.remove(\"dff-dropping\");\n });\n container.addEventListener(\"dragover\", e => {\n container.classList.add(\"dff-dropping\");\n e.preventDefault();\n });\n container.addEventListener(\"drop\", this.onDrop);\n }\n\n onDrop = (e: Event): void => {\n const dragEvent = e as DragEvent;\n this.container.classList.remove(\"dff-dropping\");\n dragEvent.preventDefault();\n dragEvent.stopPropagation();\n\n const uploadFiles = async (): Promise => {\n try {\n if (dragEvent.dataTransfer) {\n const files = await getFilesFromDataTransfer(dragEvent.dataTransfer);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.renderer.setErrorInvalidFiles(invalidFiles);\n void this.onUploadFiles(acceptedFiles);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n void uploadFiles();\n };\n}\n\nexport default DropArea;\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","export const formatBytes = (bytes: number, decimals: number): string => {\n if (bytes === 0) {\n return \"0 Bytes\";\n }\n\n const k = 1024;\n const dm = decimals <= 0 ? 0 : decimals || 2;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const n = parseFloat((bytes / k ** i).toFixed(dm));\n const size = sizes[i];\n\n if (size == null) {\n return \"\";\n } else {\n return `${n.toString()} ${size}`;\n }\n};\n\nexport const getInputNameWithPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? `${prefix}-${fieldName}` : fieldName);\n\nconst getInputNameWithoutPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? fieldName.slice(prefix.length + 1) : fieldName);\n\nexport const findInput = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): HTMLInputElement | null => {\n const inputNameWithPrefix = getInputNameWithPrefix(fieldName, prefix);\n const input = form.querySelector(`[name=\"${inputNameWithPrefix}\"]`);\n\n if (!input) {\n return null;\n }\n\n return input as HTMLInputElement;\n};\n\nexport const getUploadsFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-uploads`;\n\nexport const getInputValueForFormAndPrefix = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): string | undefined => findInput(form, fieldName, prefix)?.value;\n\nexport const getMetadataFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-metadata`;\n","import escape from \"escape-html\";\n\nimport { formatBytes } from \"./util.ts\";\n\nclass RenderUploadFile {\n container: Element;\n errors: Element;\n input: HTMLInputElement;\n translations: Record;\n\n constructor({\n input,\n parent,\n skipRequired,\n translations\n }: {\n input: HTMLInputElement;\n parent: Element;\n skipRequired: boolean;\n translations: Record;\n }) {\n this.container = this.createFilesContainer(parent);\n this.errors = this.createErrorContainer(parent);\n this.input = input;\n this.translations = translations;\n\n if (skipRequired) {\n this.input.required = false;\n }\n }\n\n public addNewUpload(filename: string, uploadIndex: number): HTMLElement {\n const div = this.addFile(filename, uploadIndex);\n\n const progressSpan = document.createElement(\"span\");\n progressSpan.className = \"dff-progress\";\n\n const innerSpan = document.createElement(\"span\");\n innerSpan.className = \"dff-progress-inner\";\n\n progressSpan.appendChild(innerSpan);\n div.appendChild(progressSpan);\n\n const cancelLink = document.createElement(\"a\");\n cancelLink.className = \"dff-cancel\";\n\n this.setTextContent(cancelLink, this.getTranslation(\"Cancel\"));\n cancelLink.setAttribute(\"data-index\", uploadIndex.toString());\n cancelLink.href = \"#\";\n div.appendChild(cancelLink);\n\n return div;\n }\n\n public addUploadedFile(\n filename: string,\n uploadIndex: number,\n filesize?: number\n ): HTMLElement {\n const element = this.addFile(filename, uploadIndex);\n this.setSuccess(uploadIndex, filesize);\n return element;\n }\n\n public clearInput(): void {\n const { input } = this;\n\n input.value = \"\";\n }\n\n public deleteFile(index: number): void {\n const div = this.findFileDiv(index);\n\n if (div) {\n div.remove();\n }\n }\n\n public disableCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.classList.add(\"dff-disabled\");\n }\n }\n\n public disableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.add(\"dff-disabled\");\n }\n }\n\n public findFileDiv(index: number): HTMLElement | null {\n return this.container.querySelector(`.dff-file-id-${index.toString()}`);\n }\n\n public removeDropHint(): void {\n const dropHint = this.container.querySelector(\".dff-drop-hint\");\n\n if (dropHint) {\n dropHint.remove();\n }\n }\n\n public renderDropHint(): void {\n if (this.container.querySelector(\".dff-drop-hint\")) {\n return;\n }\n\n const dropHint = document.createElement(\"div\");\n dropHint.className = \"dff-drop-hint\";\n this.setTextContent(dropHint, this.getTranslation(\"Drop your files here\"));\n\n this.container.appendChild(dropHint);\n }\n\n public setDeleteFailed(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Delete failed\"));\n\n this.enableDelete(index);\n }\n\n public setError(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Upload failed\"));\n\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-fail\");\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public setErrorInvalidFiles(files: File[]): void {\n const errorsMessages = document.createElement(\"ul\");\n\n for (const file of files) {\n const msg = document.createElement(\"li\");\n const invalidFileTypeMessage = this.getTranslation(\"Invalid file type\");\n this.setTextContent(msg, `${file.name}: ${invalidFileTypeMessage}`);\n msg.className = \"dff-error\";\n errorsMessages.appendChild(msg);\n }\n\n this.errors.replaceChildren(errorsMessages);\n this.clearInput();\n }\n\n public setSuccess(index: number, size?: number): void {\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-success\");\n\n if (size != null) {\n const fileSizeInfo = document.createElement(\"span\");\n this.setTextContent(fileSizeInfo, formatBytes(size, 2));\n fileSizeInfo.className = \"dff-filesize\";\n\n el.appendChild(fileSizeInfo);\n }\n\n const deleteLink = document.createElement(\"a\");\n this.setTextContent(deleteLink, this.getTranslation(\"Delete\"));\n deleteLink.className = \"dff-delete\";\n deleteLink.setAttribute(\"data-index\", index.toString());\n deleteLink.href = \"#\";\n\n el.appendChild(deleteLink);\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public updateProgress(index: number, percentage: string): void {\n const el = this.container.querySelector(`.dff-file-id-${index.toString()}`);\n if (el) {\n const innerProgressSpan = el.querySelector(\".dff-progress-inner\");\n\n if (innerProgressSpan) {\n (innerProgressSpan as HTMLElement).style.width = `${percentage}%`;\n }\n }\n }\n\n private addFile(filename: string, uploadIndex: number): HTMLElement {\n const div = document.createElement(\"div\");\n div.className = `dff-file dff-file-id-${uploadIndex.toString()}`;\n\n const nameSpan = document.createElement(\"span\");\n nameSpan.innerHTML = escape(filename);\n nameSpan.className = \"dff-filename\";\n nameSpan.setAttribute(\"data-index\", uploadIndex.toString());\n\n div.appendChild(nameSpan);\n this.container.appendChild(div);\n\n this.input.required = false;\n return div;\n }\n\n private createErrorContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-invalid-files\";\n parent.appendChild(div);\n return div;\n };\n\n private createFilesContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-files\";\n parent.appendChild(div);\n\n return div;\n };\n\n private enableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.remove(\"dff-disabled\");\n }\n }\n\n private findCancelSpan(index: number): HTMLElement | null {\n const el = this.findFileDiv(index);\n\n if (!el) {\n return null;\n }\n\n return el.querySelector(\".dff-cancel\");\n }\n\n private findDeleteLink(index: number): HTMLElement | null {\n const div = this.findFileDiv(index);\n if (!div) {\n return div;\n }\n\n return div.querySelector(\".dff-delete\");\n }\n\n private getTranslation(key: string) {\n return this.translations[key] ?? key;\n }\n\n private removeCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.remove();\n }\n }\n\n private removeProgress(index: number): void {\n const el = this.findFileDiv(index);\n\n if (el) {\n const progressSpan = el.querySelector(\".dff-progress\");\n\n if (progressSpan) {\n progressSpan.remove();\n }\n }\n }\n\n private setErrorMessage(index: number, message: string): void {\n const el = this.findFileDiv(index);\n if (!el) {\n return;\n }\n\n const originalMessageSpan = el.querySelector(\".dff-error\");\n if (originalMessageSpan) {\n originalMessageSpan.remove();\n }\n\n const span = document.createElement(\"span\");\n span.classList.add(\"dff-error\");\n this.setTextContent(span, message);\n\n el.appendChild(span);\n }\n\n private setTextContent(element: HTMLElement, text: string) {\n element.append(document.createTextNode(text));\n }\n}\n\nexport default RenderUploadFile;\n","export interface InitialExistingFile {\n name: string;\n size: number;\n type: \"existing\";\n}\nexport type InitialFile =\n | InitialExistingFile\n | InitialPlaceholderFile\n | InitialS3File\n | InitialTusFile;\n\nexport interface InitialPlaceholderFile {\n id: string;\n name: string;\n size: number;\n type: \"placeholder\";\n}\n\nexport interface InitialS3File {\n id: string;\n name: string;\n original_name: string;\n size: number;\n type: \"s3\";\n}\n\nexport interface InitialTusFile {\n id: string;\n name: string;\n size: number;\n type: \"tus\";\n url: string;\n}\n\nexport type UploadType =\n | \"existing\"\n | \"placeholder\"\n | \"s3\"\n | \"tus\"\n | \"uploadedS3\"\n | \"uploadedTus\";\n\ninterface UploadParameters {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n}\n\ntype UploadStatus = \"done\" | \"error\" | \"uploading\";\n\nabstract class BaseUpload {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n\n constructor({ name, status, type, uploadIndex }: UploadParameters) {\n this.name = name;\n this.status = status;\n this.type = type;\n this.uploadIndex = uploadIndex;\n }\n\n public async abort(): Promise {\n //\n }\n public async delete(): Promise {\n //\n }\n\n public abstract getId(): string | undefined;\n public abstract getInitialFile(): InitialFile;\n public abstract getSize(): number | undefined;\n}\n\nexport default BaseUpload;\n","function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n}\n\nexport default function urlJoin() {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n}\n","import urljoin from \"url-join\";\n\nexport interface LocationInfo {\n location: string;\n}\n\nexport interface MultipartUpload {\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport interface Part {\n ETag: string;\n PartNumber: number;\n}\n\nexport interface UrlInfo {\n url: string;\n}\n\nexport const MB = 1024 * 1024;\n\ninterface AbortMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport const abortMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n uploadId\n}: AbortMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, `?key=${filename}`);\n return fetch(url, {\n headers: headers,\n method: \"delete\"\n }).then(response => {\n return response.json();\n });\n};\n\ninterface CompleteMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n parts: Part[];\n uploadId: string;\n}\n\nexport const completeMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n parts,\n uploadId\n}: CompleteMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, \"complete\", `?key=${filename}`);\n return fetch(url, {\n body: JSON.stringify({\n parts: parts\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as LocationInfo;\n });\n};\n\ninterface CreateMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n}\n\nexport const createMultipartUpload = ({\n csrfToken,\n endpoint,\n file,\n s3UploadDir\n}: CreateMultipartUploadParameters): Promise => {\n const headers = new Headers({\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n \"X-CSRFToken\": csrfToken\n });\n return fetch(endpoint, {\n body: JSON.stringify({\n contentType: file.type,\n filename: file.name,\n s3UploadDir: s3UploadDir\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as MultipartUpload;\n });\n};\n\nexport const getChunkSize = (file: File): number =>\n Math.ceil(file.size / 10000);\n\ninterface PrepareUploadPartParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n number: number;\n uploadId: string;\n}\n\nexport const prepareUploadPart = ({\n csrfToken,\n endpoint,\n key,\n number,\n uploadId\n}: PrepareUploadPartParameters): Promise => {\n const filename = encodeURIComponent(key);\n const headers = new Headers({ \"X-CSRFToken\": csrfToken });\n const url = urljoin(\n endpoint,\n uploadId,\n number.toString(),\n `?key=${filename}`\n );\n return fetch(url, {\n headers: headers,\n method: \"get\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as UrlInfo;\n });\n};\n\nexport const remove = (arr: unknown[], el: unknown): void => {\n const i = arr.indexOf(el);\n if (i !== -1) {\n arr.splice(i, 1);\n }\n};\n","// The following code is adapted from https://github.com/transloadit/uppy/blob/master/packages/%40uppy/aws-s3-multipart/src/MultipartUploader.js\n// which is released under a MIT License (https://github.com/transloadit/uppy/blob/master/LICENSE)\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport {\n abortMultipartUpload,\n completeMultipartUpload,\n createMultipartUpload,\n getChunkSize,\n MB,\n MultipartUpload,\n Part,\n prepareUploadPart,\n remove,\n UrlInfo\n} from \"./s3_utils.ts\";\n\ninterface ChunkState {\n busy: boolean;\n done: boolean;\n etag?: string;\n uploaded: number;\n}\n\ninterface S3UploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n uploadIndex: number;\n}\n\nclass S3Upload extends BaseUpload {\n public onError?: (error: unknown) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n\n private chunks: Blob[];\n private chunkState: ChunkState[];\n private createdPromise: Promise;\n private csrfToken: string;\n private endpoint: string;\n private file: File;\n private key: null | string;\n private parts: Part[];\n private s3UploadDir: string;\n private uploadId: null | string;\n private uploading: XMLHttpRequest[];\n\n constructor({\n csrfToken,\n endpoint,\n file,\n s3UploadDir,\n uploadIndex\n }: S3UploadParameters) {\n super({ name: file.name, status: \"uploading\", type: \"s3\", uploadIndex });\n\n this.csrfToken = csrfToken;\n this.endpoint = endpoint;\n this.file = file;\n this.s3UploadDir = s3UploadDir;\n\n this.key = null;\n this.uploadId = null;\n this.parts = [];\n\n // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n // upload was created already. That also ensures that the sequencing is right\n // (so the `OP` definitely happens if the upload is created).\n //\n // This mostly exists to make `abortUpload` work well: only sending the abort request if\n // the upload was already created, and if the createMultipartUpload request is still in flight,\n // aborting it immediately after it finishes.\n this.createdPromise = Promise.reject(new Error());\n this.chunks = [];\n this.chunkState = [];\n this.uploading = [];\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n\n this.initChunks();\n\n this.createdPromise.catch(() => ({})); // silence uncaught rejection warning\n }\n\n public async abort(): Promise {\n this.uploading.slice().forEach(xhr => {\n xhr.abort();\n });\n this.uploading = [];\n\n await this.createdPromise;\n\n if (this.key && this.uploadId) {\n await abortMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n uploadId: this.uploadId\n });\n }\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getId(): string | undefined {\n return this.uploadId ?? undefined;\n }\n\n public getInitialFile(): InitialFile {\n return {\n id: this.uploadId ?? \"\",\n name: this.key ?? \"\",\n original_name: this.file.name,\n size: this.file.size,\n type: \"s3\"\n };\n }\n\n public getSize(): number {\n return this.file.size;\n }\n\n public start(): void {\n void this.createUpload();\n }\n\n private completeUpload(): Promise {\n // Parts may not have completed uploading in sorted order, if limit > 1.\n this.parts.sort((a, b) => a.PartNumber - b.PartNumber);\n\n if (!this.uploadId || !this.key) {\n return Promise.resolve();\n }\n\n return completeMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n parts: this.parts,\n uploadId: this.uploadId\n }).then(\n () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n },\n (err: unknown) => {\n this.handleError(err as Error);\n }\n );\n }\n\n private createUpload(): Promise {\n this.createdPromise = createMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n file: this.file,\n s3UploadDir: this.s3UploadDir\n });\n return this.createdPromise\n .then((result: MultipartUpload | null) => {\n const valid =\n typeof result === \"object\" &&\n result &&\n typeof result.uploadId === \"string\" &&\n typeof result.key === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.\"\n );\n }\n\n this.key = result.key;\n this.uploadId = result.uploadId;\n\n this.uploadParts();\n })\n .catch((err: unknown) => {\n this.handleError(err);\n });\n }\n\n private handleError(error: unknown): void {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n }\n\n private initChunks(): void {\n const chunks: Blob[] = [];\n const desiredChunkSize = getChunkSize(this.file);\n // at least 5MB per request, at most 10k requests\n const minChunkSize = Math.max(5 * MB, Math.ceil(this.file.size / 10000));\n const chunkSize = Math.max(desiredChunkSize, minChunkSize);\n\n for (let i = 0; i < this.file.size; i += chunkSize) {\n const end = Math.min(this.file.size, i + chunkSize);\n chunks.push(this.file.slice(i, end));\n }\n\n this.chunks = chunks;\n this.chunkState = chunks.map(() => ({\n busy: false,\n done: false,\n uploaded: 0\n }));\n }\n\n private onPartComplete(index: number, etag: string): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.etag = etag;\n state.done = true;\n }\n\n const part = {\n ETag: etag,\n PartNumber: index + 1\n };\n this.parts.push(part);\n\n this.uploadParts();\n }\n\n private onPartProgress(index: number, sent: number): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.uploaded = sent;\n }\n\n if (this.onProgress) {\n const totalUploaded = this.chunkState.reduce((n, c) => n + c.uploaded, 0);\n this.onProgress(totalUploaded, this.file.size);\n }\n }\n\n private uploadPart(index: number): Promise {\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = true;\n }\n\n if (!this.key || !this.uploadId) {\n return Promise.resolve();\n }\n\n return prepareUploadPart({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n number: index + 1,\n uploadId: this.uploadId\n })\n .then(result => {\n const valid =\n typeof result === \"object\" && typeof result.url === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.\"\n );\n }\n return result;\n })\n .then(\n ({ url }: UrlInfo) => {\n this.uploadPartBytes(index, url);\n },\n (err: unknown) => {\n this.handleError(err);\n }\n );\n }\n\n private uploadPartBytes(index: number, url: string): void {\n const body = this.chunks[index];\n const xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", url, true);\n xhr.responseType = \"text\";\n\n this.uploading.push(xhr);\n\n xhr.upload.addEventListener(\"progress\", ev => {\n if (!ev.lengthComputable) {\n return;\n }\n\n this.onPartProgress(index, ev.loaded);\n });\n\n xhr.addEventListener(\"abort\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n if (xhr.status < 200 || xhr.status >= 300) {\n this.handleError(new Error(\"Non 2xx\"));\n return;\n }\n\n this.onPartProgress(index, body?.size ?? 0);\n\n // NOTE This must be allowed by CORS.\n const etag = xhr.getResponseHeader(\"ETag\");\n if (etag === null) {\n this.handleError(\n new Error(\n \"AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.\"\n )\n );\n return;\n }\n\n this.onPartComplete(index, etag);\n });\n\n xhr.addEventListener(\"error\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n const error = new Error(\"Unknown error\");\n this.handleError(error);\n });\n xhr.send(body);\n }\n\n private uploadParts(): void {\n const need = 1 - this.uploading.length;\n if (need === 0) {\n return;\n }\n\n // All parts are uploaded.\n if (this.chunkState.every(state => state.done)) {\n void this.completeUpload();\n return;\n }\n\n const candidates = [];\n for (let i = 0; i < this.chunkState.length; i++) {\n const state = this.chunkState[i];\n\n if (!state || state.done || state.busy) {\n continue;\n }\n\n candidates.push(i);\n if (candidates.length >= need) {\n break;\n }\n }\n\n candidates.forEach(index => {\n void this.uploadPart(index);\n });\n }\n}\n\nexport default S3Upload;\n","class DetailedError extends Error {\n constructor(message, causingErr = null, req = null, res = null) {\n super(message)\n\n this.originalRequest = req\n this.originalResponse = res\n this.causingError = causingErr\n\n if (causingErr != null) {\n message += `, caused by ${causingErr.toString()}`\n }\n\n if (req != null) {\n const requestId = req.getHeader('X-Request-ID') || 'n/a'\n const method = req.getMethod()\n const url = req.getURL()\n const status = res ? res.getStatus() : 'n/a'\n const body = res ? res.getBody() || '' : 'n/a'\n message += `, originated from request (method: ${method}, url: ${url}, response code: ${status}, response text: ${body}, request id: ${requestId})`\n }\n this.message = message\n }\n}\n\nexport default DetailedError\n","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.7';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, bin = '', r1, r2;\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n }\n return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","import { Base64 } from 'js-base64'\nimport URL from 'url-parse'\nimport DetailedError from './error.js'\nimport { log } from './logger.js'\nimport uuid from './uuid.js'\n\nconst PROTOCOL_TUS_V1 = 'tus-v1'\nconst PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03'\nconst PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05'\n\nconst defaultOptions = {\n endpoint: null,\n\n uploadUrl: null,\n metadata: {},\n metadataForPartialUploads: {},\n fingerprint: null,\n uploadSize: null,\n\n onProgress: null,\n onChunkComplete: null,\n onSuccess: null,\n onError: null,\n onUploadUrlAvailable: null,\n\n overridePatchMethod: false,\n headers: {},\n addRequestId: false,\n onBeforeRequest: null,\n onAfterResponse: null,\n onShouldRetry: defaultOnShouldRetry,\n\n chunkSize: Number.POSITIVE_INFINITY,\n retryDelays: [0, 1000, 3000, 5000],\n parallelUploads: 1,\n parallelUploadBoundaries: null,\n storeFingerprintForResuming: true,\n removeFingerprintOnSuccess: false,\n uploadLengthDeferred: false,\n uploadDataDuringCreation: false,\n\n urlStorage: null,\n fileReader: null,\n httpStack: null,\n\n protocol: PROTOCOL_TUS_V1,\n}\n\nclass BaseUpload {\n constructor(file, options) {\n // Warn about removed options from previous versions\n if ('resume' in options) {\n console.log(\n 'tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.',\n )\n }\n\n // The default options will already be added from the wrapper classes.\n this.options = options\n\n // Cast chunkSize to integer\n this.options.chunkSize = Number(this.options.chunkSize)\n\n // The storage module used to store URLs\n this._urlStorage = this.options.urlStorage\n\n // The underlying File/Blob object\n this.file = file\n\n // The URL against which the file will be uploaded\n this.url = null\n\n // The underlying request object for the current PATCH request\n this._req = null\n\n // The fingerpinrt for the current file (set after start())\n this._fingerprint = null\n\n // The key that the URL storage returned when saving an URL with a fingerprint,\n this._urlStorageKey = null\n\n // The offset used in the current PATCH request\n this._offset = null\n\n // True if the current PATCH request has been aborted\n this._aborted = false\n\n // The file's size in bytes\n this._size = null\n\n // The Source object which will wrap around the given file and provides us\n // with a unified interface for getting its size and slice chunks from its\n // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n this._source = null\n\n // The current count of attempts which have been made. Zero indicates none.\n this._retryAttempt = 0\n\n // The timeout's ID which is used to delay the next retry\n this._retryTimeout = null\n\n // The offset of the remote upload before the latest attempt was started.\n this._offsetBeforeRetry = 0\n\n // An array of BaseUpload instances which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploads = null\n\n // An array of upload URLs which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploadUrls = null\n }\n\n /**\n * Use the Termination extension to delete an upload from the server by sending a DELETE\n * request to the specified upload URL. This is only possible if the server supports the\n * Termination extension. If the `options.retryDelays` property is set, the method will\n * also retry if an error ocurrs.\n *\n * @param {String} url The upload's URL which will be terminated.\n * @param {object} options Optional options for influencing HTTP requests.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n static terminate(url, options = {}) {\n const req = openRequest('DELETE', url, options)\n\n return sendRequest(req, null, options)\n .then((res) => {\n // A 204 response indicates a successfull request\n if (res.getStatus() === 204) {\n return\n }\n\n throw new DetailedError('tus: unexpected response while terminating upload', null, req, res)\n })\n .catch((err) => {\n if (!(err instanceof DetailedError)) {\n err = new DetailedError('tus: failed to terminate upload', err, req, null)\n }\n\n if (!shouldRetry(err, 0, options)) {\n throw err\n }\n\n // Instead of keeping track of the retry attempts, we remove the first element from the delays\n // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n // We recursively call the terminate function will removing elements from the retryDelays array.\n const delay = options.retryDelays[0]\n const remainingDelays = options.retryDelays.slice(1)\n const newOptions = {\n ...options,\n retryDelays: remainingDelays,\n }\n return new Promise((resolve) => setTimeout(resolve, delay)).then(() =>\n BaseUpload.terminate(url, newOptions),\n )\n })\n }\n\n findPreviousUploads() {\n return this.options\n .fingerprint(this.file, this.options)\n .then((fingerprint) => this._urlStorage.findUploadsByFingerprint(fingerprint))\n }\n\n resumeFromPreviousUpload(previousUpload) {\n this.url = previousUpload.uploadUrl || null\n this._parallelUploadUrls = previousUpload.parallelUploadUrls || null\n this._urlStorageKey = previousUpload.urlStorageKey\n }\n\n start() {\n const { file } = this\n\n if (!file) {\n this._emitError(new Error('tus: no file or stream to upload provided'))\n return\n }\n\n if (\n ![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(\n this.options.protocol,\n )\n ) {\n this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`))\n return\n }\n\n if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'))\n return\n }\n\n const { retryDelays } = this.options\n if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'))\n return\n }\n\n if (this.options.parallelUploads > 1) {\n // Test which options are incompatible with parallel uploads.\n for (const optionName of ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']) {\n if (this.options[optionName]) {\n this._emitError(\n new Error(`tus: cannot use the ${optionName} option when parallelUploads is enabled`),\n )\n return\n }\n }\n }\n\n if (this.options.parallelUploadBoundaries) {\n if (this.options.parallelUploads <= 1) {\n this._emitError(\n new Error(\n 'tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled',\n ),\n )\n return\n }\n if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n this._emitError(\n new Error(\n 'tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`',\n ),\n )\n return\n }\n }\n\n this.options\n .fingerprint(file, this.options)\n .then((fingerprint) => {\n if (fingerprint == null) {\n log(\n 'No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.',\n )\n } else {\n log(`Calculated fingerprint: ${fingerprint}`)\n }\n\n this._fingerprint = fingerprint\n\n if (this._source) {\n return this._source\n }\n return this.options.fileReader.openFile(file, this.options.chunkSize)\n })\n .then((source) => {\n this._source = source\n\n // First, we look at the uploadLengthDeferred option.\n // Next, we check if the caller has supplied a manual upload size.\n // Finally, we try to use the calculated size from the source object.\n if (this.options.uploadLengthDeferred) {\n this._size = null\n } else if (this.options.uploadSize != null) {\n this._size = Number(this.options.uploadSize)\n if (Number.isNaN(this._size)) {\n this._emitError(new Error('tus: cannot convert `uploadSize` option into a number'))\n return\n }\n } else {\n this._size = this._source.size\n if (this._size == null) {\n this._emitError(\n new Error(\n \"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\",\n ),\n )\n return\n }\n }\n\n // If the upload was configured to use multiple requests or if we resume from\n // an upload which used multiple requests, we start a parallel upload.\n if (this.options.parallelUploads > 1 || this._parallelUploadUrls != null) {\n this._startParallelUpload()\n } else {\n this._startSingleUpload()\n }\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a parallelized upload, where one file is split into\n * multiple request which are run in parallel.\n *\n * @api private\n */\n _startParallelUpload() {\n const totalSize = this._size\n let totalProgress = 0\n this._parallelUploads = []\n\n const partCount =\n this._parallelUploadUrls != null\n ? this._parallelUploadUrls.length\n : this.options.parallelUploads\n\n // The input file will be split into multiple slices which are uploaded in separate\n // requests. Here we get the start and end position for the slices.\n const parts =\n this.options.parallelUploadBoundaries ?? splitSizeIntoParts(this._source.size, partCount)\n\n // Attach URLs from previous uploads, if available.\n if (this._parallelUploadUrls) {\n parts.forEach((part, index) => {\n part.uploadUrl = this._parallelUploadUrls[index] || null\n })\n }\n\n // Create an empty list for storing the upload URLs\n this._parallelUploadUrls = new Array(parts.length)\n\n // Generate a promise for each slice that will be resolve if the respective\n // upload is completed.\n const uploads = parts.map((part, index) => {\n let lastPartProgress = 0\n\n return this._source.slice(part.start, part.end).then(\n ({ value }) =>\n new Promise((resolve, reject) => {\n // Merge with the user supplied options but overwrite some values.\n const options = {\n ...this.options,\n // If available, the partial upload should be resumed from a previous URL.\n uploadUrl: part.uploadUrl || null,\n // We take manually care of resuming for partial uploads, so they should\n // not be stored in the URL storage.\n storeFingerprintForResuming: false,\n removeFingerprintOnSuccess: false,\n // Reset the parallelUploads option to not cause recursion.\n parallelUploads: 1,\n // Reset this option as we are not doing a parallel upload.\n parallelUploadBoundaries: null,\n metadata: this.options.metadataForPartialUploads,\n // Add the header to indicate the this is a partial upload.\n headers: {\n ...this.options.headers,\n 'Upload-Concat': 'partial',\n },\n // Reject or resolve the promise if the upload errors or completes.\n onSuccess: resolve,\n onError: reject,\n // Based in the progress for this partial upload, calculate the progress\n // for the entire final upload.\n onProgress: (newPartProgress) => {\n totalProgress = totalProgress - lastPartProgress + newPartProgress\n lastPartProgress = newPartProgress\n this._emitProgress(totalProgress, totalSize)\n },\n // Wait until every partial upload has an upload URL, so we can add\n // them to the URL storage.\n onUploadUrlAvailable: () => {\n this._parallelUploadUrls[index] = upload.url\n // Test if all uploads have received an URL\n if (this._parallelUploadUrls.filter((u) => Boolean(u)).length === parts.length) {\n this._saveUploadInUrlStorage()\n }\n },\n }\n\n const upload = new BaseUpload(value, options)\n upload.start()\n\n // Store the upload in an array, so we can later abort them if necessary.\n this._parallelUploads.push(upload)\n }),\n )\n })\n\n let req\n // Wait until all partial uploads are finished and we can send the POST request for\n // creating the final upload.\n Promise.all(uploads)\n .then(() => {\n req = this._openRequest('POST', this.options.endpoint)\n req.setHeader('Upload-Concat', `final;${this._parallelUploadUrls.join(' ')}`)\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n return this._sendRequest(req, null)\n })\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n this._emitSuccess(res)\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n * uploaded in a sequential matter.\n *\n * @api private\n */\n _startSingleUpload() {\n // Reset the aborted flag when the upload is started or else the\n // _performUpload will stop before sending a request if the upload has been\n // aborted previously.\n this._aborted = false\n\n // The upload had been started previously and we should reuse this URL.\n if (this.url != null) {\n log(`Resuming upload from previous URL: ${this.url}`)\n this._resumeUpload()\n return\n }\n\n // A URL has manually been specified, so we try to resume\n if (this.options.uploadUrl != null) {\n log(`Resuming upload from provided URL: ${this.options.uploadUrl}`)\n this.url = this.options.uploadUrl\n this._resumeUpload()\n return\n }\n\n // An upload has not started for the file yet, so we start a new one\n log('Creating a new upload')\n this._createUpload()\n }\n\n /**\n * Abort any running request and stop the current upload. After abort is called, no event\n * handler will be invoked anymore. You can use the `start` method to resume the upload\n * again.\n * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n * current upload from the server.\n *\n * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n abort(shouldTerminate) {\n // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n if (this._parallelUploads != null) {\n for (const upload of this._parallelUploads) {\n upload.abort(shouldTerminate)\n }\n }\n\n // Stop any current running request.\n if (this._req !== null) {\n this._req.abort()\n // Note: We do not close the file source here, so the user can resume in the future.\n }\n this._aborted = true\n\n // Stop any timeout used for initiating a retry.\n if (this._retryTimeout != null) {\n clearTimeout(this._retryTimeout)\n this._retryTimeout = null\n }\n\n if (!shouldTerminate || this.url == null) {\n return Promise.resolve()\n }\n\n return (\n BaseUpload.terminate(this.url, this.options)\n // Remove entry from the URL storage since the upload URL is no longer valid.\n .then(() => this._removeFromUrlStorage())\n )\n }\n\n _emitHttpError(req, res, message, causingErr) {\n this._emitError(new DetailedError(message, causingErr, req, res))\n }\n\n _emitError(err) {\n // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n if (this._aborted) return\n\n // Check if we should retry, when enabled, before sending the error to the user.\n if (this.options.retryDelays != null) {\n // We will reset the attempt counter if\n // - we were already able to connect to the server (offset != null) and\n // - we were able to upload a small chunk of data to the server\n const shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry\n if (shouldResetDelays) {\n this._retryAttempt = 0\n }\n\n if (shouldRetry(err, this._retryAttempt, this.options)) {\n const delay = this.options.retryDelays[this._retryAttempt++]\n\n this._offsetBeforeRetry = this._offset\n\n this._retryTimeout = setTimeout(() => {\n this.start()\n }, delay)\n return\n }\n }\n\n if (typeof this.options.onError === 'function') {\n this.options.onError(err)\n } else {\n throw err\n }\n }\n\n /**\n * Publishes notification if the upload has been successfully completed.\n *\n * @param {object} lastResponse Last HTTP response.\n * @api private\n */\n _emitSuccess(lastResponse) {\n if (this.options.removeFingerprintOnSuccess) {\n // Remove stored fingerprint and corresponding endpoint. This causes\n // new uploads of the same file to be treated as a different file.\n this._removeFromUrlStorage()\n }\n\n if (typeof this.options.onSuccess === 'function') {\n this.options.onSuccess({ lastResponse })\n }\n }\n\n /**\n * Publishes notification when data has been sent to the server. This\n * data may not have been accepted by the server yet.\n *\n * @param {number} bytesSent Number of bytes sent to the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitProgress(bytesSent, bytesTotal) {\n if (typeof this.options.onProgress === 'function') {\n this.options.onProgress(bytesSent, bytesTotal)\n }\n }\n\n /**\n * Publishes notification when a chunk of data has been sent to the server\n * and accepted by the server.\n * @param {number} chunkSize Size of the chunk that was accepted by the server.\n * @param {number} bytesAccepted Total number of bytes that have been\n * accepted by the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n if (typeof this.options.onChunkComplete === 'function') {\n this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal)\n }\n }\n\n /**\n * Create a new upload using the creation extension by sending a POST\n * request to the endpoint. After successful creation the file will be\n * uploaded\n *\n * @api private\n */\n _createUpload() {\n if (!this.options.endpoint) {\n this._emitError(new Error('tus: unable to create upload because no endpoint is provided'))\n return\n }\n\n const req = this._openRequest('POST', this.options.endpoint)\n\n if (this.options.uploadLengthDeferred) {\n req.setHeader('Upload-Defer-Length', '1')\n } else {\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n let promise\n if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n this._offset = 0\n promise = this._addChunkToRequest(req)\n } else {\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', '?0')\n }\n promise = this._sendRequest(req, null)\n }\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n if (this._size === 0) {\n // Nothing to upload and file was successfully created\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._saveUploadInUrlStorage().then(() => {\n if (this.options.uploadDataDuringCreation) {\n this._handleUploadResponse(req, res)\n } else {\n this._offset = 0\n this._performUpload()\n }\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to create upload', err)\n })\n }\n\n /*\n * Try to resume an existing upload. First a HEAD request will be sent\n * to retrieve the offset. If the request fails a new upload will be\n * created. In the case of a successful response the file will be uploaded.\n *\n * @api private\n */\n _resumeUpload() {\n const req = this._openRequest('HEAD', this.url)\n const promise = this._sendRequest(req, null)\n\n promise\n .then((res) => {\n const status = res.getStatus()\n if (!inStatusCategory(status, 200)) {\n // If the upload is locked (indicated by the 423 Locked status code), we\n // emit an error instead of directly starting a new upload. This way the\n // retry logic can catch the error and will retry the upload. An upload\n // is usually locked for a short period of time and will be available\n // afterwards.\n if (status === 423) {\n this._emitHttpError(req, res, 'tus: upload is currently locked; retry later')\n return\n }\n\n if (inStatusCategory(status, 400)) {\n // Remove stored fingerprint and corresponding endpoint,\n // on client errors since the file can not be found\n this._removeFromUrlStorage()\n }\n\n if (!this.options.endpoint) {\n // Don't attempt to create a new upload if no endpoint is provided.\n this._emitHttpError(\n req,\n res,\n 'tus: unable to resume upload (new upload cannot be created without an endpoint)',\n )\n return\n }\n\n // Try to create a new upload\n this.url = null\n this._createUpload()\n return\n }\n\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n const length = Number.parseInt(res.getHeader('Upload-Length'), 10)\n if (\n Number.isNaN(length) &&\n !this.options.uploadLengthDeferred &&\n this.options.protocol === PROTOCOL_TUS_V1\n ) {\n this._emitHttpError(req, res, 'tus: invalid or missing length value')\n return\n }\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n this._saveUploadInUrlStorage().then(() => {\n // Upload has already been completed and we do not need to send additional\n // data to the server\n if (offset === length) {\n this._emitProgress(length, length)\n this._emitSuccess(res)\n return\n }\n\n this._offset = offset\n this._performUpload()\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to resume upload', err)\n })\n }\n\n /**\n * Start uploading the file using PATCH requests. The file will be divided\n * into chunks as specified in the chunkSize option. During the upload\n * the onProgress event handler may be invoked multiple times.\n *\n * @api private\n */\n _performUpload() {\n // If the upload has been aborted, we will not send the next PATCH request.\n // This is important if the abort method was called during a callback, such\n // as onChunkComplete or onProgress.\n if (this._aborted) {\n return\n }\n\n let req\n\n // Some browser and servers may not support the PATCH method. For those\n // cases, you can tell tus-js-client to use a POST request with the\n // X-HTTP-Method-Override header for simulating a PATCH request.\n if (this.options.overridePatchMethod) {\n req = this._openRequest('POST', this.url)\n req.setHeader('X-HTTP-Method-Override', 'PATCH')\n } else {\n req = this._openRequest('PATCH', this.url)\n }\n\n req.setHeader('Upload-Offset', `${this._offset}`)\n const promise = this._addChunkToRequest(req)\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while uploading chunk')\n return\n }\n\n this._handleUploadResponse(req, res)\n })\n .catch((err) => {\n // Don't emit an error if the upload was aborted manually\n if (this._aborted) {\n return\n }\n\n this._emitHttpError(req, null, `tus: failed to upload chunk at offset ${this._offset}`, err)\n })\n }\n\n /**\n * _addChunktoRequest reads a chunk from the source and sends it using the\n * supplied request object. It will not handle the response.\n *\n * @api private\n */\n _addChunkToRequest(req) {\n const start = this._offset\n let end = this._offset + this.options.chunkSize\n\n req.setProgressHandler((bytesSent) => {\n this._emitProgress(start + bytesSent, this._size)\n })\n\n if (this.options.protocol === PROTOCOL_TUS_V1) {\n req.setHeader('Content-Type', 'application/offset+octet-stream')\n } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Content-Type', 'application/partial-upload')\n }\n\n // The specified chunkSize may be Infinity or the calcluated end position\n // may exceed the file's size. In both cases, we limit the end position to\n // the input's total size for simpler calculations and correctness.\n if (\n (end === Number.POSITIVE_INFINITY || end > this._size) &&\n !this.options.uploadLengthDeferred\n ) {\n end = this._size\n }\n\n return this._source.slice(start, end).then(({ value, done }) => {\n const valueSize = value?.size ? value.size : 0\n\n // If the upload length is deferred, the upload size was not specified during\n // upload creation. So, if the file reader is done reading, we know the total\n // upload size and can tell the tus server.\n if (this.options.uploadLengthDeferred && done) {\n this._size = this._offset + valueSize\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // The specified uploadSize might not match the actual amount of data that a source\n // provides. In these cases, we cannot successfully complete the upload, so we\n // rather error out and let the user know. If not, tus-js-client will be stuck\n // in a loop of repeating empty PATCH requests.\n // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n const newSize = this._offset + valueSize\n if (!this.options.uploadLengthDeferred && done && newSize !== this._size) {\n return Promise.reject(\n new Error(\n `upload was configured with a size of ${this._size} bytes, but the source is done after ${newSize} bytes`,\n ),\n )\n }\n\n if (value === null) {\n return this._sendRequest(req)\n }\n\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', done ? '?1' : '?0')\n }\n this._emitProgress(this._offset, this._size)\n return this._sendRequest(req, value)\n })\n }\n\n /**\n * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n * and already have received a response.\n *\n * @api private\n */\n _handleUploadResponse(req, res) {\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n this._emitProgress(offset, this._size)\n this._emitChunkComplete(offset - this._offset, offset, this._size)\n\n this._offset = offset\n\n if (offset === this._size) {\n // Yay, finally done :)\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._performUpload()\n }\n\n /**\n * Create a new HTTP request object with the given method and URL.\n *\n * @api private\n */\n _openRequest(method, url) {\n const req = openRequest(method, url, this.options)\n this._req = req\n return req\n }\n\n /**\n * Remove the entry in the URL storage, if it has been saved before.\n *\n * @api private\n */\n _removeFromUrlStorage() {\n if (!this._urlStorageKey) return\n\n this._urlStorage.removeUpload(this._urlStorageKey).catch((err) => {\n this._emitError(err)\n })\n this._urlStorageKey = null\n }\n\n /**\n * Add the upload URL to the URL storage, if possible.\n *\n * @api private\n */\n _saveUploadInUrlStorage() {\n // We do not store the upload URL\n // - if it was disabled in the option, or\n // - if no fingerprint was calculated for the input (i.e. a stream), or\n // - if the URL is already stored (i.e. key is set alread).\n if (\n !this.options.storeFingerprintForResuming ||\n !this._fingerprint ||\n this._urlStorageKey !== null\n ) {\n return Promise.resolve()\n }\n\n const storedUpload = {\n size: this._size,\n metadata: this.options.metadata,\n creationTime: new Date().toString(),\n }\n\n if (this._parallelUploads) {\n // Save multiple URLs if the parallelUploads option is used ...\n storedUpload.parallelUploadUrls = this._parallelUploadUrls\n } else {\n // ... otherwise we just save the one available URL.\n storedUpload.uploadUrl = this.url\n }\n\n return this._urlStorage.addUpload(this._fingerprint, storedUpload).then((urlStorageKey) => {\n this._urlStorageKey = urlStorageKey\n })\n }\n\n /**\n * Send a request with the provided body.\n *\n * @api private\n */\n _sendRequest(req, body = null) {\n return sendRequest(req, body, this.options)\n }\n}\n\nfunction encodeMetadata(metadata) {\n return Object.entries(metadata)\n .map(([key, value]) => `${key} ${Base64.encode(String(value))}`)\n .join(',')\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n return status >= category && status < category + 100\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n const req = options.httpStack.createRequest(method, url)\n\n if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n req.setHeader('Upload-Draft-Interop-Version', '5')\n } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Draft-Interop-Version', '6')\n } else {\n req.setHeader('Tus-Resumable', '1.0.0')\n }\n const headers = options.headers || {}\n\n for (const [name, value] of Object.entries(headers)) {\n req.setHeader(name, value)\n }\n\n if (options.addRequestId) {\n const requestId = uuid()\n req.setHeader('X-Request-ID', requestId)\n }\n\n return req\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nasync function sendRequest(req, body, options) {\n if (typeof options.onBeforeRequest === 'function') {\n await options.onBeforeRequest(req)\n }\n\n const res = await req.send(body)\n\n if (typeof options.onAfterResponse === 'function') {\n await options.onAfterResponse(req, res)\n }\n\n return res\n}\n\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction isOnline() {\n let online = true\n // Note: We don't reference `window` here because the navigator object also exists\n // in a Web Worker's context.\n if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n online = false\n }\n\n return online\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n // We only attempt a retry if\n // - retryDelays option is set\n // - we didn't exceed the maxium number of retries, yet, and\n // - this error was caused by a request or it's response and\n // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n // a onShouldRetry is specified and returns true\n // - the browser does not indicate that we are offline\n if (\n options.retryDelays == null ||\n retryAttempt >= options.retryDelays.length ||\n err.originalRequest == null\n ) {\n return false\n }\n\n if (options && typeof options.onShouldRetry === 'function') {\n return options.onShouldRetry(err, retryAttempt, options)\n }\n\n return defaultOnShouldRetry(err)\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n const status = err.originalResponse ? err.originalResponse.getStatus() : 0\n return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline()\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n return new URL(link, origin).toString()\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n const partSize = Math.floor(totalSize / partCount)\n const parts = []\n\n for (let i = 0; i < partCount; i++) {\n parts.push({\n start: partSize * i,\n end: partSize * (i + 1),\n })\n }\n\n parts[partCount - 1].end = totalSize\n\n return parts\n}\n\nBaseUpload.defaultOptions = defaultOptions\n\nexport default BaseUpload\n","/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n const v = c === 'x' ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n}\n","const isReactNative = () =>\n typeof navigator !== 'undefined' &&\n typeof navigator.product === 'string' &&\n navigator.product.toLowerCase() === 'reactnative'\n\nexport default isReactNative\n","import isCordova from './isCordova.js'\nimport readAsByteArray from './readAsByteArray.js'\n\nexport default class FileSource {\n // Make this.size a method\n constructor(file) {\n this._file = file\n this.size = file.size\n }\n\n slice(start, end) {\n // In Apache Cordova applications, a File must be resolved using\n // FileReader instances, see\n // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n if (isCordova()) {\n return readAsByteArray(this._file.slice(start, end))\n }\n\n const value = this._file.slice(start, end)\n const done = end >= this.size\n return Promise.resolve({ value, done })\n }\n\n close() {\n // Nothing to do here since we don't need to release any resources.\n }\n}\n","const isCordova = () =>\n typeof window !== 'undefined' &&\n (typeof window.PhoneGap !== 'undefined' ||\n typeof window.Cordova !== 'undefined' ||\n typeof window.cordova !== 'undefined')\n\nexport default isCordova\n","/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nexport default function readAsByteArray(chunk) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n const value = new Uint8Array(reader.result)\n resolve({ value })\n }\n reader.onerror = (err) => {\n reject(err)\n }\n reader.readAsArrayBuffer(chunk)\n })\n}\n","function len(blobOrArray) {\n if (blobOrArray === undefined) return 0\n if (blobOrArray.size !== undefined) return blobOrArray.size\n return blobOrArray.length\n}\n\n/*\n Typed arrays and blobs don't have a concat method.\n This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n if (a.concat) {\n // Is `a` an Array?\n return a.concat(b)\n }\n if (a instanceof Blob) {\n return new Blob([a, b], { type: a.type })\n }\n if (a.set) {\n // Is `a` a typed array?\n const c = new a.constructor(a.length + b.length)\n c.set(a)\n c.set(b, a.length)\n return c\n }\n throw new Error('Unknown data type')\n}\n\nexport default class StreamSource {\n constructor(reader) {\n this._buffer = undefined\n this._bufferOffset = 0\n this._reader = reader\n this._done = false\n }\n\n slice(start, end) {\n if (start < this._bufferOffset) {\n return Promise.reject(new Error(\"Requested data is before the reader's current offset\"))\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n }\n\n _readUntilEnoughDataOrDone(start, end) {\n const hasEnoughData = end <= this._bufferOffset + len(this._buffer)\n if (this._done || hasEnoughData) {\n const value = this._getDataFromBuffer(start, end)\n const done = value == null ? this._done : false\n return Promise.resolve({ value, done })\n }\n\n return this._reader.read().then(({ value, done }) => {\n if (done) {\n this._done = true\n } else if (this._buffer === undefined) {\n this._buffer = value\n } else {\n this._buffer = concat(this._buffer, value)\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n })\n }\n\n _getDataFromBuffer(start, end) {\n // Remove data from buffer before `start`.\n // Data might be reread from the buffer if an upload fails, so we can only\n // safely delete data when it comes *before* what is currently being read.\n if (start > this._bufferOffset) {\n this._buffer = this._buffer.slice(start - this._bufferOffset)\n this._bufferOffset = start\n }\n // If the buffer is empty after removing old data, all data has been read.\n const hasAllDataBeenRead = len(this._buffer) === 0\n if (this._done && hasAllDataBeenRead) {\n return null\n }\n // We already removed data before `start`, so we just return the first\n // chunk from the buffer.\n return this._buffer.slice(0, end - start)\n }\n\n close() {\n if (this._reader.cancel) {\n this._reader.cancel()\n }\n }\n}\n","export default class XHRHttpStack {\n createRequest(method, url) {\n return new Request(method, url)\n }\n\n getName() {\n return 'XHRHttpStack'\n }\n}\n\nclass Request {\n constructor(method, url) {\n this._xhr = new XMLHttpRequest()\n this._xhr.open(method, url, true)\n\n this._method = method\n this._url = url\n this._headers = {}\n }\n\n getMethod() {\n return this._method\n }\n\n getURL() {\n return this._url\n }\n\n setHeader(header, value) {\n this._xhr.setRequestHeader(header, value)\n this._headers[header] = value\n }\n\n getHeader(header) {\n return this._headers[header]\n }\n\n setProgressHandler(progressHandler) {\n // Test support for progress events before attaching an event listener\n if (!('upload' in this._xhr)) {\n return\n }\n\n this._xhr.upload.onprogress = (e) => {\n if (!e.lengthComputable) {\n return\n }\n\n progressHandler(e.loaded)\n }\n }\n\n send(body = null) {\n return new Promise((resolve, reject) => {\n this._xhr.onload = () => {\n resolve(new Response(this._xhr))\n }\n\n this._xhr.onerror = (err) => {\n reject(err)\n }\n\n this._xhr.send(body)\n })\n }\n\n abort() {\n this._xhr.abort()\n return Promise.resolve()\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n\nclass Response {\n constructor(xhr) {\n this._xhr = xhr\n }\n\n getStatus() {\n return this._xhr.status\n }\n\n getHeader(header) {\n return this._xhr.getResponseHeader(header)\n }\n\n getBody() {\n return this._xhr.responseText\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n","let hasStorage = false\ntry {\n // Note: localStorage does not exist in the Web Worker's context, so we must use window here.\n hasStorage = 'localStorage' in window\n\n // Attempt to store and read entries from the local storage to detect Private\n // Mode on Safari on iOS (see #49)\n // If the key was not used before, we remove it from local storage again to\n // not cause confusion where the entry came from.\n const key = 'tusSupport'\n const originalValue = localStorage.getItem(key)\n localStorage.setItem(key, originalValue)\n if (originalValue === null) localStorage.removeItem(key)\n} catch (e) {\n // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n // thrown (see #49)\n if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n hasStorage = false\n } else {\n throw e\n }\n}\n\nexport const canStoreURLs = hasStorage\n\nexport class WebStorageUrlStorage {\n findAllUploads() {\n const results = this._findEntries('tus::')\n return Promise.resolve(results)\n }\n\n findUploadsByFingerprint(fingerprint) {\n const results = this._findEntries(`tus::${fingerprint}::`)\n return Promise.resolve(results)\n }\n\n removeUpload(urlStorageKey) {\n localStorage.removeItem(urlStorageKey)\n return Promise.resolve()\n }\n\n addUpload(fingerprint, upload) {\n const id = Math.round(Math.random() * 1e12)\n const key = `tus::${fingerprint}::${id}`\n\n localStorage.setItem(key, JSON.stringify(upload))\n return Promise.resolve(key)\n }\n\n _findEntries(prefix) {\n const results = []\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key.indexOf(prefix) !== 0) continue\n\n try {\n const upload = JSON.parse(localStorage.getItem(key))\n upload.urlStorageKey = key\n\n results.push(upload)\n } catch (_e) {\n // The JSON parse error is intentionally ignored here, so a malformed\n // entry in the storage cannot prevent an upload.\n }\n }\n\n return results\n }\n}\n","import DetailedError from '../error.js'\nimport { enableDebugLog } from '../logger.js'\nimport NoopUrlStorage from '../noopUrlStorage.js'\nimport BaseUpload from '../upload.js'\n\nimport FileReader from './fileReader.js'\nimport fingerprint from './fileSignature.js'\nimport DefaultHttpStack from './httpStack.js'\nimport { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js'\n\nconst defaultOptions = {\n ...BaseUpload.defaultOptions,\n httpStack: new DefaultHttpStack(),\n fileReader: new FileReader(),\n urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n fingerprint,\n}\n\nclass Upload extends BaseUpload {\n constructor(file = null, options = {}) {\n options = { ...defaultOptions, ...options }\n super(file, options)\n }\n\n static terminate(url, options = {}) {\n options = { ...defaultOptions, ...options }\n return BaseUpload.terminate(url, options)\n }\n}\n\n// Note: We don't reference `window` here because these classes also exist in a Web Worker's context.\nconst isSupported =\n typeof XMLHttpRequest === 'function' &&\n typeof Blob === 'function' &&\n typeof Blob.prototype.slice === 'function'\n\nexport {\n Upload,\n canStoreURLs,\n defaultOptions,\n isSupported,\n enableDebugLog,\n DefaultHttpStack,\n DetailedError,\n}\n","import isReactNative from './isReactNative.js'\nimport uriToBlob from './uriToBlob.js'\n\nimport FileSource from './sources/FileSource.js'\nimport StreamSource from './sources/StreamSource.js'\n\nexport default class FileReader {\n async openFile(input, chunkSize) {\n // In React Native, when user selects a file, instead of a File or Blob,\n // you usually get a file object {} with a uri property that contains\n // a local path to the file. We use XMLHttpRequest to fetch\n // the file blob, before uploading with tus.\n if (isReactNative() && input && typeof input.uri !== 'undefined') {\n try {\n const blob = await uriToBlob(input.uri)\n return new FileSource(blob)\n } catch (err) {\n throw new Error(\n `tus: cannot fetch \\`file.uri\\` as Blob, make sure the uri is correct and accessible. ${err}`,\n )\n }\n }\n\n // Since we emulate the Blob type in our tests (not all target browsers\n // support it), we cannot use `instanceof` for testing whether the input value\n // can be handled. Instead, we simply check is the slice() function and the\n // size property are available.\n if (typeof input.slice === 'function' && typeof input.size !== 'undefined') {\n return Promise.resolve(new FileSource(input))\n }\n\n if (typeof input.read === 'function') {\n chunkSize = Number(chunkSize)\n if (!Number.isFinite(chunkSize)) {\n return Promise.reject(\n new Error(\n 'cannot create source for stream without a finite value for the `chunkSize` option',\n ),\n )\n }\n\n return Promise.resolve(new StreamSource(input, chunkSize))\n }\n\n return Promise.reject(\n new Error(\n 'source object may only be an instance of File, Blob, or Reader in this environment',\n ),\n )\n }\n}\n","/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nexport default function uriToBlob(uri) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.responseType = 'blob'\n xhr.onload = () => {\n const blob = xhr.response\n resolve(blob)\n }\n xhr.onerror = (err) => {\n reject(err)\n }\n xhr.open('GET', uri)\n xhr.send()\n })\n}\n","export default class NoopUrlStorage {\n listAllUploads() {\n return Promise.resolve([])\n }\n\n findUploadsByFingerprint(_fingerprint) {\n return Promise.resolve([])\n }\n\n removeUpload(_urlStorageKey) {\n return Promise.resolve()\n }\n\n addUpload(_fingerprint, _upload) {\n return Promise.resolve(null)\n }\n}\n","import isReactNative from './isReactNative.js'\n\n// TODO: Differenciate between input types\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nexport default function fingerprint(file, options) {\n if (isReactNative()) {\n return Promise.resolve(reactNativeFingerprint(file, options))\n }\n\n return Promise.resolve(\n ['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'),\n )\n}\n\nfunction reactNativeFingerprint(file, options) {\n const exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif'\n return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join(\n '/',\n )\n}\n\nfunction hashCode(str) {\n // from https://stackoverflow.com/a/8831937/151666\n let hash = 0\n if (str.length === 0) {\n return hash\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash &= hash // Convert to 32bit integer\n }\n return hash\n}\n","export const deleteUpload = async (\n url: string,\n csrfToken: string\n): Promise =>\n new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"DELETE\", url);\n\n xhr.onload = (): void => {\n if (xhr.status === 204) {\n resolve();\n } else {\n reject(new Error());\n }\n };\n xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n xhr.setRequestHeader(\"X-CSRFToken\", csrfToken);\n xhr.send(null);\n });\n","import { HttpRequest, HttpResponse, Upload } from \"tus-js-client\";\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface Parameters {\n chunkSize: number;\n csrfToken: string;\n fieldName: string;\n file: File;\n formId: string;\n retryDelays: null | number[];\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport default class TusUpload extends BaseUpload {\n public onError?: (error: Error) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n private csrfToken: string;\n private id: string;\n private upload: Upload;\n\n constructor({\n chunkSize,\n csrfToken,\n fieldName,\n file,\n formId,\n retryDelays,\n uploadIndex,\n uploadUrl\n }: Parameters) {\n super({ name: file.name, status: \"uploading\", type: \"tus\", uploadIndex });\n\n this.csrfToken = csrfToken;\n\n this.upload = new Upload(file, {\n chunkSize,\n endpoint: uploadUrl,\n metadata: {\n fieldName: fieldName,\n filename: file.name,\n formId: formId\n },\n onAfterResponse: this.handleAfterReponse,\n onBeforeRequest: this.addCsrTokenToRequest,\n onError: this.handleError,\n onProgress: this.handleProgress,\n onSuccess: this.handleSucces,\n retryDelays: retryDelays ?? [0, 1000, 3000, 5000]\n });\n\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n }\n\n public async abort(): Promise {\n await this.upload.abort(true);\n }\n\n public async delete(): Promise {\n if (!this.upload.url) {\n return Promise.resolve();\n }\n\n await deleteUpload(this.upload.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialFile {\n return {\n id: this.id,\n name: this.name,\n size: this.getSize(),\n type: \"tus\",\n url: \"\"\n };\n }\n\n public getSize(): number {\n return (this.upload.file as File).size;\n }\n\n public start(): void {\n this.upload.start();\n }\n\n private addCsrTokenToRequest = (request: HttpRequest) => {\n request.setHeader(\"X-CSRFToken\", this.csrfToken);\n };\n\n private handleAfterReponse = (\n _request: HttpRequest,\n response: HttpResponse\n ) => {\n const resourceId = response.getHeader(\"ResourceId\");\n\n if (resourceId) {\n this.id = resourceId;\n }\n };\n\n private handleError = (error: Error) => {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n };\n\n private handleProgress = (bytesUploaded: number, bytesTotal: number) => {\n if (this.onProgress) {\n this.onProgress(bytesUploaded, bytesTotal);\n }\n };\n\n private handleSucces = () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n };\n}\n","import BaseUpload, {\n InitialExistingFile,\n InitialFile,\n InitialPlaceholderFile,\n InitialS3File,\n InitialTusFile,\n UploadType\n} from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface BaseUploadedFileParameters {\n name: string;\n size: number;\n type: UploadType;\n uploadIndex: number;\n}\n\ninterface UploadedFileParameters {\n csrfToken: string;\n initialFile: InitialFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\ninterface UploadedTusFileParameters {\n csrfToken: string;\n initialFile: InitialTusFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport abstract class BaseUploadedFile extends BaseUpload {\n size: number;\n\n constructor({ name, size, type, uploadIndex }: BaseUploadedFileParameters) {\n super({ name, status: \"done\", type, uploadIndex });\n\n this.size = size;\n }\n\n public async abort(): Promise {\n return Promise.resolve();\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getSize(): number | undefined {\n return this.size;\n }\n}\n\nclass PlaceholderFile extends BaseUploadedFile {\n id: string;\n\n constructor(initialFile: InitialPlaceholderFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"placeholder\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialPlaceholderFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"placeholder\"\n };\n }\n}\n\nexport class ExistingFile extends BaseUploadedFile {\n constructor(initialFile: InitialExistingFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"existing\",\n uploadIndex\n });\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialExistingFile {\n return {\n name: this.name,\n size: this.size,\n type: \"existing\"\n };\n }\n}\n\nexport class UploadedS3File extends BaseUploadedFile {\n id: string;\n key: string;\n\n constructor(initialFile: InitialS3File, uploadIndex: number) {\n super({\n name: initialFile.original_name || initialFile.name,\n size: initialFile.size,\n type: \"uploadedS3\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n this.key = initialFile.name;\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialS3File {\n return {\n id: this.id,\n name: this.key,\n original_name: this.name,\n size: this.size,\n type: \"s3\"\n };\n }\n}\n\nexport class UploadedTusFile extends BaseUploadedFile {\n csrfToken: string;\n id: string;\n url: string;\n\n constructor({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n }: UploadedTusFileParameters) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"uploadedTus\",\n uploadIndex\n });\n\n this.csrfToken = csrfToken;\n this.id = initialFile.id;\n this.url = `${uploadUrl}${initialFile.id}`;\n }\n\n public async delete(): Promise {\n await deleteUpload(this.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialTusFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"tus\",\n url: \"\"\n };\n }\n}\n\nexport const createUploadedFile = ({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n}: UploadedFileParameters): BaseUploadedFile => {\n switch (initialFile.type) {\n case \"existing\":\n return new ExistingFile(initialFile, uploadIndex);\n\n case \"placeholder\":\n return new PlaceholderFile(initialFile, uploadIndex);\n\n case \"s3\":\n return new UploadedS3File(initialFile, uploadIndex);\n\n case \"tus\":\n return new UploadedTusFile({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n });\n }\n};\n","import { EventEmitter } from \"eventemitter3\";\n\nimport AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport DropArea from \"./drop_area.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\nimport BaseUpload, { InitialFile, UploadType } from \"./uploads/base_upload.ts\";\nimport S3Upload from \"./uploads/s3_upload.ts\";\nimport TusUpload from \"./uploads/tus_upload.ts\";\nimport { createUploadedFile } from \"./uploads/uploaded_file.ts\";\nimport {\n findInput,\n getMetadataFieldName,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Callbacks {\n onClick?: ({ fieldName, fileName, type }: ClickEvent) => void;\n onDelete?: (upload: BaseUpload) => void;\n onError?: (error: unknown, upload: BaseUpload) => void;\n onProgress?: (\n bytesUploaded: number,\n bytesTotal: number,\n upload: BaseUpload\n ) => void;\n onSuccess?: (upload: BaseUpload) => void;\n}\n\nexport type Translations = Record;\n\ninterface ClickEvent {\n fieldName: string;\n fileName: string;\n id?: string;\n type: UploadType;\n}\n\ninterface ConstructorParams {\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n initial: InitialFile[];\n input: HTMLInputElement;\n multiple: boolean;\n parent: Element;\n prefix: null | string;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n skipRequired: boolean;\n supportDropArea: boolean;\n translations: Translations;\n uploadUrl: string;\n}\n\nclass FileField {\n acceptedFileTypes: AcceptedFileTypes;\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n multiple: boolean;\n nextUploadIndex: number;\n prefix: null | string;\n renderer: RenderUploadFile;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n supportDropArea: boolean;\n uploads: BaseUpload[];\n uploadUrl: string;\n\n constructor({\n callbacks,\n chunkSize,\n csrfToken,\n eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent,\n prefix,\n retryDelays,\n s3UploadDir,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n }: ConstructorParams) {\n this.callbacks = callbacks;\n this.chunkSize = chunkSize;\n this.csrfToken = csrfToken;\n this.eventEmitter = eventEmitter;\n this.fieldName = fieldName;\n this.form = form;\n this.formId = formId;\n this.multiple = multiple;\n this.prefix = prefix;\n this.retryDelays = retryDelays;\n this.s3UploadDir = s3UploadDir;\n this.supportDropArea = supportDropArea && !input.disabled;\n this.uploadUrl = uploadUrl;\n this.acceptedFileTypes = new AcceptedFileTypes(input.accept);\n\n this.uploads = [];\n this.nextUploadIndex = 0;\n\n this.renderer = new RenderUploadFile({\n input,\n parent,\n skipRequired,\n translations\n });\n const filesContainer = this.renderer.container;\n\n if (supportDropArea) {\n this.initDropArea(filesContainer, input.accept);\n }\n\n this.addInitialFiles(initial);\n\n this.checkDropHint();\n\n input.addEventListener(\"change\", this.onChange);\n filesContainer.addEventListener(\"click\", this.handleClick);\n }\n\n addInitialFiles(initialFiles: InitialFile[]): void {\n if (initialFiles.length === 0) {\n return;\n }\n\n const { multiple, renderer } = this;\n\n const addInitialFile = (initialFile: InitialFile): void => {\n const { size } = initialFile;\n const name =\n initialFile.type === \"s3\" && initialFile.original_name\n ? initialFile.original_name\n : initialFile.name;\n\n const element = renderer.addUploadedFile(\n name,\n this.nextUploadIndex,\n size\n );\n\n const upload = createUploadedFile({\n csrfToken: this.csrfToken,\n initialFile,\n uploadIndex: this.nextUploadIndex,\n uploadUrl: this.uploadUrl\n });\n this.uploads.push(upload);\n\n this.emitEvent(\"addUpload\", element, upload);\n };\n\n if (multiple) {\n initialFiles.forEach((file: InitialFile): void => {\n addInitialFile(file);\n this.nextUploadIndex += 1;\n });\n } else {\n const initialFile = initialFiles[0];\n\n if (initialFile) {\n addInitialFile(initialFile);\n }\n }\n }\n\n checkDropHint(): void {\n if (!this.supportDropArea) {\n return;\n }\n\n const nonEmptyUploads = this.uploads.filter(e => Boolean(e));\n\n if (nonEmptyUploads.length === 0) {\n this.renderer.renderDropHint();\n } else {\n this.renderer.removeDropHint();\n }\n }\n\n emitEvent(eventName: string, element: HTMLElement, upload: BaseUpload): void {\n if (this.eventEmitter) {\n this.eventEmitter.emit(eventName, {\n element,\n fieldName: this.fieldName,\n fileName: upload.name,\n metaDataField: this.getMetaDataField(),\n upload\n });\n }\n }\n\n findUploadByName(fileName: string): BaseUpload | undefined {\n return this.uploads.find(upload => upload.name === fileName);\n }\n\n getMetaDataField(): HTMLElement | null {\n return findInput(\n this.form,\n getMetadataFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n }\n\n getUploadByIndex(uploadIndex: number): BaseUpload | undefined {\n return this.uploads.find(upload => upload.uploadIndex === uploadIndex);\n }\n\n async handleCancel(upload: BaseUpload): Promise {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n this.removeUploadFromList(upload);\n }\n\n handleClick = (e: Event): void => {\n const target = e.target as HTMLElement;\n\n const getUpload = (): BaseUpload | undefined => {\n const dataIndex = target.getAttribute(\"data-index\");\n\n if (!dataIndex) {\n return undefined;\n }\n\n const uploadIndex = parseInt(dataIndex, 10);\n return this.getUploadByIndex(uploadIndex);\n };\n\n if (\n target.classList.contains(\"dff-delete\") &&\n !target.classList.contains(\"dff-disabled\")\n ) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.removeExistingUpload(upload);\n }\n } else if (target.classList.contains(\"dff-cancel\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.handleCancel(upload);\n }\n } else if (target.classList.contains(\"dff-filename\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload?.status === \"done\" && this.callbacks.onClick) {\n this.callbacks.onClick({\n fieldName: this.fieldName,\n fileName: upload.name,\n id: upload.getId(),\n type: upload.type\n });\n }\n }\n };\n\n handleError = (upload: BaseUpload, error: unknown): void => {\n this.renderer.setError(upload.uploadIndex);\n upload.status = \"error\";\n\n const { onError } = this.callbacks;\n\n if (onError) {\n if (upload instanceof TusUpload) {\n onError(error, upload);\n }\n }\n };\n\n handleInvalidFiles = (files: File[]): void => {\n this.renderer.setErrorInvalidFiles(files);\n };\n\n handleProgress = (\n upload: BaseUpload,\n bytesUploaded: number,\n bytesTotal: number\n ): void => {\n const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);\n\n this.renderer.updateProgress(upload.uploadIndex, percentage);\n\n const { onProgress } = this.callbacks;\n\n if (onProgress) {\n if (upload instanceof TusUpload) {\n onProgress(bytesUploaded, bytesTotal, upload);\n }\n }\n };\n\n handleSuccess = (upload: BaseUpload): void => {\n const { renderer } = this;\n\n this.updatePlaceholderInput();\n\n renderer.clearInput();\n renderer.setSuccess(upload.uploadIndex, upload.getSize());\n upload.status = \"done\";\n\n const { onSuccess } = this.callbacks;\n\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"uploadComplete\", element, upload);\n }\n\n if (onSuccess && upload.type === \"tus\") {\n onSuccess(upload);\n }\n };\n\n initDropArea(container: Element, inputAccept: string): void {\n new DropArea({\n container,\n inputAccept,\n onUploadFiles: this.uploadFiles,\n renderer: this.renderer\n });\n }\n\n onChange = (e: Event): void => {\n const files = (e.target as HTMLInputElement).files ?? ([] as File[]);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.handleInvalidFiles([...invalidFiles]);\n void this.uploadFiles([...acceptedFiles]);\n\n this.renderer.clearInput();\n };\n\n async removeExistingUpload(upload: BaseUpload): Promise {\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"removeUpload\", element, upload);\n }\n\n if (upload.status === \"uploading\") {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n } else if (upload.status === \"done\") {\n this.renderer.disableDelete(upload.uploadIndex);\n\n try {\n await upload.delete();\n } catch {\n this.renderer.setDeleteFailed(upload.uploadIndex);\n return;\n }\n }\n\n this.removeUploadFromList(upload);\n this.updatePlaceholderInput();\n }\n\n removeUploadFromList(upload: BaseUpload): void {\n this.renderer.deleteFile(upload.uploadIndex);\n\n const index = this.uploads.indexOf(upload);\n\n if (index >= 0) {\n this.uploads.splice(index, 1);\n }\n\n this.checkDropHint();\n\n const { onDelete } = this.callbacks;\n\n if (onDelete) {\n onDelete(upload);\n }\n }\n\n updatePlaceholderInput(): void {\n const input = findInput(\n this.form,\n getUploadsFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n if (!input) {\n return;\n }\n\n const placeholdersInfo: InitialFile[] = this.uploads.map(upload =>\n upload.getInitialFile()\n );\n\n input.value = JSON.stringify(placeholdersInfo);\n }\n\n async uploadFile(file: File): Promise {\n const createUpload = (): S3Upload | TusUpload => {\n const { csrfToken, s3UploadDir } = this;\n\n if (s3UploadDir != null) {\n return new S3Upload({\n csrfToken,\n endpoint: uploadUrl,\n file,\n s3UploadDir,\n uploadIndex: newUploadIndex\n });\n } else {\n return new TusUpload({\n chunkSize: this.chunkSize,\n csrfToken: this.csrfToken,\n fieldName,\n file,\n formId,\n retryDelays: this.retryDelays,\n uploadIndex: newUploadIndex,\n uploadUrl\n });\n }\n };\n\n const { fieldName, formId, renderer, uploadUrl } = this;\n const fileName = file.name;\n const existingUpload = this.findUploadByName(fileName);\n const newUploadIndex = existingUpload\n ? existingUpload.uploadIndex\n : this.nextUploadIndex;\n\n if (!existingUpload) {\n this.nextUploadIndex += 1;\n }\n\n if (existingUpload) {\n await this.removeExistingUpload(existingUpload);\n }\n\n const upload = createUpload();\n\n upload.onError = (error: unknown) => {\n this.handleError(upload, error);\n };\n upload.onProgress = (bytesUploaded, bytesTotal) => {\n this.handleProgress(upload, bytesUploaded, bytesTotal);\n };\n upload.onSuccess = () => {\n this.handleSuccess(upload);\n };\n upload.start();\n\n this.uploads.push(upload);\n\n const element = renderer.addNewUpload(fileName, newUploadIndex);\n this.emitEvent(\"addUpload\", element, upload);\n }\n\n uploadFiles = async (files: File[]): Promise => {\n if (files.length === 0) {\n return;\n }\n\n if (!this.multiple) {\n for (const upload of this.uploads) {\n this.renderer.deleteFile(upload.uploadIndex);\n }\n\n this.uploads = [];\n const file = files[0];\n\n if (file) {\n await this.uploadFile(file);\n }\n } else {\n for (const file of files) {\n await this.uploadFile(file);\n }\n }\n\n this.checkDropHint();\n };\n}\n\nexport default FileField;\n","import { EventEmitter } from \"eventemitter3\";\n\nimport FileField, { Callbacks, Translations } from \"./file_field.ts\";\nimport { InitialFile } from \"./uploads/base_upload.ts\";\nimport {\n findInput,\n getInputValueForFormAndPrefix,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Options {\n callbacks?: Callbacks;\n chunkSize?: number;\n eventEmitter?: EventEmitter;\n prefix?: string;\n retryDelays?: number[];\n skipRequired?: boolean;\n supportDropArea?: boolean;\n}\n\nconst initUploadFields = (form: Element, options: Options = {}): void => {\n const matchesPrefix = (fieldName: string): boolean => {\n if (!options.prefix) {\n return true;\n }\n\n return fieldName.startsWith(`${options.prefix}-`);\n };\n\n const getPrefix = (): null | string => options.prefix ?? null;\n\n const getInputValue = (fieldName: string): string | undefined =>\n getInputValueForFormAndPrefix(form, fieldName, getPrefix());\n\n const getInitialFiles = (fieldName: string): InitialFile[] => {\n const data = getInputValue(getUploadsFieldName(fieldName, getPrefix()));\n\n if (!data) {\n return [];\n }\n\n return (JSON.parse(data) as Record[]).filter(\n file => file.type\n ) as unknown as InitialFile[];\n };\n\n const uploadUrl = getInputValue(\"upload_url\");\n const formId = getInputValue(\"form_id\");\n const s3UploadDir = getInputValue(\"s3_upload_dir\");\n const skipRequired = options.skipRequired ?? false;\n const prefix = getPrefix();\n const csrfToken = findInput(form, \"csrfmiddlewaretoken\", null)?.value;\n\n if (!csrfToken) {\n throw Error(\"Csrf token not found\");\n }\n\n if (!formId || !uploadUrl) {\n return;\n }\n\n form.querySelectorAll(\".dff-uploader\").forEach(uploaderDiv => {\n const container = uploaderDiv.querySelector(\".dff-container\");\n\n if (!container) {\n return;\n }\n\n const input = container.querySelector(\"input[type=file]\");\n\n if (!(input && matchesPrefix(input.name))) {\n return;\n }\n\n const fieldName = input.name;\n const { multiple } = input;\n const initial = getInitialFiles(fieldName);\n const dataTranslations = container.getAttribute(\"data-translations\");\n const translations: Translations = dataTranslations\n ? (JSON.parse(dataTranslations) as Translations)\n : {};\n const supportDropArea = !(options.supportDropArea === false);\n\n new FileField({\n callbacks: options.callbacks ?? {},\n chunkSize: options.chunkSize ?? 2621440,\n csrfToken,\n eventEmitter: options.eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent: container,\n prefix,\n retryDelays: options.retryDelays ?? null,\n s3UploadDir: s3UploadDir ?? null,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n });\n });\n};\n\nexport default initUploadFields;\n","import autoInitFileForms from \"./auto_init_file_forms.ts\";\nimport initFormSet from \"./init_form_set.ts\";\nimport initUploadFields from \"./init_upload_fields.ts\";\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nwindow.autoInitFileForms = autoInitFileForms; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initFormSet = initFormSet; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initUploadFields = initUploadFields; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n","import initUploadFields, { Options } from \"./init_upload_fields.ts\";\nimport {\n getInputNameWithPrefix,\n getInputValueForFormAndPrefix\n} from \"./util.ts\";\n\nconst initFormSet = (\n form: HTMLFormElement,\n optionsParam: Options | string\n): void => {\n let options: Options;\n\n if (typeof optionsParam === \"string\") {\n options = { prefix: optionsParam };\n } else {\n options = optionsParam;\n }\n\n const prefix = options.prefix ?? \"form\";\n\n const totalFormsValue = getInputValueForFormAndPrefix(\n form,\n \"TOTAL_FORMS\",\n prefix\n );\n\n if (!totalFormsValue) {\n return;\n }\n\n const formCount = parseInt(totalFormsValue, 10);\n\n for (let i = 0; i < formCount; i += 1) {\n const subFormPrefix = getInputNameWithPrefix(i.toString(), null);\n initUploadFields(form, {\n ...options,\n prefix: `${prefix}-${subFormPrefix}`\n });\n }\n};\n\nexport default initFormSet;\n"],"names":["findForm","element","parent","parentElement","tagName","types","Object","freeze","_Mime_extensionToType","_Mime_typeToExtension","_Mime_typeToExtensions","__classPrivateFieldGet","this","receiver","state","kind","f","TypeError","has","call","value","get","WeakMap","mime","constructor","args","set","Map","arg","define","typeMap","force","type","extensions","entries","toLowerCase","map","ext","Set","allExtensions","first","extension","starred","startsWith","slice","add","currentType","Error","getType","path","last","replace","hasPath","length","getExtension","split","trim","getAllExtensions","_freeze","values","_getTestState","standardTypes","WIN_SLASH","WIN_NO_SLASH","DOT_LITERAL","SLASH_LITERAL","QMARK","END_ANCHOR","START_ANCHOR","DOTS_SLASH","POSIX_CHARS","PLUS_LITERAL","QMARK_LITERAL","ONE_CHAR","NO_DOT","NO_DOTS","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK_NO_DOT","STAR","SEP","WINDOWS_CHARS","constants","MAX_LENGTH","POSIX_REGEX_SOURCE","alnum","alpha","ascii","blank","cntrl","digit","graph","lower","print","punct","space","upper","word","xdigit","REGEX_BACKSLASH","REGEX_NON_SPECIAL_CHARS","REGEX_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_BACKREF","REGEX_SPECIAL_CHARS_GLOBAL","REGEX_REMOVE_BACKSLASH","REPLACEMENTS","__proto__","CHAR_0","CHAR_9","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_ASTERISK","CHAR_AMPERSAND","CHAR_AT","CHAR_BACKWARD_SLASH","CHAR_CARRIAGE_RETURN","CHAR_CIRCUMFLEX_ACCENT","CHAR_COLON","CHAR_COMMA","CHAR_DOT","CHAR_DOUBLE_QUOTE","CHAR_EQUAL","CHAR_EXCLAMATION_MARK","CHAR_FORM_FEED","CHAR_FORWARD_SLASH","CHAR_GRAVE_ACCENT","CHAR_HASH","CHAR_HYPHEN_MINUS","CHAR_LEFT_ANGLE_BRACKET","CHAR_LEFT_CURLY_BRACE","CHAR_LEFT_SQUARE_BRACKET","CHAR_LINE_FEED","CHAR_NO_BREAK_SPACE","CHAR_PERCENT","CHAR_PLUS","CHAR_QUESTION_MARK","CHAR_RIGHT_ANGLE_BRACKET","CHAR_RIGHT_CURLY_BRACE","CHAR_RIGHT_SQUARE_BRACKET","CHAR_SEMICOLON","CHAR_SINGLE_QUOTE","CHAR_SPACE","CHAR_TAB","CHAR_UNDERSCORE","CHAR_VERTICAL_LINE","CHAR_ZERO_WIDTH_NOBREAK_SPACE","extglobChars","chars","open","close","globChars","win32","require$$0","exports","isObject","val","Array","isArray","hasRegexChars","str","test","isRegexChar","escapeRegex","toPosixSlashes","isWindows","navigator","platform","process","removeBackslashes","match","escapeLast","input","char","lastIdx","idx","lastIndexOf","removePrefix","output","prefix","wrapOutput","options","contains","negated","basename","windows","segs","utils","require$$1","isPathSeparator","code","depth","token","isPrefix","isGlobstar","Infinity","scan_1","opts","scanToEnd","parts","slashes","tokens","prev","index","start","lastIndex","isBrace","isBracket","isGlob","isExtglob","braceEscaped","backslashes","negatedExtglob","finished","braces","eos","peek","charCodeAt","advance","next","noext","nonegate","noparen","push","base","glob","unescape","maxDepth","prevIndex","n","i","expandRange","sort","join","RegExp","ex","v","syntaxError","parse","max","maxLength","Math","min","len","SyntaxError","bos","prepend","capture","PLATFORM_CHARS","EXTGLOB_CHARS","globstar","dot","nodot","qmarkNoDot","star","bash","noextglob","consumed","backtrack","brackets","parens","quotes","extglobs","stack","remaining","consume","num","append","negate","count","increment","decrement","pop","tok","extglob","inner","extglobOpen","conditions","extglobClose","rest","extglobStar","includes","expression","fastpaths","m","esc","repeat","exec","posix","pre","indexOf","keepQuotes","strictBrackets","nobracket","prevValue","literalBrackets","escaped","nobrace","outputIndex","tokensIndex","brace","dots","arr","range","unshift","comma","out","toks","t","regex","noglobstar","prior","before","isStart","afterStar","after","strictSlashes","end","suffix","slashDot","create","source","parse_1","scan","require$$2","require$$3","picomatch","returnState","fns","arrayMatcher","isMatch","isState","compileRe","makeRe","isIgnored","ignore","ignoreOpts","onMatch","onResult","matcher","returnObject","result","onIgnore","format","matchBase","Boolean","patterns","pattern","p","returnOutput","toRegex","parsed","flags","nocase","err","debug","picomatch_1","AcceptedFileTypes","inputAccept","mimeTypes","mimeType","filter","forEach","fileType","parseInputAccept","isAccepted","fileName","isMimeTypeAccepted","isExtensionAccepted","getFilesFromFileSystemEntry","async","entry","isFile","file","Promise","resolve","reject","fileEntry","getFileFromFileSystemFileEntry","isDirectory","entriesFromDirectory","directoryEntry","createReader","readEntries","getEntriesFromDirectory","files","getFilesFromFileSystemEntries","DropArea","container","onUploadFiles","renderer","acceptedFileTypes","addEventListener","classList","remove","e","preventDefault","onDrop","dragEvent","stopPropagation","dataTransfer","items","item","fileSystemEntry","webkitGetAsEntry","getAsFile","getFilesFromDataTransfer","acceptedFiles","invalidFiles","name","setErrorInvalidFiles","error","console","uploadFiles","matchHtmlRegExp","escapeHtml_1","string","escape","html","substring","getInputNameWithPrefix","fieldName","getInputNameWithoutPrefix","findInput","form","inputNameWithPrefix","querySelector","getUploadsFieldName","getInputValueForFormAndPrefix","RenderUploadFile","skipRequired","translations","createFilesContainer","errors","createErrorContainer","required","addNewUpload","filename","uploadIndex","div","addFile","progressSpan","document","createElement","className","innerSpan","appendChild","cancelLink","setTextContent","getTranslation","setAttribute","toString","href","addUploadedFile","filesize","setSuccess","clearInput","deleteFile","findFileDiv","disableCancel","cancelSpan","findCancelSpan","disableDelete","deleteLink","findDeleteLink","removeDropHint","dropHint","renderDropHint","setDeleteFailed","setErrorMessage","enableDelete","setError","el","removeProgress","removeCancel","errorsMessages","msg","invalidFileTypeMessage","replaceChildren","size","fileSizeInfo","formatBytes","bytes","decimals","dm","floor","log","parseFloat","toFixed","updateProgress","percentage","innerProgressSpan","style","width","nameSpan","innerHTML","key","message","originalMessageSpan","span","text","createTextNode","BaseUpload$1","status","abort","delete","urlJoin","strArray","resultArray","shift","component","normalize","arguments","splice","S3Upload","BaseUpload","csrfToken","endpoint","s3UploadDir","super","uploadId","createdPromise","chunks","chunkState","uploading","onError","undefined","onProgress","onSuccess","initChunks","catch","xhr","abortMultipartUpload","encodeURIComponent","uploadIdEnc","headers","Headers","url","urljoin","fetch","method","then","response","json","getId","getInitialFile","id","original_name","getSize","createUpload","completeUpload","a","b","PartNumber","completeMultipartUpload","body","JSON","stringify","data","handleError","createMultipartUpload","accept","contentType","uploadParts","desiredChunkSize","ceil","minChunkSize","chunkSize","busy","done","uploaded","onPartComplete","etag","part","ETag","onPartProgress","sent","totalUploaded","reduce","c","uploadPart","prepareUploadPart","number","uploadPartBytes","XMLHttpRequest","responseType","upload","ev","lengthComputable","loaded","getResponseHeader","send","need","every","candidates","DetailedError","causingErr","req","res","originalRequest","originalResponse","causingError","requestId","getHeader","getMethod","getURL","getStatus","getBody","_hasBuffer","Buffer","_TE","TextDecoder","TextEncoder","b64chs","prototype","b64tab","tab","b64re","_fromCC","String","fromCharCode","bind","_mkUriSafe","Uint8Array","from","src","m0","_tidyB64","s","btoaPolyfill","bin","u32","c0","c1","c2","asc","pad","_btoa","btoa","_fromUint8Array","u8a","strs","l","apply","subarray","cb_utob","cc","re_utob","utob","u","_encode","encode","urlsafe","atobPolyfill","u24","r1","r2","charAt","gBase64","requiresPort","port","protocol","qs","hasOwnProperty","decode","decodeURIComponent","querystringify_1","obj","pairs","isNaN","query","parser","controlOrWhitespace","CRHTLF","protocolre","windowsDriveLetter","trimLeft","rules","address","isSpecial","NaN","hash","lolcation","loc","location","window","global","self","finaldestination","Url","pathname","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","instructions","concat","up","host","hostname","username","password","auth","origin","fn","ins","urlParse","PROTOCOL_TUS_V1","PROTOCOL_IETF_DRAFT_03","PROTOCOL_IETF_DRAFT_05","defaultOptions","uploadUrl","metadata","metadataForPartialUploads","fingerprint","uploadSize","onChunkComplete","onUploadUrlAvailable","overridePatchMethod","addRequestId","onBeforeRequest","onAfterResponse","onShouldRetry","defaultOnShouldRetry","Number","POSITIVE_INFINITY","retryDelays","parallelUploads","parallelUploadBoundaries","storeFingerprintForResuming","removeFingerprintOnSuccess","uploadLengthDeferred","uploadDataDuringCreation","urlStorage","fileReader","httpStack","_urlStorage","_req","_fingerprint","_urlStorageKey","_offset","_aborted","_size","_source","_retryAttempt","_retryTimeout","_offsetBeforeRetry","_parallelUploads","_parallelUploadUrls","terminate","openRequest","sendRequest","shouldRetry","delay","remainingDelays","newOptions","setTimeout","findPreviousUploads","findUploadsByFingerprint","resumeFromPreviousUpload","previousUpload","parallelUploadUrls","urlStorageKey","_emitError","optionName","openFile","_startParallelUpload","_startSingleUpload","totalSize","totalProgress","partCount","partSize","splitSizeIntoParts","uploads","lastPartProgress","newPartProgress","_emitProgress","_saveUploadInUrlStorage","all","_openRequest","setHeader","encodeMetadata","_sendRequest","inStatusCategory","_emitHttpError","resolveUrl","_emitSuccess","_resumeUpload","_createUpload","shouldTerminate","clearTimeout","_removeFromUrlStorage","lastResponse","bytesSent","bytesTotal","_emitChunkComplete","bytesAccepted","promise","_addChunkToRequest","_handleUploadResponse","_performUpload","offset","parseInt","setProgressHandler","valueSize","newSize","removeUpload","storedUpload","creationTime","Date","addUpload","Base64","category","createRequest","r","random","retryAttempt","online","onLine","isOnline","link","URL","isReactNative","product","FileSource","_file","PhoneGap","Cordova","cordova","chunk","reader","FileReader","onload","onerror","readAsArrayBuffer","blobOrArray","StreamSource","_buffer","_bufferOffset","_reader","_done","_readUntilEnoughDataOrDone","hasEnoughData","_getDataFromBuffer","read","Blob","hasAllDataBeenRead","cancel","Request","_xhr","_method","_url","_headers","header","setRequestHeader","progressHandler","onprogress","Response","getUnderlyingObject","responseText","hasStorage","originalValue","localStorage","getItem","setItem","removeItem","SECURITY_ERR","QUOTA_EXCEEDED_ERR","canStoreURLs","getName","uri","blob","isFinite","findAllUploads","results","_findEntries","round","_e","listAllUploads","_upload","exifHash","exif","hashCode","reactNativeFingerprint","lastModified","Upload","deleteUpload","TusUpload","formId","handleAfterReponse","addCsrTokenToRequest","handleProgress","handleSucces","request","_request","resourceId","bytesUploaded","BaseUploadedFile","PlaceholderFile","initialFile","ExistingFile","UploadedS3File","UploadedTusFile","FileField","callbacks","eventEmitter","initial","multiple","supportDropArea","disabled","nextUploadIndex","filesContainer","initDropArea","addInitialFiles","checkDropHint","onChange","handleClick","initialFiles","addInitialFile","createUploadedFile","emitEvent","eventName","emit","metaDataField","getMetaDataField","findUploadByName","find","getMetadataFieldName","getUploadByIndex","handleCancel","removeUploadFromList","target","getUpload","dataIndex","getAttribute","removeExistingUpload","onClick","handleInvalidFiles","handleSuccess","updatePlaceholderInput","onDelete","placeholdersInfo","uploadFile","existingUpload","newUploadIndex","initUploadFields","getPrefix","getInputValue","querySelectorAll","uploaderDiv","matchesPrefix","getInitialFiles","dataTranslations","autoInitFileForms","initFormSet","optionsParam","totalFormsValue","formCount","subFormPrefix"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,12,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]} \ No newline at end of file +{"version":3,"file":"file_form.min.js","sources":["../../../frontend/src/auto_init_file_forms.ts","../../../frontend/node_modules/mime/dist/types/standard.js","../../../frontend/node_modules/mime/dist/src/Mime.js","../../../frontend/node_modules/mime/dist/src/index_lite.js","../../../frontend/node_modules/picomatch/lib/constants.js","../../../frontend/node_modules/picomatch/lib/utils.js","../../../frontend/node_modules/picomatch/lib/scan.js","../../../frontend/node_modules/picomatch/lib/parse.js","../../../frontend/node_modules/picomatch/lib/picomatch.js","../../../frontend/node_modules/picomatch/posix.js","../../../frontend/src/accepted_file_types.ts","../../../frontend/src/drop_area.ts","../../../frontend/node_modules/escape-html/index.js","../../../frontend/src/util.ts","../../../frontend/src/render_upload_file.ts","../../../frontend/src/uploads/base_upload.ts","../../../frontend/node_modules/url-join/lib/url-join.js","../../../frontend/src/uploads/s3_utils.ts","../../../frontend/src/uploads/s3_upload.ts","../../../frontend/node_modules/tus-js-client/lib/error.js","../../../frontend/node_modules/js-base64/base64.mjs","../../../frontend/node_modules/url-parse/index.js","../../../frontend/node_modules/requires-port/index.js","../../../frontend/node_modules/querystringify/index.js","../../../frontend/node_modules/tus-js-client/lib/upload.js","../../../frontend/node_modules/tus-js-client/lib/uuid.js","../../../frontend/node_modules/tus-js-client/lib/browser/isReactNative.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/FileSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/isCordova.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/readAsByteArray.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/StreamSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/httpStack.js","../../../frontend/node_modules/tus-js-client/lib/browser/urlStorage.js","../../../frontend/node_modules/tus-js-client/lib/browser/index.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileReader.js","../../../frontend/node_modules/tus-js-client/lib/browser/uriToBlob.js","../../../frontend/node_modules/tus-js-client/lib/noopUrlStorage.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileSignature.js","../../../frontend/src/uploads/tus_utils.ts","../../../frontend/src/uploads/tus_upload.ts","../../../frontend/src/uploads/uploaded_file.ts","../../../frontend/src/file_field.ts","../../../frontend/src/init_upload_fields.ts","../../../frontend/src/file_form.ts","../../../frontend/src/init_form_set.ts"],"sourcesContent":["const findForm = (element: Element): HTMLElement | null => {\n const parent = element.parentElement;\n\n if (!parent) {\n return null;\n }\n\n if (parent.tagName === \"FORM\") {\n return parent;\n }\n\n return findForm(parent);\n};\n\nconst unique = (values: unknown[]): unknown[] =>\n Array.from(new Set(values).values());\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nconst autoInitFileForms = (): void => {\n const initUploadFields = window.initUploadFields as () => void; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n\n const forms = unique(\n Array.from(document.querySelectorAll(\".dff-uploader\")).map(findForm)\n );\n forms.forEach(initUploadFields);\n};\n\nexport default autoInitFileForms;\n","const types = {\n 'application/andrew-inset': ['ez'],\n 'application/appinstaller': ['appinstaller'],\n 'application/applixware': ['aw'],\n 'application/appx': ['appx'],\n 'application/appxbundle': ['appxbundle'],\n 'application/atom+xml': ['atom'],\n 'application/atomcat+xml': ['atomcat'],\n 'application/atomdeleted+xml': ['atomdeleted'],\n 'application/atomsvc+xml': ['atomsvc'],\n 'application/atsc-dwd+xml': ['dwd'],\n 'application/atsc-held+xml': ['held'],\n 'application/atsc-rsat+xml': ['rsat'],\n 'application/automationml-aml+xml': ['aml'],\n 'application/automationml-amlx+zip': ['amlx'],\n 'application/bdoc': ['bdoc'],\n 'application/calendar+xml': ['xcs'],\n 'application/ccxml+xml': ['ccxml'],\n 'application/cdfx+xml': ['cdfx'],\n 'application/cdmi-capability': ['cdmia'],\n 'application/cdmi-container': ['cdmic'],\n 'application/cdmi-domain': ['cdmid'],\n 'application/cdmi-object': ['cdmio'],\n 'application/cdmi-queue': ['cdmiq'],\n 'application/cpl+xml': ['cpl'],\n 'application/cu-seeme': ['cu'],\n 'application/cwl': ['cwl'],\n 'application/dash+xml': ['mpd'],\n 'application/dash-patch+xml': ['mpp'],\n 'application/davmount+xml': ['davmount'],\n 'application/dicom': ['dcm'],\n 'application/docbook+xml': ['dbk'],\n 'application/dssc+der': ['dssc'],\n 'application/dssc+xml': ['xdssc'],\n 'application/ecmascript': ['ecma'],\n 'application/emma+xml': ['emma'],\n 'application/emotionml+xml': ['emotionml'],\n 'application/epub+zip': ['epub'],\n 'application/exi': ['exi'],\n 'application/express': ['exp'],\n 'application/fdf': ['fdf'],\n 'application/fdt+xml': ['fdt'],\n 'application/font-tdpfr': ['pfr'],\n 'application/geo+json': ['geojson'],\n 'application/gml+xml': ['gml'],\n 'application/gpx+xml': ['gpx'],\n 'application/gxf': ['gxf'],\n 'application/gzip': ['gz'],\n 'application/hjson': ['hjson'],\n 'application/hyperstudio': ['stk'],\n 'application/inkml+xml': ['ink', 'inkml'],\n 'application/ipfix': ['ipfix'],\n 'application/its+xml': ['its'],\n 'application/java-archive': ['jar', 'war', 'ear'],\n 'application/java-serialized-object': ['ser'],\n 'application/java-vm': ['class'],\n 'application/javascript': ['*js'],\n 'application/json': ['json', 'map'],\n 'application/json5': ['json5'],\n 'application/jsonml+json': ['jsonml'],\n 'application/ld+json': ['jsonld'],\n 'application/lgr+xml': ['lgr'],\n 'application/lost+xml': ['lostxml'],\n 'application/mac-binhex40': ['hqx'],\n 'application/mac-compactpro': ['cpt'],\n 'application/mads+xml': ['mads'],\n 'application/manifest+json': ['webmanifest'],\n 'application/marc': ['mrc'],\n 'application/marcxml+xml': ['mrcx'],\n 'application/mathematica': ['ma', 'nb', 'mb'],\n 'application/mathml+xml': ['mathml'],\n 'application/mbox': ['mbox'],\n 'application/media-policy-dataset+xml': ['mpf'],\n 'application/mediaservercontrol+xml': ['mscml'],\n 'application/metalink+xml': ['metalink'],\n 'application/metalink4+xml': ['meta4'],\n 'application/mets+xml': ['mets'],\n 'application/mmt-aei+xml': ['maei'],\n 'application/mmt-usd+xml': ['musd'],\n 'application/mods+xml': ['mods'],\n 'application/mp21': ['m21', 'mp21'],\n 'application/mp4': ['*mp4', '*mpg4', 'mp4s', 'm4p'],\n 'application/msix': ['msix'],\n 'application/msixbundle': ['msixbundle'],\n 'application/msword': ['doc', 'dot'],\n 'application/mxf': ['mxf'],\n 'application/n-quads': ['nq'],\n 'application/n-triples': ['nt'],\n 'application/node': ['cjs'],\n 'application/octet-stream': [\n 'bin',\n 'dms',\n 'lrf',\n 'mar',\n 'so',\n 'dist',\n 'distz',\n 'pkg',\n 'bpk',\n 'dump',\n 'elc',\n 'deploy',\n 'exe',\n 'dll',\n 'deb',\n 'dmg',\n 'iso',\n 'img',\n 'msi',\n 'msp',\n 'msm',\n 'buffer',\n ],\n 'application/oda': ['oda'],\n 'application/oebps-package+xml': ['opf'],\n 'application/ogg': ['ogx'],\n 'application/omdoc+xml': ['omdoc'],\n 'application/onenote': [\n 'onetoc',\n 'onetoc2',\n 'onetmp',\n 'onepkg',\n 'one',\n 'onea',\n ],\n 'application/oxps': ['oxps'],\n 'application/p2p-overlay+xml': ['relo'],\n 'application/patch-ops-error+xml': ['xer'],\n 'application/pdf': ['pdf'],\n 'application/pgp-encrypted': ['pgp'],\n 'application/pgp-keys': ['asc'],\n 'application/pgp-signature': ['sig', '*asc'],\n 'application/pics-rules': ['prf'],\n 'application/pkcs10': ['p10'],\n 'application/pkcs7-mime': ['p7m', 'p7c'],\n 'application/pkcs7-signature': ['p7s'],\n 'application/pkcs8': ['p8'],\n 'application/pkix-attr-cert': ['ac'],\n 'application/pkix-cert': ['cer'],\n 'application/pkix-crl': ['crl'],\n 'application/pkix-pkipath': ['pkipath'],\n 'application/pkixcmp': ['pki'],\n 'application/pls+xml': ['pls'],\n 'application/postscript': ['ai', 'eps', 'ps'],\n 'application/provenance+xml': ['provx'],\n 'application/pskc+xml': ['pskcxml'],\n 'application/raml+yaml': ['raml'],\n 'application/rdf+xml': ['rdf', 'owl'],\n 'application/reginfo+xml': ['rif'],\n 'application/relax-ng-compact-syntax': ['rnc'],\n 'application/resource-lists+xml': ['rl'],\n 'application/resource-lists-diff+xml': ['rld'],\n 'application/rls-services+xml': ['rs'],\n 'application/route-apd+xml': ['rapd'],\n 'application/route-s-tsid+xml': ['sls'],\n 'application/route-usd+xml': ['rusd'],\n 'application/rpki-ghostbusters': ['gbr'],\n 'application/rpki-manifest': ['mft'],\n 'application/rpki-roa': ['roa'],\n 'application/rsd+xml': ['rsd'],\n 'application/rss+xml': ['rss'],\n 'application/rtf': ['rtf'],\n 'application/sbml+xml': ['sbml'],\n 'application/scvp-cv-request': ['scq'],\n 'application/scvp-cv-response': ['scs'],\n 'application/scvp-vp-request': ['spq'],\n 'application/scvp-vp-response': ['spp'],\n 'application/sdp': ['sdp'],\n 'application/senml+xml': ['senmlx'],\n 'application/sensml+xml': ['sensmlx'],\n 'application/set-payment-initiation': ['setpay'],\n 'application/set-registration-initiation': ['setreg'],\n 'application/shf+xml': ['shf'],\n 'application/sieve': ['siv', 'sieve'],\n 'application/smil+xml': ['smi', 'smil'],\n 'application/sparql-query': ['rq'],\n 'application/sparql-results+xml': ['srx'],\n 'application/sql': ['sql'],\n 'application/srgs': ['gram'],\n 'application/srgs+xml': ['grxml'],\n 'application/sru+xml': ['sru'],\n 'application/ssdl+xml': ['ssdl'],\n 'application/ssml+xml': ['ssml'],\n 'application/swid+xml': ['swidtag'],\n 'application/tei+xml': ['tei', 'teicorpus'],\n 'application/thraud+xml': ['tfi'],\n 'application/timestamped-data': ['tsd'],\n 'application/toml': ['toml'],\n 'application/trig': ['trig'],\n 'application/ttml+xml': ['ttml'],\n 'application/ubjson': ['ubj'],\n 'application/urc-ressheet+xml': ['rsheet'],\n 'application/urc-targetdesc+xml': ['td'],\n 'application/voicexml+xml': ['vxml'],\n 'application/wasm': ['wasm'],\n 'application/watcherinfo+xml': ['wif'],\n 'application/widget': ['wgt'],\n 'application/winhlp': ['hlp'],\n 'application/wsdl+xml': ['wsdl'],\n 'application/wspolicy+xml': ['wspolicy'],\n 'application/xaml+xml': ['xaml'],\n 'application/xcap-att+xml': ['xav'],\n 'application/xcap-caps+xml': ['xca'],\n 'application/xcap-diff+xml': ['xdf'],\n 'application/xcap-el+xml': ['xel'],\n 'application/xcap-ns+xml': ['xns'],\n 'application/xenc+xml': ['xenc'],\n 'application/xfdf': ['xfdf'],\n 'application/xhtml+xml': ['xhtml', 'xht'],\n 'application/xliff+xml': ['xlf'],\n 'application/xml': ['xml', 'xsl', 'xsd', 'rng'],\n 'application/xml-dtd': ['dtd'],\n 'application/xop+xml': ['xop'],\n 'application/xproc+xml': ['xpl'],\n 'application/xslt+xml': ['*xsl', 'xslt'],\n 'application/xspf+xml': ['xspf'],\n 'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'],\n 'application/yang': ['yang'],\n 'application/yin+xml': ['yin'],\n 'application/zip': ['zip'],\n 'application/zip+dotlottie': ['lottie'],\n 'audio/3gpp': ['*3gpp'],\n 'audio/aac': ['adts', 'aac'],\n 'audio/adpcm': ['adp'],\n 'audio/amr': ['amr'],\n 'audio/basic': ['au', 'snd'],\n 'audio/midi': ['mid', 'midi', 'kar', 'rmi'],\n 'audio/mobile-xmf': ['mxmf'],\n 'audio/mp3': ['*mp3'],\n 'audio/mp4': ['m4a', 'mp4a', 'm4b'],\n 'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'],\n 'audio/ogg': ['oga', 'ogg', 'spx', 'opus'],\n 'audio/s3m': ['s3m'],\n 'audio/silk': ['sil'],\n 'audio/wav': ['wav'],\n 'audio/wave': ['*wav'],\n 'audio/webm': ['weba'],\n 'audio/xm': ['xm'],\n 'font/collection': ['ttc'],\n 'font/otf': ['otf'],\n 'font/ttf': ['ttf'],\n 'font/woff': ['woff'],\n 'font/woff2': ['woff2'],\n 'image/aces': ['exr'],\n 'image/apng': ['apng'],\n 'image/avci': ['avci'],\n 'image/avcs': ['avcs'],\n 'image/avif': ['avif'],\n 'image/bmp': ['bmp', 'dib'],\n 'image/cgm': ['cgm'],\n 'image/dicom-rle': ['drle'],\n 'image/dpx': ['dpx'],\n 'image/emf': ['emf'],\n 'image/fits': ['fits'],\n 'image/g3fax': ['g3'],\n 'image/gif': ['gif'],\n 'image/heic': ['heic'],\n 'image/heic-sequence': ['heics'],\n 'image/heif': ['heif'],\n 'image/heif-sequence': ['heifs'],\n 'image/hej2k': ['hej2'],\n 'image/ief': ['ief'],\n 'image/jaii': ['jaii'],\n 'image/jais': ['jais'],\n 'image/jls': ['jls'],\n 'image/jp2': ['jp2', 'jpg2'],\n 'image/jpeg': ['jpg', 'jpeg', 'jpe'],\n 'image/jph': ['jph'],\n 'image/jphc': ['jhc'],\n 'image/jpm': ['jpm', 'jpgm'],\n 'image/jpx': ['jpx', 'jpf'],\n 'image/jxl': ['jxl'],\n 'image/jxr': ['jxr'],\n 'image/jxra': ['jxra'],\n 'image/jxrs': ['jxrs'],\n 'image/jxs': ['jxs'],\n 'image/jxsc': ['jxsc'],\n 'image/jxsi': ['jxsi'],\n 'image/jxss': ['jxss'],\n 'image/ktx': ['ktx'],\n 'image/ktx2': ['ktx2'],\n 'image/pjpeg': ['jfif'],\n 'image/png': ['png'],\n 'image/sgi': ['sgi'],\n 'image/svg+xml': ['svg', 'svgz'],\n 'image/t38': ['t38'],\n 'image/tiff': ['tif', 'tiff'],\n 'image/tiff-fx': ['tfx'],\n 'image/webp': ['webp'],\n 'image/wmf': ['wmf'],\n 'message/disposition-notification': ['disposition-notification'],\n 'message/global': ['u8msg'],\n 'message/global-delivery-status': ['u8dsn'],\n 'message/global-disposition-notification': ['u8mdn'],\n 'message/global-headers': ['u8hdr'],\n 'message/rfc822': ['eml', 'mime', 'mht', 'mhtml'],\n 'model/3mf': ['3mf'],\n 'model/gltf+json': ['gltf'],\n 'model/gltf-binary': ['glb'],\n 'model/iges': ['igs', 'iges'],\n 'model/jt': ['jt'],\n 'model/mesh': ['msh', 'mesh', 'silo'],\n 'model/mtl': ['mtl'],\n 'model/obj': ['obj'],\n 'model/prc': ['prc'],\n 'model/step': ['step', 'stp', 'stpnc', 'p21', '210'],\n 'model/step+xml': ['stpx'],\n 'model/step+zip': ['stpz'],\n 'model/step-xml+zip': ['stpxz'],\n 'model/stl': ['stl'],\n 'model/u3d': ['u3d'],\n 'model/vrml': ['wrl', 'vrml'],\n 'model/x3d+binary': ['*x3db', 'x3dbz'],\n 'model/x3d+fastinfoset': ['x3db'],\n 'model/x3d+vrml': ['*x3dv', 'x3dvz'],\n 'model/x3d+xml': ['x3d', 'x3dz'],\n 'model/x3d-vrml': ['x3dv'],\n 'text/cache-manifest': ['appcache', 'manifest'],\n 'text/calendar': ['ics', 'ifb'],\n 'text/coffeescript': ['coffee', 'litcoffee'],\n 'text/css': ['css'],\n 'text/csv': ['csv'],\n 'text/html': ['html', 'htm', 'shtml'],\n 'text/jade': ['jade'],\n 'text/javascript': ['js', 'mjs'],\n 'text/jsx': ['jsx'],\n 'text/less': ['less'],\n 'text/markdown': ['md', 'markdown'],\n 'text/mathml': ['mml'],\n 'text/mdx': ['mdx'],\n 'text/n3': ['n3'],\n 'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'],\n 'text/richtext': ['rtx'],\n 'text/rtf': ['*rtf'],\n 'text/sgml': ['sgml', 'sgm'],\n 'text/shex': ['shex'],\n 'text/slim': ['slim', 'slm'],\n 'text/spdx': ['spdx'],\n 'text/stylus': ['stylus', 'styl'],\n 'text/tab-separated-values': ['tsv'],\n 'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'],\n 'text/turtle': ['ttl'],\n 'text/uri-list': ['uri', 'uris', 'urls'],\n 'text/vcard': ['vcard'],\n 'text/vtt': ['vtt'],\n 'text/wgsl': ['wgsl'],\n 'text/xml': ['*xml'],\n 'text/yaml': ['yaml', 'yml'],\n 'video/3gpp': ['3gp', '3gpp'],\n 'video/3gpp2': ['3g2'],\n 'video/h261': ['h261'],\n 'video/h263': ['h263'],\n 'video/h264': ['h264'],\n 'video/iso.segment': ['m4s'],\n 'video/jpeg': ['jpgv'],\n 'video/jpm': ['*jpm', '*jpgm'],\n 'video/mj2': ['mj2', 'mjp2'],\n 'video/mp2t': ['ts', 'm2t', 'm2ts', 'mts'],\n 'video/mp4': ['mp4', 'mp4v', 'mpg4'],\n 'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'],\n 'video/ogg': ['ogv'],\n 'video/quicktime': ['qt', 'mov'],\n 'video/webm': ['webm'],\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n constructor(...args) {\n _Mime_extensionToType.set(this, new Map());\n _Mime_typeToExtension.set(this, new Map());\n _Mime_typeToExtensions.set(this, new Map());\n for (const arg of args) {\n this.define(arg);\n }\n }\n define(typeMap, force = false) {\n for (let [type, extensions] of Object.entries(typeMap)) {\n type = type.toLowerCase();\n extensions = extensions.map((ext) => ext.toLowerCase());\n if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n }\n const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n let first = true;\n for (let extension of extensions) {\n const starred = extension.startsWith('*');\n extension = starred ? extension.slice(1) : extension;\n allExtensions?.add(extension);\n if (first) {\n __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n }\n first = false;\n if (starred)\n continue;\n const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n if (currentType && currentType != type && !force) {\n throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n }\n __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n }\n }\n return this;\n }\n getType(path) {\n if (typeof path !== 'string')\n return null;\n const last = path.replace(/^.*[/\\\\]/s, '').toLowerCase();\n const ext = last.replace(/^.*\\./s, '').toLowerCase();\n const hasPath = last.length < path.length;\n const hasDot = ext.length < last.length - 1;\n if (!hasDot && hasPath)\n return null;\n return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n }\n getExtension(type) {\n if (typeof type !== 'string')\n return null;\n type = type?.split?.(';')[0];\n return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n }\n getAllExtensions(type) {\n if (typeof type !== 'string')\n return null;\n return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n }\n _freeze() {\n this.define = () => {\n throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n };\n Object.freeze(this);\n for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n Object.freeze(extensions);\n }\n return this;\n }\n _getTestState() {\n return {\n types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n };\n }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes)._freeze();\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","import mime from \"mime/lite\";\nimport picomatch from \"picomatch/posix\";\n\nconst parseInputAccept = (inputAccept: string): [string[], string[]] => {\n const extensions: string[] = [];\n const mimeTypes: string[] = [];\n\n inputAccept\n .split(\",\")\n .map(mimeType => mimeType.trim())\n .filter(Boolean)\n .forEach(fileType => {\n if (fileType.startsWith(\".\")) {\n extensions.push(`*${fileType}`);\n } else {\n mimeTypes.push(fileType);\n }\n });\n\n return [extensions, mimeTypes];\n};\n\nclass AcceptedFileTypes {\n private extensions: string[];\n private mimeTypes: string[];\n\n constructor(inputAccept: string) {\n const [extensions, mimeTypes] = parseInputAccept(inputAccept);\n\n this.extensions = extensions;\n this.mimeTypes = mimeTypes;\n }\n\n public isAccepted(fileName: string): boolean {\n if (this.extensions.length === 0 && this.mimeTypes.length === 0) {\n return true;\n }\n return (\n this.isMimeTypeAccepted(mime.getType(fileName)) ||\n this.isExtensionAccepted(fileName)\n );\n }\n\n private isExtensionAccepted(fileName: string): boolean {\n if (this.extensions.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(fileName, this.extensions, { nocase: true });\n }\n\n private isMimeTypeAccepted(mimeType: null | string): boolean {\n if (!mimeType || this.mimeTypes.length === 0) {\n return false;\n }\n\n return picomatch.isMatch(mimeType, this.mimeTypes);\n }\n}\n\nexport default AcceptedFileTypes;\n","import AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\n\nconst getEntriesFromDirectory = async (\n directoryEntry: FileSystemDirectoryEntry\n): Promise =>\n new Promise((resolve, reject) => {\n directoryEntry.createReader().readEntries(resolve, reject);\n });\n\nconst getFileFromFileSystemFileEntry = async (\n fileEntry: FileSystemFileEntry\n): Promise =>\n new Promise((resolve, reject) => {\n fileEntry.file(resolve, reject);\n });\n\nconst getFilesFromFileSystemEntries = async (\n entries: FileSystemEntry[]\n): Promise => {\n const result: File[] = [];\n\n for (const entry of entries) {\n const filesFromEntry = await getFilesFromFileSystemEntry(entry);\n filesFromEntry.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromFileSystemEntry = async (\n entry: FileSystemEntry\n): Promise => {\n const result: File[] = [];\n\n if (entry.isFile) {\n const file = await getFileFromFileSystemFileEntry(\n entry as FileSystemFileEntry\n );\n result.push(file);\n } else if (entry.isDirectory) {\n const entriesFromDirectory = await getEntriesFromDirectory(\n entry as FileSystemDirectoryEntry\n );\n const files = await getFilesFromFileSystemEntries(entriesFromDirectory);\n files.forEach(file => result.push(file));\n }\n\n return result;\n};\n\nconst getFilesFromDataTransfer = async (\n dataTransfer: DataTransfer\n): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (dataTransfer.items) {\n const files: File[] = [];\n\n for (const item of dataTransfer.items) {\n const fileSystemEntry = item.webkitGetAsEntry();\n if (fileSystemEntry) {\n const filesFromEntry = await getFilesFromFileSystemEntry(\n fileSystemEntry\n );\n filesFromEntry.forEach(file => files.push(file));\n } else {\n const file = item.getAsFile();\n\n if (file) {\n files.push(file);\n }\n }\n }\n\n return files;\n } else {\n // backwards compatibility\n return [...dataTransfer.files];\n }\n};\n\nclass DropArea {\n acceptedFileTypes: AcceptedFileTypes;\n container: Element;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n\n constructor({\n container,\n inputAccept,\n onUploadFiles,\n renderer\n }: {\n container: Element;\n inputAccept: string;\n onUploadFiles: (files: File[]) => Promise;\n renderer: RenderUploadFile;\n }) {\n this.container = container;\n this.onUploadFiles = onUploadFiles;\n this.acceptedFileTypes = new AcceptedFileTypes(inputAccept);\n this.renderer = renderer;\n\n container.addEventListener(\"dragenter\", () => {\n container.classList.add(\"dff-dropping\");\n });\n container.addEventListener(\"dragleave\", () => {\n container.classList.remove(\"dff-dropping\");\n });\n container.addEventListener(\"dragover\", e => {\n container.classList.add(\"dff-dropping\");\n e.preventDefault();\n });\n container.addEventListener(\"drop\", this.onDrop);\n }\n\n onDrop = (e: Event): void => {\n const dragEvent = e as DragEvent;\n this.container.classList.remove(\"dff-dropping\");\n dragEvent.preventDefault();\n dragEvent.stopPropagation();\n\n const uploadFiles = async (): Promise => {\n try {\n if (dragEvent.dataTransfer) {\n const files = await getFilesFromDataTransfer(dragEvent.dataTransfer);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.renderer.setErrorInvalidFiles(invalidFiles);\n void this.onUploadFiles(acceptedFiles);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n void uploadFiles();\n };\n}\n\nexport default DropArea;\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","export const formatBytes = (bytes: number, decimals: number): string => {\n if (bytes === 0) {\n return \"0 Bytes\";\n }\n\n const k = 1024;\n const dm = decimals <= 0 ? 0 : decimals || 2;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const n = parseFloat((bytes / k ** i).toFixed(dm));\n const size = sizes[i];\n\n if (size == null) {\n return \"\";\n } else {\n return `${n.toString()} ${size}`;\n }\n};\n\nexport const getInputNameWithPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? `${prefix}-${fieldName}` : fieldName);\n\nconst getInputNameWithoutPrefix = (\n fieldName: string,\n prefix: null | string\n): string => (prefix ? fieldName.slice(prefix.length + 1) : fieldName);\n\nexport const findInput = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): HTMLInputElement | null => {\n const inputNameWithPrefix = getInputNameWithPrefix(fieldName, prefix);\n const input = form.querySelector(`[name=\"${inputNameWithPrefix}\"]`);\n\n if (!input) {\n return null;\n }\n\n return input as HTMLInputElement;\n};\n\nexport const getUploadsFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-uploads`;\n\nexport const getInputValueForFormAndPrefix = (\n form: Element,\n fieldName: string,\n prefix: null | string\n): string | undefined => findInput(form, fieldName, prefix)?.value;\n\nexport const getMetadataFieldName = (\n fieldName: string,\n prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-metadata`;\n","import escape from \"escape-html\";\n\nimport { formatBytes } from \"./util.ts\";\n\nclass RenderUploadFile {\n container: Element;\n errors: Element;\n input: HTMLInputElement;\n translations: Record;\n\n constructor({\n input,\n parent,\n skipRequired,\n translations\n }: {\n input: HTMLInputElement;\n parent: Element;\n skipRequired: boolean;\n translations: Record;\n }) {\n this.container = this.createFilesContainer(parent);\n this.errors = this.createErrorContainer(parent);\n this.input = input;\n this.translations = translations;\n\n if (skipRequired) {\n this.input.required = false;\n }\n }\n\n public addNewUpload(filename: string, uploadIndex: number): HTMLElement {\n const div = this.addFile(filename, uploadIndex);\n\n const progressSpan = document.createElement(\"span\");\n progressSpan.className = \"dff-progress\";\n\n const innerSpan = document.createElement(\"span\");\n innerSpan.className = \"dff-progress-inner\";\n\n progressSpan.appendChild(innerSpan);\n div.appendChild(progressSpan);\n\n const cancelLink = document.createElement(\"a\");\n cancelLink.className = \"dff-cancel\";\n\n this.setTextContent(cancelLink, this.getTranslation(\"Cancel\"));\n cancelLink.setAttribute(\"data-index\", uploadIndex.toString());\n cancelLink.href = \"#\";\n div.appendChild(cancelLink);\n\n return div;\n }\n\n public addUploadedFile(\n filename: string,\n uploadIndex: number,\n filesize?: number\n ): HTMLElement {\n const element = this.addFile(filename, uploadIndex);\n this.setSuccess(uploadIndex, filesize);\n return element;\n }\n\n public clearInput(): void {\n const { input } = this;\n\n input.value = \"\";\n }\n\n public deleteFile(index: number): void {\n const div = this.findFileDiv(index);\n\n if (div) {\n div.remove();\n }\n }\n\n public disableCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.classList.add(\"dff-disabled\");\n }\n }\n\n public disableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.add(\"dff-disabled\");\n }\n }\n\n public findFileDiv(index: number): HTMLElement | null {\n return this.container.querySelector(`.dff-file-id-${index.toString()}`);\n }\n\n public removeDropHint(): void {\n const dropHint = this.container.querySelector(\".dff-drop-hint\");\n\n if (dropHint) {\n dropHint.remove();\n }\n }\n\n public renderDropHint(): void {\n if (this.container.querySelector(\".dff-drop-hint\")) {\n return;\n }\n\n const dropHint = document.createElement(\"div\");\n dropHint.className = \"dff-drop-hint\";\n this.setTextContent(dropHint, this.getTranslation(\"Drop your files here\"));\n\n this.container.appendChild(dropHint);\n }\n\n public setDeleteFailed(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Delete failed\"));\n\n this.enableDelete(index);\n }\n\n public setError(index: number): void {\n this.setErrorMessage(index, this.getTranslation(\"Upload failed\"));\n\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-fail\");\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public setErrorInvalidFiles(files: File[]): void {\n const errorsMessages = document.createElement(\"ul\");\n\n for (const file of files) {\n const msg = document.createElement(\"li\");\n const invalidFileTypeMessage = this.getTranslation(\"Invalid file type\");\n this.setTextContent(msg, `${file.name}: ${invalidFileTypeMessage}`);\n msg.className = \"dff-error\";\n errorsMessages.appendChild(msg);\n }\n\n this.errors.replaceChildren(errorsMessages);\n this.clearInput();\n }\n\n public setSuccess(index: number, size?: number): void {\n const el = this.findFileDiv(index);\n if (el) {\n el.classList.add(\"dff-upload-success\");\n\n if (size != null) {\n const fileSizeInfo = document.createElement(\"span\");\n this.setTextContent(fileSizeInfo, formatBytes(size, 2));\n fileSizeInfo.className = \"dff-filesize\";\n\n el.appendChild(fileSizeInfo);\n }\n\n const deleteLink = document.createElement(\"a\");\n this.setTextContent(deleteLink, this.getTranslation(\"Delete\"));\n deleteLink.className = \"dff-delete\";\n deleteLink.setAttribute(\"data-index\", index.toString());\n deleteLink.href = \"#\";\n\n el.appendChild(deleteLink);\n }\n\n this.removeProgress(index);\n this.removeCancel(index);\n }\n\n public updateProgress(index: number, percentage: string): void {\n const el = this.container.querySelector(`.dff-file-id-${index.toString()}`);\n if (el) {\n const innerProgressSpan = el.querySelector(\".dff-progress-inner\");\n\n if (innerProgressSpan) {\n (innerProgressSpan as HTMLElement).style.width = `${percentage}%`;\n }\n }\n }\n\n private addFile(filename: string, uploadIndex: number): HTMLElement {\n const div = document.createElement(\"div\");\n div.className = `dff-file dff-file-id-${uploadIndex.toString()}`;\n\n const nameSpan = document.createElement(\"span\");\n nameSpan.innerHTML = escape(filename);\n nameSpan.className = \"dff-filename\";\n nameSpan.setAttribute(\"data-index\", uploadIndex.toString());\n\n div.appendChild(nameSpan);\n this.container.appendChild(div);\n\n this.input.required = false;\n return div;\n }\n\n private createErrorContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-invalid-files\";\n parent.appendChild(div);\n return div;\n };\n\n private createFilesContainer = (parent: Element): Element => {\n const div = document.createElement(\"div\");\n div.className = \"dff-files\";\n parent.appendChild(div);\n\n return div;\n };\n\n private enableDelete(index: number): void {\n const deleteLink = this.findDeleteLink(index);\n\n if (deleteLink) {\n deleteLink.classList.remove(\"dff-disabled\");\n }\n }\n\n private findCancelSpan(index: number): HTMLElement | null {\n const el = this.findFileDiv(index);\n\n if (!el) {\n return null;\n }\n\n return el.querySelector(\".dff-cancel\");\n }\n\n private findDeleteLink(index: number): HTMLElement | null {\n const div = this.findFileDiv(index);\n if (!div) {\n return div;\n }\n\n return div.querySelector(\".dff-delete\");\n }\n\n private getTranslation(key: string) {\n return this.translations[key] ?? key;\n }\n\n private removeCancel(index: number): void {\n const cancelSpan = this.findCancelSpan(index);\n\n if (cancelSpan) {\n cancelSpan.remove();\n }\n }\n\n private removeProgress(index: number): void {\n const el = this.findFileDiv(index);\n\n if (el) {\n const progressSpan = el.querySelector(\".dff-progress\");\n\n if (progressSpan) {\n progressSpan.remove();\n }\n }\n }\n\n private setErrorMessage(index: number, message: string): void {\n const el = this.findFileDiv(index);\n if (!el) {\n return;\n }\n\n const originalMessageSpan = el.querySelector(\".dff-error\");\n if (originalMessageSpan) {\n originalMessageSpan.remove();\n }\n\n const span = document.createElement(\"span\");\n span.classList.add(\"dff-error\");\n this.setTextContent(span, message);\n\n el.appendChild(span);\n }\n\n private setTextContent(element: HTMLElement, text: string) {\n element.append(document.createTextNode(text));\n }\n}\n\nexport default RenderUploadFile;\n","export interface InitialExistingFile {\n name: string;\n size: number;\n type: \"existing\";\n}\nexport type InitialFile =\n | InitialExistingFile\n | InitialPlaceholderFile\n | InitialS3File\n | InitialTusFile;\n\nexport interface InitialPlaceholderFile {\n id: string;\n name: string;\n size: number;\n type: \"placeholder\";\n}\n\nexport interface InitialS3File {\n id: string;\n name: string;\n original_name: string;\n size: number;\n type: \"s3\";\n}\n\nexport interface InitialTusFile {\n id: string;\n name: string;\n size: number;\n type: \"tus\";\n url: string;\n}\n\nexport type UploadType =\n | \"existing\"\n | \"placeholder\"\n | \"s3\"\n | \"tus\"\n | \"uploadedS3\"\n | \"uploadedTus\";\n\ninterface UploadParameters {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n}\n\ntype UploadStatus = \"done\" | \"error\" | \"uploading\";\n\nabstract class BaseUpload {\n name: string;\n status: UploadStatus;\n type: UploadType;\n uploadIndex: number;\n\n constructor({ name, status, type, uploadIndex }: UploadParameters) {\n this.name = name;\n this.status = status;\n this.type = type;\n this.uploadIndex = uploadIndex;\n }\n\n public async abort(): Promise {\n //\n }\n public async delete(): Promise {\n //\n }\n\n public abstract getId(): string | undefined;\n public abstract getInitialFile(): InitialFile;\n public abstract getSize(): number | undefined;\n}\n\nexport default BaseUpload;\n","function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n}\n\nexport default function urlJoin() {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n}\n","import urljoin from \"url-join\";\n\nexport interface LocationInfo {\n location: string;\n}\n\nexport interface MultipartUpload {\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport interface Part {\n ETag: string;\n PartNumber: number;\n}\n\nexport interface UrlInfo {\n url: string;\n}\n\nexport const MB = 1024 * 1024;\n\ninterface AbortMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n uploadId: string;\n}\n\nexport const abortMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n uploadId\n}: AbortMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, `?key=${filename}`);\n return fetch(url, {\n headers: headers,\n method: \"delete\"\n }).then(response => {\n return response.json();\n });\n};\n\ninterface CompleteMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n parts: Part[];\n uploadId: string;\n}\n\nexport const completeMultipartUpload = ({\n csrfToken,\n endpoint,\n key,\n parts,\n uploadId\n}: CompleteMultipartUploadParameters): Promise => {\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n const headers = new Headers({\n \"X-CSRFToken\": csrfToken\n });\n const url = urljoin(endpoint, uploadIdEnc, \"complete\", `?key=${filename}`);\n return fetch(url, {\n body: JSON.stringify({\n parts: parts\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as LocationInfo;\n });\n};\n\ninterface CreateMultipartUploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n}\n\nexport const createMultipartUpload = ({\n csrfToken,\n endpoint,\n file,\n s3UploadDir\n}: CreateMultipartUploadParameters): Promise => {\n const headers = new Headers({\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n \"X-CSRFToken\": csrfToken\n });\n return fetch(endpoint, {\n body: JSON.stringify({\n contentType: file.type,\n filename: file.name,\n s3UploadDir: s3UploadDir\n }),\n headers: headers,\n method: \"post\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as MultipartUpload;\n });\n};\n\nexport const getChunkSize = (file: File): number =>\n Math.ceil(file.size / 10000);\n\ninterface PrepareUploadPartParameters {\n csrfToken: string;\n endpoint: string;\n key: string;\n number: number;\n uploadId: string;\n}\n\nexport const prepareUploadPart = ({\n csrfToken,\n endpoint,\n key,\n number,\n uploadId\n}: PrepareUploadPartParameters): Promise => {\n const filename = encodeURIComponent(key);\n const headers = new Headers({ \"X-CSRFToken\": csrfToken });\n const url = urljoin(\n endpoint,\n uploadId,\n number.toString(),\n `?key=${filename}`\n );\n return fetch(url, {\n headers: headers,\n method: \"get\"\n })\n .then(response => {\n return response.json();\n })\n .then(data => {\n return data as UrlInfo;\n });\n};\n\nexport const remove = (arr: unknown[], el: unknown): void => {\n const i = arr.indexOf(el);\n if (i !== -1) {\n arr.splice(i, 1);\n }\n};\n","// The following code is adapted from https://github.com/transloadit/uppy/blob/master/packages/%40uppy/aws-s3-multipart/src/MultipartUploader.js\n// which is released under a MIT License (https://github.com/transloadit/uppy/blob/master/LICENSE)\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport {\n abortMultipartUpload,\n completeMultipartUpload,\n createMultipartUpload,\n getChunkSize,\n MB,\n MultipartUpload,\n Part,\n prepareUploadPart,\n remove,\n UrlInfo\n} from \"./s3_utils.ts\";\n\ninterface ChunkState {\n busy: boolean;\n done: boolean;\n etag?: string;\n uploaded: number;\n}\n\ninterface S3UploadParameters {\n csrfToken: string;\n endpoint: string;\n file: File;\n s3UploadDir: string;\n uploadIndex: number;\n}\n\nclass S3Upload extends BaseUpload {\n public onError?: (error: unknown) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n\n private chunks: Blob[];\n private chunkState: ChunkState[];\n private createdPromise: Promise;\n private csrfToken: string;\n private endpoint: string;\n private file: File;\n private key: null | string;\n private parts: Part[];\n private s3UploadDir: string;\n private uploadId: null | string;\n private uploading: XMLHttpRequest[];\n\n constructor({\n csrfToken,\n endpoint,\n file,\n s3UploadDir,\n uploadIndex\n }: S3UploadParameters) {\n super({ name: file.name, status: \"uploading\", type: \"s3\", uploadIndex });\n\n this.csrfToken = csrfToken;\n this.endpoint = endpoint;\n this.file = file;\n this.s3UploadDir = s3UploadDir;\n\n this.key = null;\n this.uploadId = null;\n this.parts = [];\n\n // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n // upload was created already. That also ensures that the sequencing is right\n // (so the `OP` definitely happens if the upload is created).\n //\n // This mostly exists to make `abortUpload` work well: only sending the abort request if\n // the upload was already created, and if the createMultipartUpload request is still in flight,\n // aborting it immediately after it finishes.\n this.createdPromise = Promise.reject(new Error());\n this.chunks = [];\n this.chunkState = [];\n this.uploading = [];\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n\n this.initChunks();\n\n this.createdPromise.catch(() => ({})); // silence uncaught rejection warning\n }\n\n public async abort(): Promise {\n this.uploading.slice().forEach(xhr => {\n xhr.abort();\n });\n this.uploading = [];\n\n await this.createdPromise;\n\n if (this.key && this.uploadId) {\n await abortMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n uploadId: this.uploadId\n });\n }\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getId(): string | undefined {\n return this.uploadId ?? undefined;\n }\n\n public getInitialFile(): InitialFile {\n return {\n id: this.uploadId ?? \"\",\n name: this.key ?? \"\",\n original_name: this.file.name,\n size: this.file.size,\n type: \"s3\"\n };\n }\n\n public getSize(): number {\n return this.file.size;\n }\n\n public start(): void {\n void this.createUpload();\n }\n\n private completeUpload(): Promise {\n // Parts may not have completed uploading in sorted order, if limit > 1.\n this.parts.sort((a, b) => a.PartNumber - b.PartNumber);\n\n if (!this.uploadId || !this.key) {\n return Promise.resolve();\n }\n\n return completeMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n parts: this.parts,\n uploadId: this.uploadId\n }).then(\n () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n },\n (err: unknown) => {\n this.handleError(err as Error);\n }\n );\n }\n\n private createUpload(): Promise {\n this.createdPromise = createMultipartUpload({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n file: this.file,\n s3UploadDir: this.s3UploadDir\n });\n return this.createdPromise\n .then((result: MultipartUpload | null) => {\n const valid =\n typeof result === \"object\" &&\n result &&\n typeof result.uploadId === \"string\" &&\n typeof result.key === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.\"\n );\n }\n\n this.key = result.key;\n this.uploadId = result.uploadId;\n\n this.uploadParts();\n })\n .catch((err: unknown) => {\n this.handleError(err);\n });\n }\n\n private handleError(error: unknown): void {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n }\n\n private initChunks(): void {\n const chunks: Blob[] = [];\n const desiredChunkSize = getChunkSize(this.file);\n // at least 5MB per request, at most 10k requests\n const minChunkSize = Math.max(5 * MB, Math.ceil(this.file.size / 10000));\n const chunkSize = Math.max(desiredChunkSize, minChunkSize);\n\n for (let i = 0; i < this.file.size; i += chunkSize) {\n const end = Math.min(this.file.size, i + chunkSize);\n chunks.push(this.file.slice(i, end));\n }\n\n this.chunks = chunks;\n this.chunkState = chunks.map(() => ({\n busy: false,\n done: false,\n uploaded: 0\n }));\n }\n\n private onPartComplete(index: number, etag: string): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.etag = etag;\n state.done = true;\n }\n\n const part = {\n ETag: etag,\n PartNumber: index + 1\n };\n this.parts.push(part);\n\n this.uploadParts();\n }\n\n private onPartProgress(index: number, sent: number): void {\n const state = this.chunkState[index];\n\n if (state) {\n state.uploaded = sent;\n }\n\n if (this.onProgress) {\n const totalUploaded = this.chunkState.reduce((n, c) => n + c.uploaded, 0);\n this.onProgress(totalUploaded, this.file.size);\n }\n }\n\n private uploadPart(index: number): Promise {\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = true;\n }\n\n if (!this.key || !this.uploadId) {\n return Promise.resolve();\n }\n\n return prepareUploadPart({\n csrfToken: this.csrfToken,\n endpoint: this.endpoint,\n key: this.key,\n number: index + 1,\n uploadId: this.uploadId\n })\n .then(result => {\n const valid =\n typeof result === \"object\" && typeof result.url === \"string\";\n if (!valid) {\n throw new TypeError(\n \"AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.\"\n );\n }\n return result;\n })\n .then(\n ({ url }: UrlInfo) => {\n this.uploadPartBytes(index, url);\n },\n (err: unknown) => {\n this.handleError(err);\n }\n );\n }\n\n private uploadPartBytes(index: number, url: string): void {\n const body = this.chunks[index];\n const xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", url, true);\n xhr.responseType = \"text\";\n\n this.uploading.push(xhr);\n\n xhr.upload.addEventListener(\"progress\", ev => {\n if (!ev.lengthComputable) {\n return;\n }\n\n this.onPartProgress(index, ev.loaded);\n });\n\n xhr.addEventListener(\"abort\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n if (xhr.status < 200 || xhr.status >= 300) {\n this.handleError(new Error(\"Non 2xx\"));\n return;\n }\n\n this.onPartProgress(index, body?.size ?? 0);\n\n // NOTE This must be allowed by CORS.\n const etag = xhr.getResponseHeader(\"ETag\");\n if (etag === null) {\n this.handleError(\n new Error(\n \"AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.\"\n )\n );\n return;\n }\n\n this.onPartComplete(index, etag);\n });\n\n xhr.addEventListener(\"error\", () => {\n remove(this.uploading, xhr);\n\n const state = this.chunkState[index];\n\n if (state) {\n state.busy = false;\n }\n\n const error = new Error(\"Unknown error\");\n this.handleError(error);\n });\n xhr.send(body);\n }\n\n private uploadParts(): void {\n const need = 1 - this.uploading.length;\n if (need === 0) {\n return;\n }\n\n // All parts are uploaded.\n if (this.chunkState.every(state => state.done)) {\n void this.completeUpload();\n return;\n }\n\n const candidates = [];\n for (let i = 0; i < this.chunkState.length; i++) {\n const state = this.chunkState[i];\n\n if (!state || state.done || state.busy) {\n continue;\n }\n\n candidates.push(i);\n if (candidates.length >= need) {\n break;\n }\n }\n\n candidates.forEach(index => {\n void this.uploadPart(index);\n });\n }\n}\n\nexport default S3Upload;\n","class DetailedError extends Error {\n constructor(message, causingErr = null, req = null, res = null) {\n super(message)\n\n this.originalRequest = req\n this.originalResponse = res\n this.causingError = causingErr\n\n if (causingErr != null) {\n message += `, caused by ${causingErr.toString()}`\n }\n\n if (req != null) {\n const requestId = req.getHeader('X-Request-ID') || 'n/a'\n const method = req.getMethod()\n const url = req.getURL()\n const status = res ? res.getStatus() : 'n/a'\n const body = res ? res.getBody() || '' : 'n/a'\n message += `, originated from request (method: ${method}, url: ${url}, response code: ${status}, response text: ${body}, request id: ${requestId})`\n }\n this.message = message\n }\n}\n\nexport default DetailedError\n","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.8';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","import { Base64 } from 'js-base64'\nimport URL from 'url-parse'\nimport DetailedError from './error.js'\nimport { log } from './logger.js'\nimport uuid from './uuid.js'\n\nconst PROTOCOL_TUS_V1 = 'tus-v1'\nconst PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03'\nconst PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05'\n\nconst defaultOptions = {\n endpoint: null,\n\n uploadUrl: null,\n metadata: {},\n metadataForPartialUploads: {},\n fingerprint: null,\n uploadSize: null,\n\n onProgress: null,\n onChunkComplete: null,\n onSuccess: null,\n onError: null,\n onUploadUrlAvailable: null,\n\n overridePatchMethod: false,\n headers: {},\n addRequestId: false,\n onBeforeRequest: null,\n onAfterResponse: null,\n onShouldRetry: defaultOnShouldRetry,\n\n chunkSize: Number.POSITIVE_INFINITY,\n retryDelays: [0, 1000, 3000, 5000],\n parallelUploads: 1,\n parallelUploadBoundaries: null,\n storeFingerprintForResuming: true,\n removeFingerprintOnSuccess: false,\n uploadLengthDeferred: false,\n uploadDataDuringCreation: false,\n\n urlStorage: null,\n fileReader: null,\n httpStack: null,\n\n protocol: PROTOCOL_TUS_V1,\n}\n\nclass BaseUpload {\n constructor(file, options) {\n // Warn about removed options from previous versions\n if ('resume' in options) {\n console.log(\n 'tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.',\n )\n }\n\n // The default options will already be added from the wrapper classes.\n this.options = options\n\n // Cast chunkSize to integer\n this.options.chunkSize = Number(this.options.chunkSize)\n\n // The storage module used to store URLs\n this._urlStorage = this.options.urlStorage\n\n // The underlying File/Blob object\n this.file = file\n\n // The URL against which the file will be uploaded\n this.url = null\n\n // The underlying request object for the current PATCH request\n this._req = null\n\n // The fingerpinrt for the current file (set after start())\n this._fingerprint = null\n\n // The key that the URL storage returned when saving an URL with a fingerprint,\n this._urlStorageKey = null\n\n // The offset used in the current PATCH request\n this._offset = null\n\n // True if the current PATCH request has been aborted\n this._aborted = false\n\n // The file's size in bytes\n this._size = null\n\n // The Source object which will wrap around the given file and provides us\n // with a unified interface for getting its size and slice chunks from its\n // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n this._source = null\n\n // The current count of attempts which have been made. Zero indicates none.\n this._retryAttempt = 0\n\n // The timeout's ID which is used to delay the next retry\n this._retryTimeout = null\n\n // The offset of the remote upload before the latest attempt was started.\n this._offsetBeforeRetry = 0\n\n // An array of BaseUpload instances which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploads = null\n\n // An array of upload URLs which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploadUrls = null\n }\n\n /**\n * Use the Termination extension to delete an upload from the server by sending a DELETE\n * request to the specified upload URL. This is only possible if the server supports the\n * Termination extension. If the `options.retryDelays` property is set, the method will\n * also retry if an error ocurrs.\n *\n * @param {String} url The upload's URL which will be terminated.\n * @param {object} options Optional options for influencing HTTP requests.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n static terminate(url, options = {}) {\n const req = openRequest('DELETE', url, options)\n\n return sendRequest(req, null, options)\n .then((res) => {\n // A 204 response indicates a successfull request\n if (res.getStatus() === 204) {\n return\n }\n\n throw new DetailedError('tus: unexpected response while terminating upload', null, req, res)\n })\n .catch((err) => {\n if (!(err instanceof DetailedError)) {\n err = new DetailedError('tus: failed to terminate upload', err, req, null)\n }\n\n if (!shouldRetry(err, 0, options)) {\n throw err\n }\n\n // Instead of keeping track of the retry attempts, we remove the first element from the delays\n // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n // We recursively call the terminate function will removing elements from the retryDelays array.\n const delay = options.retryDelays[0]\n const remainingDelays = options.retryDelays.slice(1)\n const newOptions = {\n ...options,\n retryDelays: remainingDelays,\n }\n return new Promise((resolve) => setTimeout(resolve, delay)).then(() =>\n BaseUpload.terminate(url, newOptions),\n )\n })\n }\n\n findPreviousUploads() {\n return this.options\n .fingerprint(this.file, this.options)\n .then((fingerprint) => this._urlStorage.findUploadsByFingerprint(fingerprint))\n }\n\n resumeFromPreviousUpload(previousUpload) {\n this.url = previousUpload.uploadUrl || null\n this._parallelUploadUrls = previousUpload.parallelUploadUrls || null\n this._urlStorageKey = previousUpload.urlStorageKey\n }\n\n start() {\n const { file } = this\n\n if (!file) {\n this._emitError(new Error('tus: no file or stream to upload provided'))\n return\n }\n\n if (\n ![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(\n this.options.protocol,\n )\n ) {\n this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`))\n return\n }\n\n if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'))\n return\n }\n\n const { retryDelays } = this.options\n if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'))\n return\n }\n\n if (this.options.parallelUploads > 1) {\n // Test which options are incompatible with parallel uploads.\n for (const optionName of ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']) {\n if (this.options[optionName]) {\n this._emitError(\n new Error(`tus: cannot use the ${optionName} option when parallelUploads is enabled`),\n )\n return\n }\n }\n }\n\n if (this.options.parallelUploadBoundaries) {\n if (this.options.parallelUploads <= 1) {\n this._emitError(\n new Error(\n 'tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled',\n ),\n )\n return\n }\n if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n this._emitError(\n new Error(\n 'tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`',\n ),\n )\n return\n }\n }\n\n this.options\n .fingerprint(file, this.options)\n .then((fingerprint) => {\n if (fingerprint == null) {\n log(\n 'No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.',\n )\n } else {\n log(`Calculated fingerprint: ${fingerprint}`)\n }\n\n this._fingerprint = fingerprint\n\n if (this._source) {\n return this._source\n }\n return this.options.fileReader.openFile(file, this.options.chunkSize)\n })\n .then((source) => {\n this._source = source\n\n // First, we look at the uploadLengthDeferred option.\n // Next, we check if the caller has supplied a manual upload size.\n // Finally, we try to use the calculated size from the source object.\n if (this.options.uploadLengthDeferred) {\n this._size = null\n } else if (this.options.uploadSize != null) {\n this._size = Number(this.options.uploadSize)\n if (Number.isNaN(this._size)) {\n this._emitError(new Error('tus: cannot convert `uploadSize` option into a number'))\n return\n }\n } else {\n this._size = this._source.size\n if (this._size == null) {\n this._emitError(\n new Error(\n \"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\",\n ),\n )\n return\n }\n }\n\n // If the upload was configured to use multiple requests or if we resume from\n // an upload which used multiple requests, we start a parallel upload.\n if (this.options.parallelUploads > 1 || this._parallelUploadUrls != null) {\n this._startParallelUpload()\n } else {\n this._startSingleUpload()\n }\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a parallelized upload, where one file is split into\n * multiple request which are run in parallel.\n *\n * @api private\n */\n _startParallelUpload() {\n const totalSize = this._size\n let totalProgress = 0\n this._parallelUploads = []\n\n const partCount =\n this._parallelUploadUrls != null\n ? this._parallelUploadUrls.length\n : this.options.parallelUploads\n\n // The input file will be split into multiple slices which are uploaded in separate\n // requests. Here we get the start and end position for the slices.\n const parts =\n this.options.parallelUploadBoundaries ?? splitSizeIntoParts(this._source.size, partCount)\n\n // Attach URLs from previous uploads, if available.\n if (this._parallelUploadUrls) {\n parts.forEach((part, index) => {\n part.uploadUrl = this._parallelUploadUrls[index] || null\n })\n }\n\n // Create an empty list for storing the upload URLs\n this._parallelUploadUrls = new Array(parts.length)\n\n // Generate a promise for each slice that will be resolve if the respective\n // upload is completed.\n const uploads = parts.map((part, index) => {\n let lastPartProgress = 0\n\n return this._source.slice(part.start, part.end).then(\n ({ value }) =>\n new Promise((resolve, reject) => {\n // Merge with the user supplied options but overwrite some values.\n const options = {\n ...this.options,\n // If available, the partial upload should be resumed from a previous URL.\n uploadUrl: part.uploadUrl || null,\n // We take manually care of resuming for partial uploads, so they should\n // not be stored in the URL storage.\n storeFingerprintForResuming: false,\n removeFingerprintOnSuccess: false,\n // Reset the parallelUploads option to not cause recursion.\n parallelUploads: 1,\n // Reset this option as we are not doing a parallel upload.\n parallelUploadBoundaries: null,\n metadata: this.options.metadataForPartialUploads,\n // Add the header to indicate the this is a partial upload.\n headers: {\n ...this.options.headers,\n 'Upload-Concat': 'partial',\n },\n // Reject or resolve the promise if the upload errors or completes.\n onSuccess: resolve,\n onError: reject,\n // Based in the progress for this partial upload, calculate the progress\n // for the entire final upload.\n onProgress: (newPartProgress) => {\n totalProgress = totalProgress - lastPartProgress + newPartProgress\n lastPartProgress = newPartProgress\n this._emitProgress(totalProgress, totalSize)\n },\n // Wait until every partial upload has an upload URL, so we can add\n // them to the URL storage.\n onUploadUrlAvailable: () => {\n this._parallelUploadUrls[index] = upload.url\n // Test if all uploads have received an URL\n if (this._parallelUploadUrls.filter((u) => Boolean(u)).length === parts.length) {\n this._saveUploadInUrlStorage()\n }\n },\n }\n\n const upload = new BaseUpload(value, options)\n upload.start()\n\n // Store the upload in an array, so we can later abort them if necessary.\n this._parallelUploads.push(upload)\n }),\n )\n })\n\n let req\n // Wait until all partial uploads are finished and we can send the POST request for\n // creating the final upload.\n Promise.all(uploads)\n .then(() => {\n req = this._openRequest('POST', this.options.endpoint)\n req.setHeader('Upload-Concat', `final;${this._parallelUploadUrls.join(' ')}`)\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n return this._sendRequest(req, null)\n })\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n this._emitSuccess(res)\n })\n .catch((err) => {\n this._emitError(err)\n })\n }\n\n /**\n * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n * uploaded in a sequential matter.\n *\n * @api private\n */\n _startSingleUpload() {\n // Reset the aborted flag when the upload is started or else the\n // _performUpload will stop before sending a request if the upload has been\n // aborted previously.\n this._aborted = false\n\n // The upload had been started previously and we should reuse this URL.\n if (this.url != null) {\n log(`Resuming upload from previous URL: ${this.url}`)\n this._resumeUpload()\n return\n }\n\n // A URL has manually been specified, so we try to resume\n if (this.options.uploadUrl != null) {\n log(`Resuming upload from provided URL: ${this.options.uploadUrl}`)\n this.url = this.options.uploadUrl\n this._resumeUpload()\n return\n }\n\n // An upload has not started for the file yet, so we start a new one\n log('Creating a new upload')\n this._createUpload()\n }\n\n /**\n * Abort any running request and stop the current upload. After abort is called, no event\n * handler will be invoked anymore. You can use the `start` method to resume the upload\n * again.\n * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n * current upload from the server.\n *\n * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n abort(shouldTerminate) {\n // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n if (this._parallelUploads != null) {\n for (const upload of this._parallelUploads) {\n upload.abort(shouldTerminate)\n }\n }\n\n // Stop any current running request.\n if (this._req !== null) {\n this._req.abort()\n // Note: We do not close the file source here, so the user can resume in the future.\n }\n this._aborted = true\n\n // Stop any timeout used for initiating a retry.\n if (this._retryTimeout != null) {\n clearTimeout(this._retryTimeout)\n this._retryTimeout = null\n }\n\n if (!shouldTerminate || this.url == null) {\n return Promise.resolve()\n }\n\n return (\n BaseUpload.terminate(this.url, this.options)\n // Remove entry from the URL storage since the upload URL is no longer valid.\n .then(() => this._removeFromUrlStorage())\n )\n }\n\n _emitHttpError(req, res, message, causingErr) {\n this._emitError(new DetailedError(message, causingErr, req, res))\n }\n\n _emitError(err) {\n // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n if (this._aborted) return\n\n // Check if we should retry, when enabled, before sending the error to the user.\n if (this.options.retryDelays != null) {\n // We will reset the attempt counter if\n // - we were already able to connect to the server (offset != null) and\n // - we were able to upload a small chunk of data to the server\n const shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry\n if (shouldResetDelays) {\n this._retryAttempt = 0\n }\n\n if (shouldRetry(err, this._retryAttempt, this.options)) {\n const delay = this.options.retryDelays[this._retryAttempt++]\n\n this._offsetBeforeRetry = this._offset\n\n this._retryTimeout = setTimeout(() => {\n this.start()\n }, delay)\n return\n }\n }\n\n if (typeof this.options.onError === 'function') {\n this.options.onError(err)\n } else {\n throw err\n }\n }\n\n /**\n * Publishes notification if the upload has been successfully completed.\n *\n * @param {object} lastResponse Last HTTP response.\n * @api private\n */\n _emitSuccess(lastResponse) {\n if (this.options.removeFingerprintOnSuccess) {\n // Remove stored fingerprint and corresponding endpoint. This causes\n // new uploads of the same file to be treated as a different file.\n this._removeFromUrlStorage()\n }\n\n if (typeof this.options.onSuccess === 'function') {\n this.options.onSuccess({ lastResponse })\n }\n }\n\n /**\n * Publishes notification when data has been sent to the server. This\n * data may not have been accepted by the server yet.\n *\n * @param {number} bytesSent Number of bytes sent to the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitProgress(bytesSent, bytesTotal) {\n if (typeof this.options.onProgress === 'function') {\n this.options.onProgress(bytesSent, bytesTotal)\n }\n }\n\n /**\n * Publishes notification when a chunk of data has been sent to the server\n * and accepted by the server.\n * @param {number} chunkSize Size of the chunk that was accepted by the server.\n * @param {number} bytesAccepted Total number of bytes that have been\n * accepted by the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n if (typeof this.options.onChunkComplete === 'function') {\n this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal)\n }\n }\n\n /**\n * Create a new upload using the creation extension by sending a POST\n * request to the endpoint. After successful creation the file will be\n * uploaded\n *\n * @api private\n */\n _createUpload() {\n if (!this.options.endpoint) {\n this._emitError(new Error('tus: unable to create upload because no endpoint is provided'))\n return\n }\n\n const req = this._openRequest('POST', this.options.endpoint)\n\n if (this.options.uploadLengthDeferred) {\n req.setHeader('Upload-Defer-Length', '1')\n } else {\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // Add metadata if values have been added\n const metadata = encodeMetadata(this.options.metadata)\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata)\n }\n\n let promise\n if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n this._offset = 0\n promise = this._addChunkToRequest(req)\n } else {\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', '?0')\n }\n promise = this._sendRequest(req, null)\n }\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n return\n }\n\n const location = res.getHeader('Location')\n if (location == null) {\n this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n return\n }\n\n this.url = resolveUrl(this.options.endpoint, location)\n log(`Created upload at ${this.url}`)\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n if (this._size === 0) {\n // Nothing to upload and file was successfully created\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._saveUploadInUrlStorage().then(() => {\n if (this.options.uploadDataDuringCreation) {\n this._handleUploadResponse(req, res)\n } else {\n this._offset = 0\n this._performUpload()\n }\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to create upload', err)\n })\n }\n\n /*\n * Try to resume an existing upload. First a HEAD request will be sent\n * to retrieve the offset. If the request fails a new upload will be\n * created. In the case of a successful response the file will be uploaded.\n *\n * @api private\n */\n _resumeUpload() {\n const req = this._openRequest('HEAD', this.url)\n const promise = this._sendRequest(req, null)\n\n promise\n .then((res) => {\n const status = res.getStatus()\n if (!inStatusCategory(status, 200)) {\n // If the upload is locked (indicated by the 423 Locked status code), we\n // emit an error instead of directly starting a new upload. This way the\n // retry logic can catch the error and will retry the upload. An upload\n // is usually locked for a short period of time and will be available\n // afterwards.\n if (status === 423) {\n this._emitHttpError(req, res, 'tus: upload is currently locked; retry later')\n return\n }\n\n if (inStatusCategory(status, 400)) {\n // Remove stored fingerprint and corresponding endpoint,\n // on client errors since the file can not be found\n this._removeFromUrlStorage()\n }\n\n if (!this.options.endpoint) {\n // Don't attempt to create a new upload if no endpoint is provided.\n this._emitHttpError(\n req,\n res,\n 'tus: unable to resume upload (new upload cannot be created without an endpoint)',\n )\n return\n }\n\n // Try to create a new upload\n this.url = null\n this._createUpload()\n return\n }\n\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n const length = Number.parseInt(res.getHeader('Upload-Length'), 10)\n if (\n Number.isNaN(length) &&\n !this.options.uploadLengthDeferred &&\n this.options.protocol === PROTOCOL_TUS_V1\n ) {\n this._emitHttpError(req, res, 'tus: invalid or missing length value')\n return\n }\n\n if (typeof this.options.onUploadUrlAvailable === 'function') {\n this.options.onUploadUrlAvailable()\n }\n\n this._saveUploadInUrlStorage().then(() => {\n // Upload has already been completed and we do not need to send additional\n // data to the server\n if (offset === length) {\n this._emitProgress(length, length)\n this._emitSuccess(res)\n return\n }\n\n this._offset = offset\n this._performUpload()\n })\n })\n .catch((err) => {\n this._emitHttpError(req, null, 'tus: failed to resume upload', err)\n })\n }\n\n /**\n * Start uploading the file using PATCH requests. The file will be divided\n * into chunks as specified in the chunkSize option. During the upload\n * the onProgress event handler may be invoked multiple times.\n *\n * @api private\n */\n _performUpload() {\n // If the upload has been aborted, we will not send the next PATCH request.\n // This is important if the abort method was called during a callback, such\n // as onChunkComplete or onProgress.\n if (this._aborted) {\n return\n }\n\n let req\n\n // Some browser and servers may not support the PATCH method. For those\n // cases, you can tell tus-js-client to use a POST request with the\n // X-HTTP-Method-Override header for simulating a PATCH request.\n if (this.options.overridePatchMethod) {\n req = this._openRequest('POST', this.url)\n req.setHeader('X-HTTP-Method-Override', 'PATCH')\n } else {\n req = this._openRequest('PATCH', this.url)\n }\n\n req.setHeader('Upload-Offset', `${this._offset}`)\n const promise = this._addChunkToRequest(req)\n\n promise\n .then((res) => {\n if (!inStatusCategory(res.getStatus(), 200)) {\n this._emitHttpError(req, res, 'tus: unexpected response while uploading chunk')\n return\n }\n\n this._handleUploadResponse(req, res)\n })\n .catch((err) => {\n // Don't emit an error if the upload was aborted manually\n if (this._aborted) {\n return\n }\n\n this._emitHttpError(req, null, `tus: failed to upload chunk at offset ${this._offset}`, err)\n })\n }\n\n /**\n * _addChunktoRequest reads a chunk from the source and sends it using the\n * supplied request object. It will not handle the response.\n *\n * @api private\n */\n _addChunkToRequest(req) {\n const start = this._offset\n let end = this._offset + this.options.chunkSize\n\n req.setProgressHandler((bytesSent) => {\n this._emitProgress(start + bytesSent, this._size)\n })\n\n if (this.options.protocol === PROTOCOL_TUS_V1) {\n req.setHeader('Content-Type', 'application/offset+octet-stream')\n } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Content-Type', 'application/partial-upload')\n }\n\n // The specified chunkSize may be Infinity or the calcluated end position\n // may exceed the file's size. In both cases, we limit the end position to\n // the input's total size for simpler calculations and correctness.\n if (\n (end === Number.POSITIVE_INFINITY || end > this._size) &&\n !this.options.uploadLengthDeferred\n ) {\n end = this._size\n }\n\n return this._source.slice(start, end).then(({ value, done }) => {\n const valueSize = value?.size ? value.size : 0\n\n // If the upload length is deferred, the upload size was not specified during\n // upload creation. So, if the file reader is done reading, we know the total\n // upload size and can tell the tus server.\n if (this.options.uploadLengthDeferred && done) {\n this._size = this._offset + valueSize\n req.setHeader('Upload-Length', `${this._size}`)\n }\n\n // The specified uploadSize might not match the actual amount of data that a source\n // provides. In these cases, we cannot successfully complete the upload, so we\n // rather error out and let the user know. If not, tus-js-client will be stuck\n // in a loop of repeating empty PATCH requests.\n // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n const newSize = this._offset + valueSize\n if (!this.options.uploadLengthDeferred && done && newSize !== this._size) {\n return Promise.reject(\n new Error(\n `upload was configured with a size of ${this._size} bytes, but the source is done after ${newSize} bytes`,\n ),\n )\n }\n\n if (value === null) {\n return this._sendRequest(req)\n }\n\n if (\n this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n this.options.protocol === PROTOCOL_IETF_DRAFT_05\n ) {\n req.setHeader('Upload-Complete', done ? '?1' : '?0')\n }\n this._emitProgress(this._offset, this._size)\n return this._sendRequest(req, value)\n })\n }\n\n /**\n * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n * and already have received a response.\n *\n * @api private\n */\n _handleUploadResponse(req, res) {\n const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n return\n }\n\n this._emitProgress(offset, this._size)\n this._emitChunkComplete(offset - this._offset, offset, this._size)\n\n this._offset = offset\n\n if (offset === this._size) {\n // Yay, finally done :)\n this._emitSuccess(res)\n this._source.close()\n return\n }\n\n this._performUpload()\n }\n\n /**\n * Create a new HTTP request object with the given method and URL.\n *\n * @api private\n */\n _openRequest(method, url) {\n const req = openRequest(method, url, this.options)\n this._req = req\n return req\n }\n\n /**\n * Remove the entry in the URL storage, if it has been saved before.\n *\n * @api private\n */\n _removeFromUrlStorage() {\n if (!this._urlStorageKey) return\n\n this._urlStorage.removeUpload(this._urlStorageKey).catch((err) => {\n this._emitError(err)\n })\n this._urlStorageKey = null\n }\n\n /**\n * Add the upload URL to the URL storage, if possible.\n *\n * @api private\n */\n _saveUploadInUrlStorage() {\n // We do not store the upload URL\n // - if it was disabled in the option, or\n // - if no fingerprint was calculated for the input (i.e. a stream), or\n // - if the URL is already stored (i.e. key is set alread).\n if (\n !this.options.storeFingerprintForResuming ||\n !this._fingerprint ||\n this._urlStorageKey !== null\n ) {\n return Promise.resolve()\n }\n\n const storedUpload = {\n size: this._size,\n metadata: this.options.metadata,\n creationTime: new Date().toString(),\n }\n\n if (this._parallelUploads) {\n // Save multiple URLs if the parallelUploads option is used ...\n storedUpload.parallelUploadUrls = this._parallelUploadUrls\n } else {\n // ... otherwise we just save the one available URL.\n storedUpload.uploadUrl = this.url\n }\n\n return this._urlStorage.addUpload(this._fingerprint, storedUpload).then((urlStorageKey) => {\n this._urlStorageKey = urlStorageKey\n })\n }\n\n /**\n * Send a request with the provided body.\n *\n * @api private\n */\n _sendRequest(req, body = null) {\n return sendRequest(req, body, this.options)\n }\n}\n\nfunction encodeMetadata(metadata) {\n return Object.entries(metadata)\n .map(([key, value]) => `${key} ${Base64.encode(String(value))}`)\n .join(',')\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n return status >= category && status < category + 100\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n const req = options.httpStack.createRequest(method, url)\n\n if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n req.setHeader('Upload-Draft-Interop-Version', '5')\n } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Draft-Interop-Version', '6')\n } else {\n req.setHeader('Tus-Resumable', '1.0.0')\n }\n const headers = options.headers || {}\n\n for (const [name, value] of Object.entries(headers)) {\n req.setHeader(name, value)\n }\n\n if (options.addRequestId) {\n const requestId = uuid()\n req.setHeader('X-Request-ID', requestId)\n }\n\n return req\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nasync function sendRequest(req, body, options) {\n if (typeof options.onBeforeRequest === 'function') {\n await options.onBeforeRequest(req)\n }\n\n const res = await req.send(body)\n\n if (typeof options.onAfterResponse === 'function') {\n await options.onAfterResponse(req, res)\n }\n\n return res\n}\n\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction isOnline() {\n let online = true\n // Note: We don't reference `window` here because the navigator object also exists\n // in a Web Worker's context.\n if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n online = false\n }\n\n return online\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n // We only attempt a retry if\n // - retryDelays option is set\n // - we didn't exceed the maxium number of retries, yet, and\n // - this error was caused by a request or it's response and\n // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n // a onShouldRetry is specified and returns true\n // - the browser does not indicate that we are offline\n if (\n options.retryDelays == null ||\n retryAttempt >= options.retryDelays.length ||\n err.originalRequest == null\n ) {\n return false\n }\n\n if (options && typeof options.onShouldRetry === 'function') {\n return options.onShouldRetry(err, retryAttempt, options)\n }\n\n return defaultOnShouldRetry(err)\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n const status = err.originalResponse ? err.originalResponse.getStatus() : 0\n return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline()\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n return new URL(link, origin).toString()\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n const partSize = Math.floor(totalSize / partCount)\n const parts = []\n\n for (let i = 0; i < partCount; i++) {\n parts.push({\n start: partSize * i,\n end: partSize * (i + 1),\n })\n }\n\n parts[partCount - 1].end = totalSize\n\n return parts\n}\n\nBaseUpload.defaultOptions = defaultOptions\n\nexport default BaseUpload\n","/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n const v = c === 'x' ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n}\n","const isReactNative = () =>\n typeof navigator !== 'undefined' &&\n typeof navigator.product === 'string' &&\n navigator.product.toLowerCase() === 'reactnative'\n\nexport default isReactNative\n","import isCordova from './isCordova.js'\nimport readAsByteArray from './readAsByteArray.js'\n\nexport default class FileSource {\n // Make this.size a method\n constructor(file) {\n this._file = file\n this.size = file.size\n }\n\n slice(start, end) {\n // In Apache Cordova applications, a File must be resolved using\n // FileReader instances, see\n // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n if (isCordova()) {\n return readAsByteArray(this._file.slice(start, end))\n }\n\n const value = this._file.slice(start, end)\n const done = end >= this.size\n return Promise.resolve({ value, done })\n }\n\n close() {\n // Nothing to do here since we don't need to release any resources.\n }\n}\n","const isCordova = () =>\n typeof window !== 'undefined' &&\n (typeof window.PhoneGap !== 'undefined' ||\n typeof window.Cordova !== 'undefined' ||\n typeof window.cordova !== 'undefined')\n\nexport default isCordova\n","/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nexport default function readAsByteArray(chunk) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => {\n const value = new Uint8Array(reader.result)\n resolve({ value })\n }\n reader.onerror = (err) => {\n reject(err)\n }\n reader.readAsArrayBuffer(chunk)\n })\n}\n","function len(blobOrArray) {\n if (blobOrArray === undefined) return 0\n if (blobOrArray.size !== undefined) return blobOrArray.size\n return blobOrArray.length\n}\n\n/*\n Typed arrays and blobs don't have a concat method.\n This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n if (a.concat) {\n // Is `a` an Array?\n return a.concat(b)\n }\n if (a instanceof Blob) {\n return new Blob([a, b], { type: a.type })\n }\n if (a.set) {\n // Is `a` a typed array?\n const c = new a.constructor(a.length + b.length)\n c.set(a)\n c.set(b, a.length)\n return c\n }\n throw new Error('Unknown data type')\n}\n\nexport default class StreamSource {\n constructor(reader) {\n this._buffer = undefined\n this._bufferOffset = 0\n this._reader = reader\n this._done = false\n }\n\n slice(start, end) {\n if (start < this._bufferOffset) {\n return Promise.reject(new Error(\"Requested data is before the reader's current offset\"))\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n }\n\n _readUntilEnoughDataOrDone(start, end) {\n const hasEnoughData = end <= this._bufferOffset + len(this._buffer)\n if (this._done || hasEnoughData) {\n const value = this._getDataFromBuffer(start, end)\n const done = value == null ? this._done : false\n return Promise.resolve({ value, done })\n }\n\n return this._reader.read().then(({ value, done }) => {\n if (done) {\n this._done = true\n } else if (this._buffer === undefined) {\n this._buffer = value\n } else {\n this._buffer = concat(this._buffer, value)\n }\n\n return this._readUntilEnoughDataOrDone(start, end)\n })\n }\n\n _getDataFromBuffer(start, end) {\n // Remove data from buffer before `start`.\n // Data might be reread from the buffer if an upload fails, so we can only\n // safely delete data when it comes *before* what is currently being read.\n if (start > this._bufferOffset) {\n this._buffer = this._buffer.slice(start - this._bufferOffset)\n this._bufferOffset = start\n }\n // If the buffer is empty after removing old data, all data has been read.\n const hasAllDataBeenRead = len(this._buffer) === 0\n if (this._done && hasAllDataBeenRead) {\n return null\n }\n // We already removed data before `start`, so we just return the first\n // chunk from the buffer.\n return this._buffer.slice(0, end - start)\n }\n\n close() {\n if (this._reader.cancel) {\n this._reader.cancel()\n }\n }\n}\n","export default class XHRHttpStack {\n createRequest(method, url) {\n return new Request(method, url)\n }\n\n getName() {\n return 'XHRHttpStack'\n }\n}\n\nclass Request {\n constructor(method, url) {\n this._xhr = new XMLHttpRequest()\n this._xhr.open(method, url, true)\n\n this._method = method\n this._url = url\n this._headers = {}\n }\n\n getMethod() {\n return this._method\n }\n\n getURL() {\n return this._url\n }\n\n setHeader(header, value) {\n this._xhr.setRequestHeader(header, value)\n this._headers[header] = value\n }\n\n getHeader(header) {\n return this._headers[header]\n }\n\n setProgressHandler(progressHandler) {\n // Test support for progress events before attaching an event listener\n if (!('upload' in this._xhr)) {\n return\n }\n\n this._xhr.upload.onprogress = (e) => {\n if (!e.lengthComputable) {\n return\n }\n\n progressHandler(e.loaded)\n }\n }\n\n send(body = null) {\n return new Promise((resolve, reject) => {\n this._xhr.onload = () => {\n resolve(new Response(this._xhr))\n }\n\n this._xhr.onerror = (err) => {\n reject(err)\n }\n\n this._xhr.send(body)\n })\n }\n\n abort() {\n this._xhr.abort()\n return Promise.resolve()\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n\nclass Response {\n constructor(xhr) {\n this._xhr = xhr\n }\n\n getStatus() {\n return this._xhr.status\n }\n\n getHeader(header) {\n return this._xhr.getResponseHeader(header)\n }\n\n getBody() {\n return this._xhr.responseText\n }\n\n getUnderlyingObject() {\n return this._xhr\n }\n}\n","let hasStorage = false\ntry {\n // Note: localStorage does not exist in the Web Worker's context, so we must use window here.\n hasStorage = 'localStorage' in window\n\n // Attempt to store and read entries from the local storage to detect Private\n // Mode on Safari on iOS (see #49)\n // If the key was not used before, we remove it from local storage again to\n // not cause confusion where the entry came from.\n const key = 'tusSupport'\n const originalValue = localStorage.getItem(key)\n localStorage.setItem(key, originalValue)\n if (originalValue === null) localStorage.removeItem(key)\n} catch (e) {\n // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n // thrown (see #49)\n if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n hasStorage = false\n } else {\n throw e\n }\n}\n\nexport const canStoreURLs = hasStorage\n\nexport class WebStorageUrlStorage {\n findAllUploads() {\n const results = this._findEntries('tus::')\n return Promise.resolve(results)\n }\n\n findUploadsByFingerprint(fingerprint) {\n const results = this._findEntries(`tus::${fingerprint}::`)\n return Promise.resolve(results)\n }\n\n removeUpload(urlStorageKey) {\n localStorage.removeItem(urlStorageKey)\n return Promise.resolve()\n }\n\n addUpload(fingerprint, upload) {\n const id = Math.round(Math.random() * 1e12)\n const key = `tus::${fingerprint}::${id}`\n\n localStorage.setItem(key, JSON.stringify(upload))\n return Promise.resolve(key)\n }\n\n _findEntries(prefix) {\n const results = []\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key.indexOf(prefix) !== 0) continue\n\n try {\n const upload = JSON.parse(localStorage.getItem(key))\n upload.urlStorageKey = key\n\n results.push(upload)\n } catch (_e) {\n // The JSON parse error is intentionally ignored here, so a malformed\n // entry in the storage cannot prevent an upload.\n }\n }\n\n return results\n }\n}\n","import DetailedError from '../error.js'\nimport { enableDebugLog } from '../logger.js'\nimport NoopUrlStorage from '../noopUrlStorage.js'\nimport BaseUpload from '../upload.js'\n\nimport FileReader from './fileReader.js'\nimport fingerprint from './fileSignature.js'\nimport DefaultHttpStack from './httpStack.js'\nimport { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js'\n\nconst defaultOptions = {\n ...BaseUpload.defaultOptions,\n httpStack: new DefaultHttpStack(),\n fileReader: new FileReader(),\n urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n fingerprint,\n}\n\nclass Upload extends BaseUpload {\n constructor(file = null, options = {}) {\n options = { ...defaultOptions, ...options }\n super(file, options)\n }\n\n static terminate(url, options = {}) {\n options = { ...defaultOptions, ...options }\n return BaseUpload.terminate(url, options)\n }\n}\n\n// Note: We don't reference `window` here because these classes also exist in a Web Worker's context.\nconst isSupported =\n typeof XMLHttpRequest === 'function' &&\n typeof Blob === 'function' &&\n typeof Blob.prototype.slice === 'function'\n\nexport {\n Upload,\n canStoreURLs,\n defaultOptions,\n isSupported,\n enableDebugLog,\n DefaultHttpStack,\n DetailedError,\n}\n","import isReactNative from './isReactNative.js'\nimport uriToBlob from './uriToBlob.js'\n\nimport FileSource from './sources/FileSource.js'\nimport StreamSource from './sources/StreamSource.js'\n\nexport default class FileReader {\n async openFile(input, chunkSize) {\n // In React Native, when user selects a file, instead of a File or Blob,\n // you usually get a file object {} with a uri property that contains\n // a local path to the file. We use XMLHttpRequest to fetch\n // the file blob, before uploading with tus.\n if (isReactNative() && input && typeof input.uri !== 'undefined') {\n try {\n const blob = await uriToBlob(input.uri)\n return new FileSource(blob)\n } catch (err) {\n throw new Error(\n `tus: cannot fetch \\`file.uri\\` as Blob, make sure the uri is correct and accessible. ${err}`,\n )\n }\n }\n\n // Since we emulate the Blob type in our tests (not all target browsers\n // support it), we cannot use `instanceof` for testing whether the input value\n // can be handled. Instead, we simply check is the slice() function and the\n // size property are available.\n if (typeof input.slice === 'function' && typeof input.size !== 'undefined') {\n return Promise.resolve(new FileSource(input))\n }\n\n if (typeof input.read === 'function') {\n chunkSize = Number(chunkSize)\n if (!Number.isFinite(chunkSize)) {\n return Promise.reject(\n new Error(\n 'cannot create source for stream without a finite value for the `chunkSize` option',\n ),\n )\n }\n\n return Promise.resolve(new StreamSource(input, chunkSize))\n }\n\n return Promise.reject(\n new Error(\n 'source object may only be an instance of File, Blob, or Reader in this environment',\n ),\n )\n }\n}\n","/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nexport default function uriToBlob(uri) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n xhr.responseType = 'blob'\n xhr.onload = () => {\n const blob = xhr.response\n resolve(blob)\n }\n xhr.onerror = (err) => {\n reject(err)\n }\n xhr.open('GET', uri)\n xhr.send()\n })\n}\n","export default class NoopUrlStorage {\n listAllUploads() {\n return Promise.resolve([])\n }\n\n findUploadsByFingerprint(_fingerprint) {\n return Promise.resolve([])\n }\n\n removeUpload(_urlStorageKey) {\n return Promise.resolve()\n }\n\n addUpload(_fingerprint, _upload) {\n return Promise.resolve(null)\n }\n}\n","import isReactNative from './isReactNative.js'\n\n// TODO: Differenciate between input types\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nexport default function fingerprint(file, options) {\n if (isReactNative()) {\n return Promise.resolve(reactNativeFingerprint(file, options))\n }\n\n return Promise.resolve(\n ['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'),\n )\n}\n\nfunction reactNativeFingerprint(file, options) {\n const exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif'\n return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join(\n '/',\n )\n}\n\nfunction hashCode(str) {\n // from https://stackoverflow.com/a/8831937/151666\n let hash = 0\n if (str.length === 0) {\n return hash\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash &= hash // Convert to 32bit integer\n }\n return hash\n}\n","export const deleteUpload = async (\n url: string,\n csrfToken: string\n): Promise =>\n new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"DELETE\", url);\n\n xhr.onload = (): void => {\n if (xhr.status === 204) {\n resolve();\n } else {\n reject(new Error());\n }\n };\n xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n xhr.setRequestHeader(\"X-CSRFToken\", csrfToken);\n xhr.send(null);\n });\n","import { HttpRequest, HttpResponse, Upload } from \"tus-js-client\";\n\nimport BaseUpload, { InitialFile } from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface Parameters {\n chunkSize: number;\n csrfToken: string;\n fieldName: string;\n file: File;\n formId: string;\n retryDelays: null | number[];\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport default class TusUpload extends BaseUpload {\n public onError?: (error: Error) => void;\n public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n public onSuccess?: () => void;\n private csrfToken: string;\n private id: string;\n private upload: Upload;\n\n constructor({\n chunkSize,\n csrfToken,\n fieldName,\n file,\n formId,\n retryDelays,\n uploadIndex,\n uploadUrl\n }: Parameters) {\n super({ name: file.name, status: \"uploading\", type: \"tus\", uploadIndex });\n\n this.csrfToken = csrfToken;\n\n this.upload = new Upload(file, {\n chunkSize,\n endpoint: uploadUrl,\n metadata: {\n fieldName: fieldName,\n filename: file.name,\n formId: formId\n },\n onAfterResponse: this.handleAfterReponse,\n onBeforeRequest: this.addCsrTokenToRequest,\n onError: this.handleError,\n onProgress: this.handleProgress,\n onSuccess: this.handleSucces,\n retryDelays: retryDelays ?? [0, 1000, 3000, 5000]\n });\n\n this.onError = undefined;\n this.onProgress = undefined;\n this.onSuccess = undefined;\n }\n\n public async abort(): Promise {\n await this.upload.abort(true);\n }\n\n public async delete(): Promise {\n if (!this.upload.url) {\n return Promise.resolve();\n }\n\n await deleteUpload(this.upload.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialFile {\n return {\n id: this.id,\n name: this.name,\n size: this.getSize(),\n type: \"tus\",\n url: \"\"\n };\n }\n\n public getSize(): number {\n return (this.upload.file as File).size;\n }\n\n public start(): void {\n this.upload.start();\n }\n\n private addCsrTokenToRequest = (request: HttpRequest) => {\n request.setHeader(\"X-CSRFToken\", this.csrfToken);\n };\n\n private handleAfterReponse = (\n _request: HttpRequest,\n response: HttpResponse\n ) => {\n const resourceId = response.getHeader(\"ResourceId\");\n\n if (resourceId) {\n this.id = resourceId;\n }\n };\n\n private handleError = (error: Error) => {\n if (this.onError) {\n this.onError(error);\n } else {\n throw error;\n }\n };\n\n private handleProgress = (bytesUploaded: number, bytesTotal: number) => {\n if (this.onProgress) {\n this.onProgress(bytesUploaded, bytesTotal);\n }\n };\n\n private handleSucces = () => {\n if (this.onSuccess) {\n this.onSuccess();\n }\n };\n}\n","import BaseUpload, {\n InitialExistingFile,\n InitialFile,\n InitialPlaceholderFile,\n InitialS3File,\n InitialTusFile,\n UploadType\n} from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface BaseUploadedFileParameters {\n name: string;\n size: number;\n type: UploadType;\n uploadIndex: number;\n}\n\ninterface UploadedFileParameters {\n csrfToken: string;\n initialFile: InitialFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\ninterface UploadedTusFileParameters {\n csrfToken: string;\n initialFile: InitialTusFile;\n uploadIndex: number;\n uploadUrl: string;\n}\n\nexport abstract class BaseUploadedFile extends BaseUpload {\n size: number;\n\n constructor({ name, size, type, uploadIndex }: BaseUploadedFileParameters) {\n super({ name, status: \"done\", type, uploadIndex });\n\n this.size = size;\n }\n\n public async abort(): Promise {\n return Promise.resolve();\n }\n\n public async delete(): Promise {\n return Promise.resolve();\n }\n\n public getSize(): number | undefined {\n return this.size;\n }\n}\n\nclass PlaceholderFile extends BaseUploadedFile {\n id: string;\n\n constructor(initialFile: InitialPlaceholderFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"placeholder\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialPlaceholderFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"placeholder\"\n };\n }\n}\n\nexport class ExistingFile extends BaseUploadedFile {\n constructor(initialFile: InitialExistingFile, uploadIndex: number) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"existing\",\n uploadIndex\n });\n }\n\n public getId(): string | undefined {\n return undefined;\n }\n\n public getInitialFile(): InitialExistingFile {\n return {\n name: this.name,\n size: this.size,\n type: \"existing\"\n };\n }\n}\n\nexport class UploadedS3File extends BaseUploadedFile {\n id: string;\n key: string;\n\n constructor(initialFile: InitialS3File, uploadIndex: number) {\n super({\n name: initialFile.original_name || initialFile.name,\n size: initialFile.size,\n type: \"uploadedS3\",\n uploadIndex\n });\n\n this.id = initialFile.id;\n this.key = initialFile.name;\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialS3File {\n return {\n id: this.id,\n name: this.key,\n original_name: this.name,\n size: this.size,\n type: \"s3\"\n };\n }\n}\n\nexport class UploadedTusFile extends BaseUploadedFile {\n csrfToken: string;\n id: string;\n url: string;\n\n constructor({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n }: UploadedTusFileParameters) {\n super({\n name: initialFile.name,\n size: initialFile.size,\n type: \"uploadedTus\",\n uploadIndex\n });\n\n this.csrfToken = csrfToken;\n this.id = initialFile.id;\n this.url = `${uploadUrl}${initialFile.id}`;\n }\n\n public async delete(): Promise {\n await deleteUpload(this.url, this.csrfToken);\n }\n\n public getId(): string | undefined {\n return this.id;\n }\n\n getInitialFile(): InitialTusFile {\n return {\n id: this.id,\n name: this.name,\n size: this.size,\n type: \"tus\",\n url: \"\"\n };\n }\n}\n\nexport const createUploadedFile = ({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n}: UploadedFileParameters): BaseUploadedFile => {\n switch (initialFile.type) {\n case \"existing\":\n return new ExistingFile(initialFile, uploadIndex);\n\n case \"placeholder\":\n return new PlaceholderFile(initialFile, uploadIndex);\n\n case \"s3\":\n return new UploadedS3File(initialFile, uploadIndex);\n\n case \"tus\":\n return new UploadedTusFile({\n csrfToken,\n initialFile,\n uploadIndex,\n uploadUrl\n });\n }\n};\n","import { EventEmitter } from \"eventemitter3\";\n\nimport AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport DropArea from \"./drop_area.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\nimport BaseUpload, { InitialFile, UploadType } from \"./uploads/base_upload.ts\";\nimport S3Upload from \"./uploads/s3_upload.ts\";\nimport TusUpload from \"./uploads/tus_upload.ts\";\nimport { createUploadedFile } from \"./uploads/uploaded_file.ts\";\nimport {\n findInput,\n getMetadataFieldName,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Callbacks {\n onClick?: ({ fieldName, fileName, type }: ClickEvent) => void;\n onDelete?: (upload: BaseUpload) => void;\n onError?: (error: unknown, upload: BaseUpload) => void;\n onProgress?: (\n bytesUploaded: number,\n bytesTotal: number,\n upload: BaseUpload\n ) => void;\n onSuccess?: (upload: BaseUpload) => void;\n}\n\nexport type Translations = Record;\n\ninterface ClickEvent {\n fieldName: string;\n fileName: string;\n id?: string;\n type: UploadType;\n}\n\ninterface ConstructorParams {\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n initial: InitialFile[];\n input: HTMLInputElement;\n multiple: boolean;\n parent: Element;\n prefix: null | string;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n skipRequired: boolean;\n supportDropArea: boolean;\n translations: Translations;\n uploadUrl: string;\n}\n\nclass FileField {\n acceptedFileTypes: AcceptedFileTypes;\n callbacks: Callbacks;\n chunkSize: number;\n csrfToken: string;\n eventEmitter?: EventEmitter;\n fieldName: string;\n form: Element;\n formId: string;\n multiple: boolean;\n nextUploadIndex: number;\n prefix: null | string;\n renderer: RenderUploadFile;\n retryDelays: null | number[];\n s3UploadDir: null | string;\n supportDropArea: boolean;\n uploads: BaseUpload[];\n uploadUrl: string;\n\n constructor({\n callbacks,\n chunkSize,\n csrfToken,\n eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent,\n prefix,\n retryDelays,\n s3UploadDir,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n }: ConstructorParams) {\n this.callbacks = callbacks;\n this.chunkSize = chunkSize;\n this.csrfToken = csrfToken;\n this.eventEmitter = eventEmitter;\n this.fieldName = fieldName;\n this.form = form;\n this.formId = formId;\n this.multiple = multiple;\n this.prefix = prefix;\n this.retryDelays = retryDelays;\n this.s3UploadDir = s3UploadDir;\n this.supportDropArea = supportDropArea && !input.disabled;\n this.uploadUrl = uploadUrl;\n this.acceptedFileTypes = new AcceptedFileTypes(input.accept);\n\n this.uploads = [];\n this.nextUploadIndex = 0;\n\n this.renderer = new RenderUploadFile({\n input,\n parent,\n skipRequired,\n translations\n });\n const filesContainer = this.renderer.container;\n\n if (supportDropArea) {\n this.initDropArea(filesContainer, input.accept);\n }\n\n this.addInitialFiles(initial);\n\n this.checkDropHint();\n\n input.addEventListener(\"change\", this.onChange);\n filesContainer.addEventListener(\"click\", this.handleClick);\n }\n\n addInitialFiles(initialFiles: InitialFile[]): void {\n if (initialFiles.length === 0) {\n return;\n }\n\n const { multiple, renderer } = this;\n\n const addInitialFile = (initialFile: InitialFile): void => {\n const { size } = initialFile;\n const name =\n initialFile.type === \"s3\" && initialFile.original_name\n ? initialFile.original_name\n : initialFile.name;\n\n const element = renderer.addUploadedFile(\n name,\n this.nextUploadIndex,\n size\n );\n\n const upload = createUploadedFile({\n csrfToken: this.csrfToken,\n initialFile,\n uploadIndex: this.nextUploadIndex,\n uploadUrl: this.uploadUrl\n });\n this.uploads.push(upload);\n\n this.emitEvent(\"addUpload\", element, upload);\n };\n\n if (multiple) {\n initialFiles.forEach((file: InitialFile): void => {\n addInitialFile(file);\n this.nextUploadIndex += 1;\n });\n } else {\n const initialFile = initialFiles[0];\n\n if (initialFile) {\n addInitialFile(initialFile);\n }\n }\n }\n\n checkDropHint(): void {\n if (!this.supportDropArea) {\n return;\n }\n\n const nonEmptyUploads = this.uploads.filter(e => Boolean(e));\n\n if (nonEmptyUploads.length === 0) {\n this.renderer.renderDropHint();\n } else {\n this.renderer.removeDropHint();\n }\n }\n\n emitEvent(eventName: string, element: HTMLElement, upload: BaseUpload): void {\n if (this.eventEmitter) {\n this.eventEmitter.emit(eventName, {\n element,\n fieldName: this.fieldName,\n fileName: upload.name,\n metaDataField: this.getMetaDataField(),\n upload\n });\n }\n }\n\n findUploadByName(fileName: string): BaseUpload | undefined {\n return this.uploads.find(upload => upload.name === fileName);\n }\n\n getMetaDataField(): HTMLElement | null {\n return findInput(\n this.form,\n getMetadataFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n }\n\n getUploadByIndex(uploadIndex: number): BaseUpload | undefined {\n return this.uploads.find(upload => upload.uploadIndex === uploadIndex);\n }\n\n async handleCancel(upload: BaseUpload): Promise {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n this.removeUploadFromList(upload);\n }\n\n handleClick = (e: Event): void => {\n const target = e.target as HTMLElement;\n\n const getUpload = (): BaseUpload | undefined => {\n const dataIndex = target.getAttribute(\"data-index\");\n\n if (!dataIndex) {\n return undefined;\n }\n\n const uploadIndex = parseInt(dataIndex, 10);\n return this.getUploadByIndex(uploadIndex);\n };\n\n if (\n target.classList.contains(\"dff-delete\") &&\n !target.classList.contains(\"dff-disabled\")\n ) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.removeExistingUpload(upload);\n }\n } else if (target.classList.contains(\"dff-cancel\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload) {\n void this.handleCancel(upload);\n }\n } else if (target.classList.contains(\"dff-filename\")) {\n e.preventDefault();\n\n const upload = getUpload();\n\n if (upload?.status === \"done\" && this.callbacks.onClick) {\n this.callbacks.onClick({\n fieldName: this.fieldName,\n fileName: upload.name,\n id: upload.getId(),\n type: upload.type\n });\n }\n }\n };\n\n handleError = (upload: BaseUpload, error: unknown): void => {\n this.renderer.setError(upload.uploadIndex);\n upload.status = \"error\";\n\n const { onError } = this.callbacks;\n\n if (onError) {\n if (upload instanceof TusUpload) {\n onError(error, upload);\n }\n }\n };\n\n handleInvalidFiles = (files: File[]): void => {\n this.renderer.setErrorInvalidFiles(files);\n };\n\n handleProgress = (\n upload: BaseUpload,\n bytesUploaded: number,\n bytesTotal: number\n ): void => {\n const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);\n\n this.renderer.updateProgress(upload.uploadIndex, percentage);\n\n const { onProgress } = this.callbacks;\n\n if (onProgress) {\n if (upload instanceof TusUpload) {\n onProgress(bytesUploaded, bytesTotal, upload);\n }\n }\n };\n\n handleSuccess = (upload: BaseUpload): void => {\n const { renderer } = this;\n\n this.updatePlaceholderInput();\n\n renderer.clearInput();\n renderer.setSuccess(upload.uploadIndex, upload.getSize());\n upload.status = \"done\";\n\n const { onSuccess } = this.callbacks;\n\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"uploadComplete\", element, upload);\n }\n\n if (onSuccess && upload.type === \"tus\") {\n onSuccess(upload);\n }\n };\n\n initDropArea(container: Element, inputAccept: string): void {\n new DropArea({\n container,\n inputAccept,\n onUploadFiles: this.uploadFiles,\n renderer: this.renderer\n });\n }\n\n onChange = (e: Event): void => {\n const files = (e.target as HTMLInputElement).files ?? ([] as File[]);\n const acceptedFiles: File[] = [];\n const invalidFiles: File[] = [];\n\n for (const file of files) {\n if (this.acceptedFileTypes.isAccepted(file.name)) {\n acceptedFiles.push(file);\n } else {\n invalidFiles.push(file);\n }\n }\n\n this.handleInvalidFiles([...invalidFiles]);\n void this.uploadFiles([...acceptedFiles]);\n\n this.renderer.clearInput();\n };\n\n async removeExistingUpload(upload: BaseUpload): Promise {\n const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n if (element) {\n this.emitEvent(\"removeUpload\", element, upload);\n }\n\n if (upload.status === \"uploading\") {\n this.renderer.disableCancel(upload.uploadIndex);\n await upload.abort();\n } else if (upload.status === \"done\") {\n this.renderer.disableDelete(upload.uploadIndex);\n\n try {\n await upload.delete();\n } catch {\n this.renderer.setDeleteFailed(upload.uploadIndex);\n return;\n }\n }\n\n this.removeUploadFromList(upload);\n this.updatePlaceholderInput();\n }\n\n removeUploadFromList(upload: BaseUpload): void {\n this.renderer.deleteFile(upload.uploadIndex);\n\n const index = this.uploads.indexOf(upload);\n\n if (index >= 0) {\n this.uploads.splice(index, 1);\n }\n\n this.checkDropHint();\n\n const { onDelete } = this.callbacks;\n\n if (onDelete) {\n onDelete(upload);\n }\n }\n\n updatePlaceholderInput(): void {\n const input = findInput(\n this.form,\n getUploadsFieldName(this.fieldName, this.prefix),\n this.prefix\n );\n if (!input) {\n return;\n }\n\n const placeholdersInfo: InitialFile[] = this.uploads.map(upload =>\n upload.getInitialFile()\n );\n\n input.value = JSON.stringify(placeholdersInfo);\n }\n\n async uploadFile(file: File): Promise {\n const createUpload = (): S3Upload | TusUpload => {\n const { csrfToken, s3UploadDir } = this;\n\n if (s3UploadDir != null) {\n return new S3Upload({\n csrfToken,\n endpoint: uploadUrl,\n file,\n s3UploadDir,\n uploadIndex: newUploadIndex\n });\n } else {\n return new TusUpload({\n chunkSize: this.chunkSize,\n csrfToken: this.csrfToken,\n fieldName,\n file,\n formId,\n retryDelays: this.retryDelays,\n uploadIndex: newUploadIndex,\n uploadUrl\n });\n }\n };\n\n const { fieldName, formId, renderer, uploadUrl } = this;\n const fileName = file.name;\n const existingUpload = this.findUploadByName(fileName);\n const newUploadIndex = existingUpload\n ? existingUpload.uploadIndex\n : this.nextUploadIndex;\n\n if (!existingUpload) {\n this.nextUploadIndex += 1;\n }\n\n if (existingUpload) {\n await this.removeExistingUpload(existingUpload);\n }\n\n const upload = createUpload();\n\n upload.onError = (error: unknown) => {\n this.handleError(upload, error);\n };\n upload.onProgress = (bytesUploaded, bytesTotal) => {\n this.handleProgress(upload, bytesUploaded, bytesTotal);\n };\n upload.onSuccess = () => {\n this.handleSuccess(upload);\n };\n upload.start();\n\n this.uploads.push(upload);\n\n const element = renderer.addNewUpload(fileName, newUploadIndex);\n this.emitEvent(\"addUpload\", element, upload);\n }\n\n uploadFiles = async (files: File[]): Promise => {\n if (files.length === 0) {\n return;\n }\n\n if (!this.multiple) {\n for (const upload of this.uploads) {\n this.renderer.deleteFile(upload.uploadIndex);\n }\n\n this.uploads = [];\n const file = files[0];\n\n if (file) {\n await this.uploadFile(file);\n }\n } else {\n for (const file of files) {\n await this.uploadFile(file);\n }\n }\n\n this.checkDropHint();\n };\n}\n\nexport default FileField;\n","import { EventEmitter } from \"eventemitter3\";\n\nimport FileField, { Callbacks, Translations } from \"./file_field.ts\";\nimport { InitialFile } from \"./uploads/base_upload.ts\";\nimport {\n findInput,\n getInputValueForFormAndPrefix,\n getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Options {\n callbacks?: Callbacks;\n chunkSize?: number;\n eventEmitter?: EventEmitter;\n prefix?: string;\n retryDelays?: number[];\n skipRequired?: boolean;\n supportDropArea?: boolean;\n}\n\nconst initUploadFields = (form: Element, options: Options = {}): void => {\n const matchesPrefix = (fieldName: string): boolean => {\n if (!options.prefix) {\n return true;\n }\n\n return fieldName.startsWith(`${options.prefix}-`);\n };\n\n const getPrefix = (): null | string => options.prefix ?? null;\n\n const getInputValue = (fieldName: string): string | undefined =>\n getInputValueForFormAndPrefix(form, fieldName, getPrefix());\n\n const getInitialFiles = (fieldName: string): InitialFile[] => {\n const data = getInputValue(getUploadsFieldName(fieldName, getPrefix()));\n\n if (!data) {\n return [];\n }\n\n return (JSON.parse(data) as Record[]).filter(\n file => file.type\n ) as unknown as InitialFile[];\n };\n\n const uploadUrl = getInputValue(\"upload_url\");\n const formId = getInputValue(\"form_id\");\n const s3UploadDir = getInputValue(\"s3_upload_dir\");\n const skipRequired = options.skipRequired ?? false;\n const prefix = getPrefix();\n const csrfToken = findInput(form, \"csrfmiddlewaretoken\", null)?.value;\n\n if (!csrfToken) {\n throw Error(\"Csrf token not found\");\n }\n\n if (!formId || !uploadUrl) {\n return;\n }\n\n form.querySelectorAll(\".dff-uploader\").forEach(uploaderDiv => {\n const container = uploaderDiv.querySelector(\".dff-container\");\n\n if (!container) {\n return;\n }\n\n const input = container.querySelector(\"input[type=file]\");\n\n if (!(input && matchesPrefix(input.name))) {\n return;\n }\n\n const fieldName = input.name;\n const { multiple } = input;\n const initial = getInitialFiles(fieldName);\n const dataTranslations = container.getAttribute(\"data-translations\");\n const translations: Translations = dataTranslations\n ? (JSON.parse(dataTranslations) as Translations)\n : {};\n const supportDropArea = !(options.supportDropArea === false);\n\n new FileField({\n callbacks: options.callbacks ?? {},\n chunkSize: options.chunkSize ?? 2621440,\n csrfToken,\n eventEmitter: options.eventEmitter,\n fieldName,\n form,\n formId,\n initial,\n input,\n multiple,\n parent: container,\n prefix,\n retryDelays: options.retryDelays ?? null,\n s3UploadDir: s3UploadDir ?? null,\n skipRequired,\n supportDropArea,\n translations,\n uploadUrl\n });\n });\n};\n\nexport default initUploadFields;\n","import autoInitFileForms from \"./auto_init_file_forms.ts\";\nimport initFormSet from \"./init_form_set.ts\";\nimport initUploadFields from \"./init_upload_fields.ts\";\n\ndeclare const window: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nwindow.autoInitFileForms = autoInitFileForms; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initFormSet = initFormSet; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\nwindow.initUploadFields = initUploadFields; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n","import initUploadFields, { Options } from \"./init_upload_fields.ts\";\nimport {\n getInputNameWithPrefix,\n getInputValueForFormAndPrefix\n} from \"./util.ts\";\n\nconst initFormSet = (\n form: HTMLFormElement,\n optionsParam: Options | string\n): void => {\n let options: Options;\n\n if (typeof optionsParam === \"string\") {\n options = { prefix: optionsParam };\n } else {\n options = optionsParam;\n }\n\n const prefix = options.prefix ?? \"form\";\n\n const totalFormsValue = getInputValueForFormAndPrefix(\n form,\n \"TOTAL_FORMS\",\n prefix\n );\n\n if (!totalFormsValue) {\n return;\n }\n\n const formCount = parseInt(totalFormsValue, 10);\n\n for (let i = 0; i < formCount; i += 1) {\n const subFormPrefix = getInputNameWithPrefix(i.toString(), null);\n initUploadFields(form, {\n ...options,\n prefix: `${prefix}-${subFormPrefix}`\n });\n }\n};\n\nexport default initFormSet;\n"],"names":["findForm","element","parent","parentElement","tagName","types","Object","freeze","_Mime_extensionToType","_Mime_typeToExtension","_Mime_typeToExtensions","__classPrivateFieldGet","this","receiver","state","kind","f","TypeError","has","call","value","get","WeakMap","mime","constructor","args","set","Map","arg","define","typeMap","force","type","extensions","entries","toLowerCase","map","ext","Set","allExtensions","first","extension","starred","startsWith","slice","add","currentType","Error","getType","path","last","replace","hasPath","length","getExtension","split","trim","getAllExtensions","_freeze","values","_getTestState","standardTypes","WIN_SLASH","WIN_NO_SLASH","DOT_LITERAL","SLASH_LITERAL","QMARK","END_ANCHOR","START_ANCHOR","DOTS_SLASH","POSIX_CHARS","PLUS_LITERAL","QMARK_LITERAL","ONE_CHAR","NO_DOT","NO_DOTS","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK_NO_DOT","STAR","SEP","WINDOWS_CHARS","constants","MAX_LENGTH","POSIX_REGEX_SOURCE","alnum","alpha","ascii","blank","cntrl","digit","graph","lower","print","punct","space","upper","word","xdigit","REGEX_BACKSLASH","REGEX_NON_SPECIAL_CHARS","REGEX_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_BACKREF","REGEX_SPECIAL_CHARS_GLOBAL","REGEX_REMOVE_BACKSLASH","REPLACEMENTS","__proto__","CHAR_0","CHAR_9","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_ASTERISK","CHAR_AMPERSAND","CHAR_AT","CHAR_BACKWARD_SLASH","CHAR_CARRIAGE_RETURN","CHAR_CIRCUMFLEX_ACCENT","CHAR_COLON","CHAR_COMMA","CHAR_DOT","CHAR_DOUBLE_QUOTE","CHAR_EQUAL","CHAR_EXCLAMATION_MARK","CHAR_FORM_FEED","CHAR_FORWARD_SLASH","CHAR_GRAVE_ACCENT","CHAR_HASH","CHAR_HYPHEN_MINUS","CHAR_LEFT_ANGLE_BRACKET","CHAR_LEFT_CURLY_BRACE","CHAR_LEFT_SQUARE_BRACKET","CHAR_LINE_FEED","CHAR_NO_BREAK_SPACE","CHAR_PERCENT","CHAR_PLUS","CHAR_QUESTION_MARK","CHAR_RIGHT_ANGLE_BRACKET","CHAR_RIGHT_CURLY_BRACE","CHAR_RIGHT_SQUARE_BRACKET","CHAR_SEMICOLON","CHAR_SINGLE_QUOTE","CHAR_SPACE","CHAR_TAB","CHAR_UNDERSCORE","CHAR_VERTICAL_LINE","CHAR_ZERO_WIDTH_NOBREAK_SPACE","extglobChars","chars","open","close","globChars","win32","require$$0","exports","isObject","val","Array","isArray","hasRegexChars","str","test","isRegexChar","escapeRegex","toPosixSlashes","isWindows","navigator","platform","process","removeBackslashes","match","escapeLast","input","char","lastIdx","idx","lastIndexOf","removePrefix","output","prefix","wrapOutput","options","contains","negated","basename","windows","segs","utils","require$$1","isPathSeparator","code","depth","token","isPrefix","isGlobstar","Infinity","scan_1","opts","scanToEnd","parts","slashes","tokens","prev","index","start","lastIndex","isBrace","isBracket","isGlob","isExtglob","braceEscaped","backslashes","negatedExtglob","finished","braces","eos","peek","charCodeAt","advance","next","noext","nonegate","noparen","push","base","glob","unescape","maxDepth","prevIndex","n","i","expandRange","sort","join","RegExp","ex","v","syntaxError","parse","max","maxLength","Math","min","len","SyntaxError","bos","prepend","capture","PLATFORM_CHARS","EXTGLOB_CHARS","globstar","dot","nodot","qmarkNoDot","star","bash","noextglob","consumed","backtrack","brackets","parens","quotes","extglobs","stack","remaining","consume","num","append","negate","count","increment","decrement","pop","tok","extglob","inner","extglobOpen","conditions","extglobClose","rest","extglobStar","includes","expression","fastpaths","m","esc","repeat","exec","posix","pre","indexOf","keepQuotes","strictBrackets","nobracket","prevValue","literalBrackets","escaped","nobrace","outputIndex","tokensIndex","brace","dots","arr","range","unshift","comma","out","toks","t","regex","noglobstar","prior","before","isStart","afterStar","after","strictSlashes","end","suffix","slashDot","create","source","parse_1","scan","require$$2","require$$3","picomatch","returnState","fns","arrayMatcher","isMatch","isState","compileRe","makeRe","isIgnored","ignore","ignoreOpts","onMatch","onResult","matcher","returnObject","result","onIgnore","format","matchBase","Boolean","patterns","pattern","p","returnOutput","toRegex","parsed","flags","nocase","err","debug","picomatch_1","AcceptedFileTypes","inputAccept","mimeTypes","mimeType","filter","forEach","fileType","parseInputAccept","isAccepted","fileName","isMimeTypeAccepted","isExtensionAccepted","getFilesFromFileSystemEntry","async","entry","isFile","file","Promise","resolve","reject","fileEntry","getFileFromFileSystemFileEntry","isDirectory","entriesFromDirectory","directoryEntry","createReader","readEntries","getEntriesFromDirectory","files","getFilesFromFileSystemEntries","DropArea","container","onUploadFiles","renderer","acceptedFileTypes","addEventListener","classList","remove","e","preventDefault","onDrop","dragEvent","stopPropagation","dataTransfer","items","item","fileSystemEntry","webkitGetAsEntry","getAsFile","getFilesFromDataTransfer","acceptedFiles","invalidFiles","name","setErrorInvalidFiles","error","console","uploadFiles","matchHtmlRegExp","escapeHtml_1","string","escape","html","substring","getInputNameWithPrefix","fieldName","getInputNameWithoutPrefix","findInput","form","inputNameWithPrefix","querySelector","getUploadsFieldName","getInputValueForFormAndPrefix","RenderUploadFile","skipRequired","translations","createFilesContainer","errors","createErrorContainer","required","addNewUpload","filename","uploadIndex","div","addFile","progressSpan","document","createElement","className","innerSpan","appendChild","cancelLink","setTextContent","getTranslation","setAttribute","toString","href","addUploadedFile","filesize","setSuccess","clearInput","deleteFile","findFileDiv","disableCancel","cancelSpan","findCancelSpan","disableDelete","deleteLink","findDeleteLink","removeDropHint","dropHint","renderDropHint","setDeleteFailed","setErrorMessage","enableDelete","setError","el","removeProgress","removeCancel","errorsMessages","msg","invalidFileTypeMessage","replaceChildren","size","fileSizeInfo","formatBytes","bytes","decimals","dm","floor","log","parseFloat","toFixed","updateProgress","percentage","innerProgressSpan","style","width","nameSpan","innerHTML","key","message","originalMessageSpan","span","text","createTextNode","BaseUpload$1","status","abort","delete","urlJoin","strArray","resultArray","shift","component","normalize","arguments","splice","S3Upload","BaseUpload","csrfToken","endpoint","s3UploadDir","super","uploadId","createdPromise","chunks","chunkState","uploading","onError","undefined","onProgress","onSuccess","initChunks","catch","xhr","abortMultipartUpload","encodeURIComponent","uploadIdEnc","headers","Headers","url","urljoin","fetch","method","then","response","json","getId","getInitialFile","id","original_name","getSize","createUpload","completeUpload","a","b","PartNumber","completeMultipartUpload","body","JSON","stringify","data","handleError","createMultipartUpload","accept","contentType","uploadParts","desiredChunkSize","ceil","minChunkSize","chunkSize","busy","done","uploaded","onPartComplete","etag","part","ETag","onPartProgress","sent","totalUploaded","reduce","c","uploadPart","prepareUploadPart","number","uploadPartBytes","XMLHttpRequest","responseType","upload","ev","lengthComputable","loaded","getResponseHeader","send","need","every","candidates","DetailedError","causingErr","req","res","originalRequest","originalResponse","causingError","requestId","getHeader","getMethod","getURL","getStatus","getBody","_hasBuffer","Buffer","_TE","TextDecoder","TextEncoder","b64chs","prototype","b64tab","tab","b64re","_fromCC","String","fromCharCode","bind","_mkUriSafe","Uint8Array","from","src","m0","_tidyB64","s","btoaPolyfill","bin","u32","c0","c1","c2","asc","pad","_btoa","btoa","_fromUint8Array","u8a","strs","l","apply","subarray","cb_utob","cc","re_utob","utob","u","_encode","encode","urlsafe","atobPolyfill","u24","r1","r2","binArray","charAt","gBase64","requiresPort","port","protocol","qs","hasOwnProperty","decode","decodeURIComponent","querystringify_1","obj","pairs","isNaN","query","parser","controlOrWhitespace","CRHTLF","protocolre","windowsDriveLetter","trimLeft","rules","address","isSpecial","NaN","hash","lolcation","loc","location","window","global","self","finaldestination","Url","pathname","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","instructions","concat","up","host","hostname","username","password","auth","origin","fn","ins","urlParse","PROTOCOL_TUS_V1","PROTOCOL_IETF_DRAFT_03","PROTOCOL_IETF_DRAFT_05","defaultOptions","uploadUrl","metadata","metadataForPartialUploads","fingerprint","uploadSize","onChunkComplete","onUploadUrlAvailable","overridePatchMethod","addRequestId","onBeforeRequest","onAfterResponse","onShouldRetry","defaultOnShouldRetry","Number","POSITIVE_INFINITY","retryDelays","parallelUploads","parallelUploadBoundaries","storeFingerprintForResuming","removeFingerprintOnSuccess","uploadLengthDeferred","uploadDataDuringCreation","urlStorage","fileReader","httpStack","_urlStorage","_req","_fingerprint","_urlStorageKey","_offset","_aborted","_size","_source","_retryAttempt","_retryTimeout","_offsetBeforeRetry","_parallelUploads","_parallelUploadUrls","terminate","openRequest","sendRequest","shouldRetry","delay","remainingDelays","newOptions","setTimeout","findPreviousUploads","findUploadsByFingerprint","resumeFromPreviousUpload","previousUpload","parallelUploadUrls","urlStorageKey","_emitError","optionName","openFile","_startParallelUpload","_startSingleUpload","totalSize","totalProgress","partCount","partSize","splitSizeIntoParts","uploads","lastPartProgress","newPartProgress","_emitProgress","_saveUploadInUrlStorage","all","_openRequest","setHeader","encodeMetadata","_sendRequest","inStatusCategory","_emitHttpError","resolveUrl","_emitSuccess","_resumeUpload","_createUpload","shouldTerminate","clearTimeout","_removeFromUrlStorage","lastResponse","bytesSent","bytesTotal","_emitChunkComplete","bytesAccepted","promise","_addChunkToRequest","_handleUploadResponse","_performUpload","offset","parseInt","setProgressHandler","valueSize","newSize","removeUpload","storedUpload","creationTime","Date","addUpload","Base64","category","createRequest","r","random","retryAttempt","online","onLine","isOnline","link","URL","isReactNative","product","FileSource","_file","PhoneGap","Cordova","cordova","chunk","reader","FileReader","onload","onerror","readAsArrayBuffer","blobOrArray","StreamSource","_buffer","_bufferOffset","_reader","_done","_readUntilEnoughDataOrDone","hasEnoughData","_getDataFromBuffer","read","Blob","hasAllDataBeenRead","cancel","Request","_xhr","_method","_url","_headers","header","setRequestHeader","progressHandler","onprogress","Response","getUnderlyingObject","responseText","hasStorage","originalValue","localStorage","getItem","setItem","removeItem","SECURITY_ERR","QUOTA_EXCEEDED_ERR","canStoreURLs","getName","uri","blob","isFinite","findAllUploads","results","_findEntries","round","_e","listAllUploads","_upload","exifHash","exif","hashCode","reactNativeFingerprint","lastModified","Upload","deleteUpload","TusUpload","formId","handleAfterReponse","addCsrTokenToRequest","handleProgress","handleSucces","request","_request","resourceId","bytesUploaded","BaseUploadedFile","PlaceholderFile","initialFile","ExistingFile","UploadedS3File","UploadedTusFile","FileField","callbacks","eventEmitter","initial","multiple","supportDropArea","disabled","nextUploadIndex","filesContainer","initDropArea","addInitialFiles","checkDropHint","onChange","handleClick","initialFiles","addInitialFile","createUploadedFile","emitEvent","eventName","emit","metaDataField","getMetaDataField","findUploadByName","find","getMetadataFieldName","getUploadByIndex","handleCancel","removeUploadFromList","target","getUpload","dataIndex","getAttribute","removeExistingUpload","onClick","handleInvalidFiles","handleSuccess","updatePlaceholderInput","onDelete","placeholdersInfo","uploadFile","existingUpload","newUploadIndex","initUploadFields","getPrefix","getInputValue","querySelectorAll","uploaderDiv","matchesPrefix","getInitialFiles","dataTranslations","autoInitFileForms","initFormSet","optionsParam","totalFormsValue","formCount","subFormPrefix"],"mappings":"YAAA,MAAMA,EAAYC,IAChB,MAAMC,EAASD,EAAQE,cAEvB,OAAKD,EAIkB,SAAnBA,EAAOE,QACFF,EAGFF,EAASE,GAPP,MCJLG,EAAQ,CACV,2BAA4B,CAAC,MAC7B,2BAA4B,CAAC,gBAC7B,yBAA0B,CAAC,MAC3B,mBAAoB,CAAC,QACrB,yBAA0B,CAAC,cAC3B,uBAAwB,CAAC,QACzB,0BAA2B,CAAC,WAC5B,8BAA+B,CAAC,eAChC,0BAA2B,CAAC,WAC5B,2BAA4B,CAAC,OAC7B,4BAA6B,CAAC,QAC9B,4BAA6B,CAAC,QAC9B,mCAAoC,CAAC,OACrC,oCAAqC,CAAC,QACtC,mBAAoB,CAAC,QACrB,2BAA4B,CAAC,OAC7B,wBAAyB,CAAC,SAC1B,uBAAwB,CAAC,QACzB,8BAA+B,CAAC,SAChC,6BAA8B,CAAC,SAC/B,0BAA2B,CAAC,SAC5B,0BAA2B,CAAC,SAC5B,yBAA0B,CAAC,SAC3B,sBAAuB,CAAC,OACxB,uBAAwB,CAAC,MACzB,kBAAmB,CAAC,OACpB,uBAAwB,CAAC,OACzB,6BAA8B,CAAC,OAC/B,2BAA4B,CAAC,YAC7B,oBAAqB,CAAC,OACtB,0BAA2B,CAAC,OAC5B,uBAAwB,CAAC,QACzB,uBAAwB,CAAC,SACzB,yBAA0B,CAAC,QAC3B,uBAAwB,CAAC,QACzB,4BAA6B,CAAC,aAC9B,uBAAwB,CAAC,QACzB,kBAAmB,CAAC,OACpB,sBAAuB,CAAC,OACxB,kBAAmB,CAAC,OACpB,sBAAuB,CAAC,OACxB,yBAA0B,CAAC,OAC3B,uBAAwB,CAAC,WACzB,sBAAuB,CAAC,OACxB,sBAAuB,CAAC,OACxB,kBAAmB,CAAC,OACpB,mBAAoB,CAAC,MACrB,oBAAqB,CAAC,SACtB,0BAA2B,CAAC,OAC5B,wBAAyB,CAAC,MAAO,SACjC,oBAAqB,CAAC,SACtB,sBAAuB,CAAC,OACxB,2BAA4B,CAAC,MAAO,MAAO,OAC3C,qCAAsC,CAAC,OACvC,sBAAuB,CAAC,SACxB,yBAA0B,CAAC,OAC3B,mBAAoB,CAAC,OAAQ,OAC7B,oBAAqB,CAAC,SACtB,0BAA2B,CAAC,UAC5B,sBAAuB,CAAC,UACxB,sBAAuB,CAAC,OACxB,uBAAwB,CAAC,WACzB,2BAA4B,CAAC,OAC7B,6BAA8B,CAAC,OAC/B,uBAAwB,CAAC,QACzB,4BAA6B,CAAC,eAC9B,mBAAoB,CAAC,OACrB,0BAA2B,CAAC,QAC5B,0BAA2B,CAAC,KAAM,KAAM,MACxC,yBAA0B,CAAC,UAC3B,mBAAoB,CAAC,QACrB,uCAAwC,CAAC,OACzC,qCAAsC,CAAC,SACvC,2BAA4B,CAAC,YAC7B,4BAA6B,CAAC,SAC9B,uBAAwB,CAAC,QACzB,0BAA2B,CAAC,QAC5B,0BAA2B,CAAC,QAC5B,uBAAwB,CAAC,QACzB,mBAAoB,CAAC,MAAO,QAC5B,kBAAmB,CAAC,OAAQ,QAAS,OAAQ,OAC7C,mBAAoB,CAAC,QACrB,yBAA0B,CAAC,cAC3B,qBAAsB,CAAC,MAAO,OAC9B,kBAAmB,CAAC,OACpB,sBAAuB,CAAC,MACxB,wBAAyB,CAAC,MAC1B,mBAAoB,CAAC,OACrB,2BAA4B,CACxB,MACA,MACA,MACA,MACA,KACA,OACA,QACA,MACA,MACA,OACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UAEJ,kBAAmB,CAAC,OACpB,gCAAiC,CAAC,OAClC,kBAAmB,CAAC,OACpB,wBAAyB,CAAC,SAC1B,sBAAuB,CACnB,SACA,UACA,SACA,SACA,MACA,QAEJ,mBAAoB,CAAC,QACrB,8BAA+B,CAAC,QAChC,kCAAmC,CAAC,OACpC,kBAAmB,CAAC,OACpB,4BAA6B,CAAC,OAC9B,uBAAwB,CAAC,OACzB,4BAA6B,CAAC,MAAO,QACrC,yBAA0B,CAAC,OAC3B,qBAAsB,CAAC,OACvB,yBAA0B,CAAC,MAAO,OAClC,8BAA+B,CAAC,OAChC,oBAAqB,CAAC,MACtB,6BAA8B,CAAC,MAC/B,wBAAyB,CAAC,OAC1B,uBAAwB,CAAC,OACzB,2BAA4B,CAAC,WAC7B,sBAAuB,CAAC,OACxB,sBAAuB,CAAC,OACxB,yBAA0B,CAAC,KAAM,MAAO,MACxC,6BAA8B,CAAC,SAC/B,uBAAwB,CAAC,WACzB,wBAAyB,CAAC,QAC1B,sBAAuB,CAAC,MAAO,OAC/B,0BAA2B,CAAC,OAC5B,sCAAuC,CAAC,OACxC,iCAAkC,CAAC,MACnC,sCAAuC,CAAC,OACxC,+BAAgC,CAAC,MACjC,4BAA6B,CAAC,QAC9B,+BAAgC,CAAC,OACjC,4BAA6B,CAAC,QAC9B,gCAAiC,CAAC,OAClC,4BAA6B,CAAC,OAC9B,uBAAwB,CAAC,OACzB,sBAAuB,CAAC,OACxB,sBAAuB,CAAC,OACxB,kBAAmB,CAAC,OACpB,uBAAwB,CAAC,QACzB,8BAA+B,CAAC,OAChC,+BAAgC,CAAC,OACjC,8BAA+B,CAAC,OAChC,+BAAgC,CAAC,OACjC,kBAAmB,CAAC,OACpB,wBAAyB,CAAC,UAC1B,yBAA0B,CAAC,WAC3B,qCAAsC,CAAC,UACvC,0CAA2C,CAAC,UAC5C,sBAAuB,CAAC,OACxB,oBAAqB,CAAC,MAAO,SAC7B,uBAAwB,CAAC,MAAO,QAChC,2BAA4B,CAAC,MAC7B,iCAAkC,CAAC,OACnC,kBAAmB,CAAC,OACpB,mBAAoB,CAAC,QACrB,uBAAwB,CAAC,SACzB,sBAAuB,CAAC,OACxB,uBAAwB,CAAC,QACzB,uBAAwB,CAAC,QACzB,uBAAwB,CAAC,WACzB,sBAAuB,CAAC,MAAO,aAC/B,yBAA0B,CAAC,OAC3B,+BAAgC,CAAC,OACjC,mBAAoB,CAAC,QACrB,mBAAoB,CAAC,QACrB,uBAAwB,CAAC,QACzB,qBAAsB,CAAC,OACvB,+BAAgC,CAAC,UACjC,iCAAkC,CAAC,MACnC,2BAA4B,CAAC,QAC7B,mBAAoB,CAAC,QACrB,8BAA+B,CAAC,OAChC,qBAAsB,CAAC,OACvB,qBAAsB,CAAC,OACvB,uBAAwB,CAAC,QACzB,2BAA4B,CAAC,YAC7B,uBAAwB,CAAC,QACzB,2BAA4B,CAAC,OAC7B,4BAA6B,CAAC,OAC9B,4BAA6B,CAAC,OAC9B,0BAA2B,CAAC,OAC5B,0BAA2B,CAAC,OAC5B,uBAAwB,CAAC,QACzB,mBAAoB,CAAC,QACrB,wBAAyB,CAAC,QAAS,OACnC,wBAAyB,CAAC,OAC1B,kBAAmB,CAAC,MAAO,MAAO,MAAO,OACzC,sBAAuB,CAAC,OACxB,sBAAuB,CAAC,OACxB,wBAAyB,CAAC,OAC1B,uBAAwB,CAAC,OAAQ,QACjC,uBAAwB,CAAC,QACzB,qBAAsB,CAAC,OAAQ,QAAS,OAAQ,OAChD,mBAAoB,CAAC,QACrB,sBAAuB,CAAC,OACxB,kBAAmB,CAAC,OACpB,4BAA6B,CAAC,UAC9B,aAAc,CAAC,SACf,YAAa,CAAC,OAAQ,OACtB,cAAe,CAAC,OAChB,YAAa,CAAC,OACd,cAAe,CAAC,KAAM,OACtB,aAAc,CAAC,MAAO,OAAQ,MAAO,OACrC,mBAAoB,CAAC,QACrB,YAAa,CAAC,QACd,YAAa,CAAC,MAAO,OAAQ,OAC7B,aAAc,CAAC,OAAQ,MAAO,OAAQ,MAAO,MAAO,OACpD,YAAa,CAAC,MAAO,MAAO,MAAO,QACnC,YAAa,CAAC,OACd,aAAc,CAAC,OACf,YAAa,CAAC,OACd,aAAc,CAAC,QACf,aAAc,CAAC,QACf,WAAY,CAAC,MACb,kBAAmB,CAAC,OACpB,WAAY,CAAC,OACb,WAAY,CAAC,OACb,YAAa,CAAC,QACd,aAAc,CAAC,SACf,aAAc,CAAC,OACf,aAAc,CAAC,QACf,aAAc,CAAC,QACf,aAAc,CAAC,QACf,aAAc,CAAC,QACf,YAAa,CAAC,MAAO,OACrB,YAAa,CAAC,OACd,kBAAmB,CAAC,QACpB,YAAa,CAAC,OACd,YAAa,CAAC,OACd,aAAc,CAAC,QACf,cAAe,CAAC,MAChB,YAAa,CAAC,OACd,aAAc,CAAC,QACf,sBAAuB,CAAC,SACxB,aAAc,CAAC,QACf,sBAAuB,CAAC,SACxB,cAAe,CAAC,QAChB,YAAa,CAAC,OACd,aAAc,CAAC,QACf,aAAc,CAAC,QACf,YAAa,CAAC,OACd,YAAa,CAAC,MAAO,QACrB,aAAc,CAAC,MAAO,OAAQ,OAC9B,YAAa,CAAC,OACd,aAAc,CAAC,OACf,YAAa,CAAC,MAAO,QACrB,YAAa,CAAC,MAAO,OACrB,YAAa,CAAC,OACd,YAAa,CAAC,OACd,aAAc,CAAC,QACf,aAAc,CAAC,QACf,YAAa,CAAC,OACd,aAAc,CAAC,QACf,aAAc,CAAC,QACf,aAAc,CAAC,QACf,YAAa,CAAC,OACd,aAAc,CAAC,QACf,cAAe,CAAC,QAChB,YAAa,CAAC,OACd,YAAa,CAAC,OACd,gBAAiB,CAAC,MAAO,QACzB,YAAa,CAAC,OACd,aAAc,CAAC,MAAO,QACtB,gBAAiB,CAAC,OAClB,aAAc,CAAC,QACf,YAAa,CAAC,OACd,mCAAoC,CAAC,4BACrC,iBAAkB,CAAC,SACnB,iCAAkC,CAAC,SACnC,0CAA2C,CAAC,SAC5C,yBAA0B,CAAC,SAC3B,iBAAkB,CAAC,MAAO,OAAQ,MAAO,SACzC,YAAa,CAAC,OACd,kBAAmB,CAAC,QACpB,oBAAqB,CAAC,OACtB,aAAc,CAAC,MAAO,QACtB,WAAY,CAAC,MACb,aAAc,CAAC,MAAO,OAAQ,QAC9B,YAAa,CAAC,OACd,YAAa,CAAC,OACd,YAAa,CAAC,OACd,aAAc,CAAC,OAAQ,MAAO,QAAS,MAAO,OAC9C,iBAAkB,CAAC,QACnB,iBAAkB,CAAC,QACnB,qBAAsB,CAAC,SACvB,YAAa,CAAC,OACd,YAAa,CAAC,OACd,aAAc,CAAC,MAAO,QACtB,mBAAoB,CAAC,QAAS,SAC9B,wBAAyB,CAAC,QAC1B,iBAAkB,CAAC,QAAS,SAC5B,gBAAiB,CAAC,MAAO,QACzB,iBAAkB,CAAC,QACnB,sBAAuB,CAAC,WAAY,YACpC,gBAAiB,CAAC,MAAO,OACzB,oBAAqB,CAAC,SAAU,aAChC,WAAY,CAAC,OACb,WAAY,CAAC,OACb,YAAa,CAAC,OAAQ,MAAO,SAC7B,YAAa,CAAC,QACd,kBAAmB,CAAC,KAAM,OAC1B,WAAY,CAAC,OACb,YAAa,CAAC,QACd,gBAAiB,CAAC,KAAM,YACxB,cAAe,CAAC,OAChB,WAAY,CAAC,OACb,UAAW,CAAC,MACZ,aAAc,CAAC,MAAO,OAAQ,OAAQ,MAAO,OAAQ,MAAO,KAAM,OAClE,gBAAiB,CAAC,OAClB,WAAY,CAAC,QACb,YAAa,CAAC,OAAQ,OACtB,YAAa,CAAC,QACd,YAAa,CAAC,OAAQ,OACtB,YAAa,CAAC,QACd,cAAe,CAAC,SAAU,QAC1B,4BAA6B,CAAC,OAC9B,aAAc,CAAC,IAAK,KAAM,OAAQ,MAAO,KAAM,MAC/C,cAAe,CAAC,OAChB,gBAAiB,CAAC,MAAO,OAAQ,QACjC,aAAc,CAAC,SACf,WAAY,CAAC,OACb,YAAa,CAAC,QACd,WAAY,CAAC,QACb,YAAa,CAAC,OAAQ,OACtB,aAAc,CAAC,MAAO,QACtB,cAAe,CAAC,OAChB,aAAc,CAAC,QACf,aAAc,CAAC,QACf,aAAc,CAAC,QACf,oBAAqB,CAAC,OACtB,aAAc,CAAC,QACf,YAAa,CAAC,OAAQ,SACtB,YAAa,CAAC,MAAO,QACrB,aAAc,CAAC,KAAM,MAAO,OAAQ,OACpC,YAAa,CAAC,MAAO,OAAQ,QAC7B,aAAc,CAAC,OAAQ,MAAO,MAAO,MAAO,OAC5C,YAAa,CAAC,OACd,kBAAmB,CAAC,KAAM,OAC1B,aAAc,CAAC,SAEnBC,OAAOC,OAAOF,GC5Wd,IAKIG,EAAuBC,EAAuBC,EAL9CC,EAA0BC,QAAQA,OAAKD,wBAA2B,SAAUE,EAAUC,EAAOC,EAAMC,GACnG,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAEI,MAAQN,EAAMO,IAAIR,EACxF,EA8EAL,EAAwB,IAAIc,QAAWb,EAAwB,IAAIa,QAAWZ,EAAyB,IAAIY,QC/E3G,IAAAC,EAAe,IDGf,MACI,WAAAC,IAAeC,GACXjB,EAAsBkB,IAAId,KAAM,IAAIe,KACpClB,EAAsBiB,IAAId,KAAM,IAAIe,KACpCjB,EAAuBgB,IAAId,KAAM,IAAIe,KACrC,IAAK,MAAMC,KAAOH,EACdb,KAAKiB,OAAOD,EAEpB,CACA,MAAAC,CAAOC,EAASC,GAAQ,GACpB,IAAK,IAAKC,EAAMC,KAAe3B,OAAO4B,QAAQJ,GAAU,CACpDE,EAAOA,EAAKG,cACZF,EAAaA,EAAWG,IAAKC,GAAQA,EAAIF,eACpCxB,EAAuBC,KAAMF,EAAwB,KAAKQ,IAAIc,IAC/DrB,EAAuBC,KAAMF,EAAwB,KAAKgB,IAAIM,EAAM,IAAIM,KAE5E,MAAMC,EAAgB5B,EAAuBC,KAAMF,EAAwB,KAAKW,IAAIW,GACpF,IAAIQ,GAAQ,EACZ,IAAK,IAAIC,KAAaR,EAAY,CAC9B,MAAMS,EAAUD,EAAUE,WAAW,KAOrC,GANAF,EAAYC,EAAUD,EAAUG,MAAM,GAAKH,EAC3CF,GAAeM,IAAIJ,GACfD,GACA7B,EAAuBC,KAAMH,EAAuB,KAAKiB,IAAIM,EAAMS,GAEvED,GAAQ,EACJE,EACA,SACJ,MAAMI,EAAcnC,EAAuBC,KAAMJ,EAAuB,KAAKa,IAAIoB,GACjF,GAAIK,GAAeA,GAAed,IAASD,EACvC,MAAM,IAAIgB,MAAM,IAAIf,QAAWS,sBAA8BK,QAAkBL,wDAEnF9B,EAAuBC,KAAMJ,EAAuB,KAAKkB,IAAIe,EAAWT,EAC5E,CACJ,CACA,OAAOpB,IACX,CACA,OAAAoC,CAAQC,GACJ,GAAoB,iBAATA,EACP,OAAO,KACX,MAAMC,EAAOD,EAAKE,QAAQ,YAAa,IAAIhB,cACrCE,EAAMa,EAAKC,QAAQ,SAAU,IAAIhB,cACjCiB,EAAUF,EAAKG,OAASJ,EAAKI,OAEnC,QADehB,EAAIgB,OAASH,EAAKG,OAAS,IAC3BD,EACJ,KACJzC,EAAuBC,KAAMJ,EAAuB,KAAKa,IAAIgB,IAAQ,IAChF,CACA,YAAAiB,CAAatB,GACT,MAAoB,iBAATA,EACA,MACXA,EAAOA,GAAMuB,QAAQ,KAAK,IACjBvB,GAAQrB,EAAuBC,KAAMH,EAAuB,KAAKY,IAAIW,EAAKwB,OAAOrB,iBAAmB,KACjH,CACA,gBAAAsB,CAAiBzB,GACb,MAAoB,iBAATA,EACA,KACJrB,EAAuBC,KAAMF,EAAwB,KAAKW,IAAIW,EAAKG,gBAAkB,IAChG,CACA,OAAAuB,GACI9C,KAAKiB,OAAS,KACV,MAAM,IAAIkB,MAAM,iIAEpBzC,OAAOC,OAAOK,MACd,IAAK,MAAMqB,KAActB,EAAuBC,KAAMF,EAAwB,KAAKiD,SAC/ErD,OAAOC,OAAO0B,GAElB,OAAOrB,IACX,CACA,aAAAgD,GACI,MAAO,CACHvD,MAAOM,EAAuBC,KAAMJ,EAAuB,KAC3DyB,WAAYtB,EAAuBC,KAAMH,EAAuB,KAExE,GC7EoBoD,GAAeH,6TCDvC,MAAMI,EAAY,QACZC,EAAe,KAAKD,KAMpBE,EAAc,MAGdC,EAAgB,MAEhBC,EAAQ,OACRC,EAAa,MAAMF,OACnBG,EAAe,QAAQH,KACvBI,EAAa,GAAGL,SAAmBG,IASnCG,EAAc,CAClBN,cACAO,aAlBmB,MAmBnBC,cAlBoB,MAmBpBP,gBACAQ,SAlBe,QAmBfP,QACAC,aACAE,aACAK,OAjBa,MAAMV,KAkBnBW,QAjBc,MAAMP,IAAeC,KAkBnCO,aAjBmB,MAAMZ,SAAmBG,KAkB5CU,cAjBoB,MAAMR,KAkB1BS,aAjBmB,MAAMb,KAkBzBc,KAjBW,GAAGb,MAkBdE,eACAY,IAlBU,KAyBNC,EAAgB,IACjBX,EAEHL,cAAe,IAAIH,KACnBI,MAAOH,EACPgB,KAAM,GAAGhB,MACTM,WAAY,GAAGL,aAAuBF,QACtCY,OAAQ,MAAMV,KACdW,QAAS,YAAYb,MAAcE,aAAuBF,SAC1Dc,aAAc,MAAMZ,aAAuBF,SAC3Ce,cAAe,MAAMb,aAAuBF,SAC5CgB,aAAc,MAAMhB,KACpBM,aAAc,SAASN,MACvBK,WAAY,OAAOL,QACnBkB,IAAK,aAwBPE,EAAiB,CACfC,WAAY,MACZC,mBAnByB,CACzBC,MAAO,YACPC,MAAO,SACPC,MAAO,cACPC,MAAO,OACPC,MAAO,mBACPC,MAAO,MACPC,MAAO,cACPC,MAAO,MACPC,MAAO,eACPC,MAAO,yCACPC,MAAO,mBACPC,MAAO,MACPC,KAAM,aACNC,OAAQ,aAQRC,gBAAiB,yBACjBC,wBAAyB,4BACzBC,oBAAqB,oBACrBC,4BAA6B,oBAC7BC,2BAA4B,uBAC5BC,uBAAwB,4BAGxBC,aAAc,CACZC,UAAW,KACX,MAAO,IACP,QAAS,KACT,WAAY,MAIdC,OAAQ,GACRC,OAAQ,GAGRC,iBAAkB,GAClBC,iBAAkB,GAClBC,iBAAkB,GAClBC,iBAAkB,IAElBC,sBAAuB,GACvBC,uBAAwB,GAExBC,cAAe,GAGfC,eAAgB,GAChBC,QAAS,GACTC,oBAAqB,GACrBC,qBAAsB,GACtBC,uBAAwB,GACxBC,WAAY,GACZC,WAAY,GACZC,SAAU,GACVC,kBAAmB,GACnBC,WAAY,GACZC,sBAAuB,GACvBC,eAAgB,GAChBC,mBAAoB,GACpBC,kBAAmB,GACnBC,UAAW,GACXC,kBAAmB,GACnBC,wBAAyB,GACzBC,sBAAuB,IACvBC,yBAA0B,GAC1BC,eAAgB,GAChBC,oBAAqB,IACrBC,aAAc,GACdC,UAAW,GACXC,mBAAoB,GACpBC,yBAA0B,GAC1BC,uBAAwB,IACxBC,0BAA2B,GAC3BC,eAAgB,GAChBC,kBAAmB,GACnBC,WAAY,GACZC,SAAU,EACVC,gBAAiB,GACjBC,mBAAoB,IACpBC,8BAA+B,MAM/BC,aAAaC,IACJ,CACL,IAAK,CAAEvH,KAAM,SAAUwH,KAAM,YAAaC,MAAO,KAAKF,EAAMxE,SAC5D,IAAK,CAAE/C,KAAM,QAASwH,KAAM,MAAOC,MAAO,MAC1C,IAAK,CAAEzH,KAAM,OAAQwH,KAAM,MAAOC,MAAO,MACzC,IAAK,CAAEzH,KAAM,OAAQwH,KAAM,MAAOC,MAAO,MACzC,IAAK,CAAEzH,KAAM,KAAMwH,KAAM,MAAOC,MAAO,OAQ3CC,UAAUC,IACS,IAAVA,EAAiB1E,EAAgBX,2CC9K5C,MAAM6B,gBACJA,EAAeK,uBACfA,EAAsBH,oBACtBA,EAAmBE,2BACnBA,GACEqD,IAEJC,EAAAC,SAAmBC,GAAe,OAARA,GAA+B,iBAARA,IAAqBC,MAAMC,QAAQF,GACpFF,EAAAK,cAAwBC,GAAO9D,EAAoB+D,KAAKD,GACxDN,EAAAQ,YAAsBF,GAAsB,IAAfA,EAAI9G,QAAgBwG,EAAQK,cAAcC,GACvEN,EAAAS,YAAsBH,GAAOA,EAAIhH,QAAQoD,EAA4B,QACrEsD,EAAAU,eAAyBJ,GAAOA,EAAIhH,QAAQgD,EAAiB,KAE7D0D,EAAAW,UAAoB,KAClB,GAAyB,oBAAdC,WAA6BA,UAAUC,SAAU,CAC1D,MAAMA,EAAWD,UAAUC,SAASvI,cACpC,MAAoB,UAAbuI,GAAqC,YAAbA,CACnC,CAEE,QAAuB,oBAAZC,UAA2BA,QAAQD,WAChB,UAArBC,QAAQD,UAMnBb,EAAAe,kBAA4BT,GACnBA,EAAIhH,QAAQqD,EAAwBqE,GACxB,OAAVA,EAAiB,GAAKA,GAIjChB,EAAAiB,WAAqB,CAACC,EAAOC,EAAMC,KACjC,MAAMC,EAAMH,EAAMI,YAAYH,EAAMC,GACpC,OAAY,IAARC,EAAmBH,EACA,OAAnBA,EAAMG,EAAM,GAAoBrB,EAAQiB,WAAWC,EAAOC,EAAME,EAAM,GACnE,GAAGH,EAAMnI,MAAM,EAAGsI,OAASH,EAAMnI,MAAMsI,MAGhDrB,EAAAuB,aAAuB,CAACL,EAAOjK,EAAQ,CAAA,KACrC,IAAIuK,EAASN,EAKb,OAJIM,EAAO1I,WAAW,QACpB0I,EAASA,EAAOzI,MAAM,GACtB9B,EAAMwK,OAAS,MAEVD,GAGTxB,EAAA0B,WAAqB,CAACR,EAAOjK,EAAQ,CAAA,EAAI0K,EAAU,MAIjD,IAAIH,EAAS,GAHGG,EAAQC,SAAW,GAAK,SAGXV,KAFdS,EAAQC,SAAW,GAAK,MAMvC,OAHsB,IAAlB3K,EAAM4K,UACRL,EAAS,UAAUA,UAEdA,GAGTxB,EAAA8B,SAAmB,CAAC1I,GAAQ2I,WAAY,CAAA,KACtC,MAAMC,EAAO5I,EAAKM,MAAMqI,EAAU,QAAU,KACtC1I,EAAO2I,EAAKA,EAAKxI,OAAS,GAEhC,MAAa,KAATH,EACK2I,EAAKA,EAAKxI,OAAS,GAGrBH,yCCpET,MAAM4I,EAAQlC,KACRzC,cACJA,EAAaE,QACbA,EAAOC,oBACPA,EAAmBI,WACnBA,EAAUC,SACVA,EAAQG,sBACRA,EAAqBE,mBACrBA,EAAkBK,sBAClBA,EAAqBpB,sBACrBA,EAAqBqB,yBACrBA,EAAwBI,UACxBA,EAASC,mBACTA,EAAkBE,uBAClBA,EAAsB3B,uBACtBA,EAAsB4B,0BACtBA,GACEiD,IAEEC,EAAkBC,GACfA,IAASjE,GAAsBiE,IAAS3E,EAG3C4E,EAAQC,KACW,IAAnBA,EAAMC,WACRD,EAAMD,MAAQC,EAAME,WAAaC,IAAW,WA2WhDC,EAtVa,CAACxB,EAAOS,KACnB,MAAMgB,EAAOhB,GAAW,CAAA,EAElBnI,EAAS0H,EAAM1H,OAAS,EACxBoJ,GAA2B,IAAfD,EAAKE,QAAqC,IAAnBF,EAAKC,UACxCE,EAAU,GACVC,EAAS,GACTF,EAAQ,GAEd,IAeIG,EACAZ,EAhBA9B,EAAMY,EACN+B,GAAQ,EACRC,EAAQ,EACRC,EAAY,EACZC,GAAU,EACVC,GAAY,EACZC,GAAS,EACTC,GAAY,EACZf,GAAa,EACbgB,GAAe,EACfC,GAAc,EACd5B,GAAU,EACV6B,GAAiB,EACjBC,GAAW,EACXC,EAAS,EAGTtB,EAAQ,CAAE/K,MAAO,GAAI8K,MAAO,EAAGiB,QAAQ,GAE3C,MAAMO,EAAM,IAAMZ,GAASzJ,EACrBsK,EAAO,IAAMxD,EAAIyD,WAAWd,EAAQ,GACpCe,EAAU,KACdhB,EAAOZ,EACA9B,EAAIyD,aAAad,IAG1B,KAAOA,EAAQzJ,GAAQ,CAErB,IAAIyK,EAEJ,GAHA7B,EAAO4B,IAGH5B,IAAS3E,EAAb,CAUA,IAAqB,IAAjB+F,GAAyBpB,IAAS5D,EAAuB,CAG3D,IAFAoF,KAEiB,IAAVC,MAAmBzB,EAAO4B,MAC/B,GAAI5B,IAAS3E,EAMb,GAAI2E,IAAS5D,EAAb,CAKA,IAAqB,IAAjBgF,GAAyBpB,IAAStE,IAAasE,EAAO4B,OAAelG,EAAU,CAKjF,GAJAsF,EAAUd,EAAMc,SAAU,EAC1BE,EAAShB,EAAMgB,QAAS,EACxBK,GAAW,GAEO,IAAdf,EACF,SAGF,KACV,CAEQ,IAAqB,IAAjBY,GAAyBpB,IAASvE,EAAY,CAKhD,GAJAuF,EAAUd,EAAMc,SAAU,EAC1BE,EAAShB,EAAMgB,QAAS,EACxBK,GAAW,GAEO,IAAdf,EACF,SAGF,KACV,CAEQ,GAAIR,IAASpD,IACX4E,IAEe,IAAXA,GAAc,CAChBJ,GAAe,EACfJ,EAAUd,EAAMc,SAAU,EAC1BO,GAAW,EACX,KACZ,CAlCA,MAFUC,SANAH,EAAcnB,EAAMmB,aAAc,EAClCO,IA6CJ,IAAkB,IAAdpB,EACF,SAGF,KACN,CAEI,GAAIR,IAASjE,EAAb,CAeA,IAAmB,IAAfwE,EAAKuB,MAAgB,CAOvB,IAAsB,KANA9B,IAASvD,GAC1BuD,IAAS5E,GACT4E,IAAS9E,GACT8E,IAAStD,GACTsD,IAASnE,IAEgB6F,MAAW1G,EAAuB,CAQ9D,GAPAkG,EAAShB,EAAMgB,QAAS,EACxBC,EAAYjB,EAAMiB,WAAY,EAC9BI,GAAW,EACPvB,IAASnE,GAAyBgF,IAAUC,IAC9CQ,GAAiB,IAGD,IAAdd,EAAoB,CACtB,MAAiB,IAAViB,MAAmBzB,EAAO4B,MAC/B,GAAI5B,IAAS3E,GAMb,GAAI2E,IAAS/E,EAAwB,CACnCiG,EAAShB,EAAMgB,QAAS,EACxBK,GAAW,EACX,KACd,OATcF,EAAcnB,EAAMmB,aAAc,EAClCrB,EAAO4B,IAUX,QACV,CACQ,KACR,CACA,CAEI,GAAI5B,IAAS9E,EAAe,CAK1B,GAJI0F,IAAS1F,IAAekF,EAAaF,EAAME,YAAa,GAC5Dc,EAAShB,EAAMgB,QAAS,EACxBK,GAAW,GAEO,IAAdf,EACF,SAEF,KACN,CAEI,GAAIR,IAAStD,EAAoB,CAI/B,GAHAwE,EAAShB,EAAMgB,QAAS,EACxBK,GAAW,GAEO,IAAdf,EACF,SAEF,KACN,CAEI,GAAIR,IAAS3D,EAA0B,CACrC,MAAiB,IAAVoF,MAAmBI,EAAOD,MAC/B,GAAIC,IAASxG,GAMb,GAAIwG,IAAShF,EAA2B,CACtCoE,EAAYf,EAAMe,WAAY,EAC9BC,EAAShB,EAAMgB,QAAS,EACxBK,GAAW,EACX,KACV,OAVUF,EAAcnB,EAAMmB,aAAc,EAClCO,IAYJ,IAAkB,IAAdpB,EACF,SAGF,KACN,CAEI,IAAsB,IAAlBD,EAAKwB,UAAqB/B,IAASnE,GAAyBgF,IAAUC,EAA1E,CAMA,IAAqB,IAAjBP,EAAKyB,SAAoBhC,IAAShF,EAAuB,CAG3D,GAFAkG,EAAShB,EAAMgB,QAAS,GAEN,IAAdV,EAAoB,CACtB,MAAiB,IAAViB,MAAmBzB,EAAO4B,MAC/B,GAAI5B,IAAShF,GAMb,GAAIgF,IAAS/E,EAAwB,CACnCsG,GAAW,EACX,KACZ,OARYF,EAAcnB,EAAMmB,aAAc,EAClCrB,EAAO4B,IASX,QACR,CACM,KACN,CAEI,IAAe,IAAXV,EAAiB,CAGnB,GAFAK,GAAW,GAEO,IAAdf,EACF,SAGF,KACN,CA/BA,MAHMf,EAAUS,EAAMT,SAAU,EAC1BqB,GAnFN,KAbI,CAKE,GAJAJ,EAAQuB,KAAKpB,GACbF,EAAOsB,KAAK/B,GACZA,EAAQ,CAAE/K,MAAO,GAAI8K,MAAO,EAAGiB,QAAQ,IAEtB,IAAbK,EAAmB,SACvB,GAAIX,IAASlF,GAAYmF,IAAWC,EAAQ,EAAI,CAC9CA,GAAS,EACT,QACR,CAEMC,EAAYF,EAAQ,CAE1B,CAzEA,MAPMQ,EAAcnB,EAAMmB,aAAc,EAClCrB,EAAO4B,IAEH5B,IAAS5D,IACXgF,GAAe,EAiMvB,EAEqB,IAAfb,EAAKuB,QACPX,GAAY,EACZD,GAAS,GAGX,IAAIgB,EAAOhE,EACPmB,EAAS,GACT8C,EAAO,GAEPrB,EAAQ,IACVzB,EAASnB,EAAIvH,MAAM,EAAGmK,GACtB5C,EAAMA,EAAIvH,MAAMmK,GAChBC,GAAaD,GAGXoB,IAAmB,IAAXhB,GAAmBH,EAAY,GACzCmB,EAAOhE,EAAIvH,MAAM,EAAGoK,GACpBoB,EAAOjE,EAAIvH,MAAMoK,KACG,IAAXG,GACTgB,EAAO,GACPC,EAAOjE,GAEPgE,EAAOhE,EAGLgE,GAAiB,KAATA,GAAwB,MAATA,GAAgBA,IAAShE,GAC9C6B,EAAgBmC,EAAKP,WAAWO,EAAK9K,OAAS,MAChD8K,EAAOA,EAAKvL,MAAM,GAAG,KAIH,IAAlB4J,EAAK6B,WACHD,IAAMA,EAAOtC,EAAMlB,kBAAkBwD,IAErCD,IAAwB,IAAhBb,IACVa,EAAOrC,EAAMlB,kBAAkBuD,KAInC,MAAMrN,EAAQ,CACZwK,SACAP,QACAgC,QACAoB,OACAC,OACAnB,UACAC,YACAC,SACAC,YACAf,aACAX,UACA6B,kBAWF,IARoB,IAAhBf,EAAKI,SACP9L,EAAMwN,SAAW,EACZtC,EAAgBC,IACnBW,EAAOsB,KAAK/B,GAEdrL,EAAM8L,OAASA,IAGE,IAAfJ,EAAKE,QAAkC,IAAhBF,EAAKI,OAAiB,CAC/C,IAAI2B,EAEJ,IAAK,IAAIrD,EAAM,EAAGA,EAAMyB,EAAQtJ,OAAQ6H,IAAO,CAC7C,MAAMsD,EAAID,EAAYA,EAAY,EAAIxB,EAChC0B,EAAI9B,EAAQzB,GACZ9J,EAAQ2J,EAAMnI,MAAM4L,EAAGC,GACzBjC,EAAKI,SACK,IAAR1B,GAAuB,IAAV6B,GACfH,EAAO1B,GAAKkB,UAAW,EACvBQ,EAAO1B,GAAK9J,MAAQkK,GAEpBsB,EAAO1B,GAAK9J,MAAQA,EAEtB8K,EAAMU,EAAO1B,IACbpK,EAAMwN,UAAY1B,EAAO1B,GAAKgB,OAEpB,IAARhB,GAAuB,KAAV9J,GACfsL,EAAMwB,KAAK9M,GAEbmN,EAAYE,CAClB,CAEI,GAAIF,GAAaA,EAAY,EAAIxD,EAAM1H,OAAQ,CAC7C,MAAMjC,EAAQ2J,EAAMnI,MAAM2L,EAAY,GACtC7B,EAAMwB,KAAK9M,GAEPoL,EAAKI,SACPA,EAAOA,EAAOvJ,OAAS,GAAGjC,MAAQA,EAClC8K,EAAMU,EAAOA,EAAOvJ,OAAS,IAC7BvC,EAAMwN,UAAY1B,EAAOA,EAAOvJ,OAAS,GAAG6I,MAEpD,CAEIpL,EAAM6L,QAAUA,EAChB7L,EAAM4L,MAAQA,CAClB,CAEE,OAAO5L,kCCjYT,MAAMoE,EAAY0E,IACZkC,EAAQC,KAMR5G,WACJA,EAAUC,mBACVA,EAAkBgB,wBAClBA,EAAuBE,4BACvBA,EAA2BG,aAC3BA,GACEvB,EAMEwJ,EAAc,CAACjN,EAAM+J,KACzB,GAAmC,mBAAxBA,EAAQkD,YACjB,OAAOlD,EAAQkD,eAAejN,EAAM+J,GAGtC/J,EAAKkN,OACL,MAAMvN,EAAQ,IAAIK,EAAKmN,KAAK,QAE5B,IAEE,IAAIC,OAAOzN,EACf,CAAI,MAAO0N,GACP,OAAOrN,EAAKW,IAAI2M,GAAKjD,EAAMxB,YAAYyE,IAAIH,KAAK,KACpD,CAEE,OAAOxN,GAOH4N,EAAc,CAAChN,EAAMgJ,IAClB,WAAWhJ,OAAUgJ,iBAAoBA,iCAU5CiE,EAAQ,CAAClE,EAAOS,KACpB,GAAqB,iBAAVT,EACT,MAAM,IAAI9J,UAAU,qBAGtB8J,EAAQtE,EAAasE,IAAUA,EAE/B,MAAMyB,EAAO,IAAKhB,GACZ0D,EAAgC,iBAAnB1C,EAAK2C,UAAyBC,KAAKC,IAAIlK,EAAYqH,EAAK2C,WAAahK,EAExF,IAAImK,EAAMvE,EAAM1H,OAChB,GAAIiM,EAAMJ,EACR,MAAM,IAAIK,YAAY,iBAAiBD,sCAAwCJ,KAGjF,MAAMM,EAAM,CAAExN,KAAM,MAAOZ,MAAO,GAAIiK,OAAQmB,EAAKiD,SAAW,IACxD7C,EAAS,CAAC4C,GAEVE,EAAUlD,EAAKkD,QAAU,GAAK,KAG9BC,EAAiBzK,EAAUwE,UAAU8C,EAAKZ,SAC1CgE,EAAgB1K,EAAUoE,aAAaqG,IAEvC3L,YACJA,EAAWO,aACXA,EAAYN,cACZA,EAAaQ,SACbA,EAAQJ,WACRA,EAAUK,OACVA,EAAME,aACNA,EAAYC,cACZA,EAAaX,MACbA,EAAKY,aACLA,EAAYC,KACZA,EAAIX,aACJA,GACEuL,EAEEE,EAAWrD,GACR,IAAIkD,UAAgBtL,IAAeoI,EAAKsD,IAAMzL,EAAaL,UAG9D+L,EAAQvD,EAAKsD,IAAM,GAAKpL,EACxBsL,EAAaxD,EAAKsD,IAAM5L,EAAQY,EACtC,IAAImL,GAAqB,IAAdzD,EAAK0D,KAAgBL,EAASrD,GAAQzH,EAE7CyH,EAAKkD,UACPO,EAAO,IAAIA,MAIa,kBAAfzD,EAAKuB,QACdvB,EAAK2D,UAAY3D,EAAKuB,OAGxB,MAAMjN,EAAQ,CACZiK,QACA+B,OAAO,EACPC,MAAO,EACP+C,KAAkB,IAAbtD,EAAKsD,IACVM,SAAU,GACV/E,OAAQ,GACRC,OAAQ,GACR+E,WAAW,EACX3E,SAAS,EACT4E,SAAU,EACV7C,OAAQ,EACR8C,OAAQ,EACRC,OAAQ,EACRX,UAAU,EACVjD,UAGF7B,EAAQe,EAAMV,aAAaL,EAAOjK,GAClCwO,EAAMvE,EAAM1H,OAEZ,MAAMoN,EAAW,GACXhD,EAAS,GACTiD,EAAQ,GACd,IACItP,EADAyL,EAAO2C,EAOX,MAAM9B,EAAM,IAAM5M,EAAMgM,QAAUwC,EAAM,EAClC3B,EAAO7M,EAAM6M,KAAO,CAACa,EAAI,IAAMzD,EAAMjK,EAAMgM,MAAQ0B,GACnDX,EAAU/M,EAAM+M,QAAU,IAAM9C,IAAQjK,EAAMgM,QAAU,GACxD6D,EAAY,IAAM5F,EAAMnI,MAAM9B,EAAMgM,MAAQ,GAC5C8D,EAAU,CAACxP,EAAQ,GAAIyP,EAAM,KACjC/P,EAAMsP,UAAYhP,EAClBN,EAAMgM,OAAS+D,GAGXC,EAAS3E,IACbrL,EAAMuK,QAA0B,MAAhBc,EAAMd,OAAiBc,EAAMd,OAASc,EAAM/K,MAC5DwP,EAAQzE,EAAM/K,QAGV2P,EAAS,KACb,IAAIC,EAAQ,EAEZ,KAAkB,MAAXrD,MAA+B,MAAZA,EAAK,IAA0B,MAAZA,EAAK,KAChDE,IACA/M,EAAMiM,QACNiE,IAGF,OAAIA,EAAQ,GAAM,IAIlBlQ,EAAM4K,SAAU,EAChB5K,EAAMiM,SACC,IAGHkE,EAAYjP,IAChBlB,EAAMkB,KACN0O,EAAMxC,KAAKlM,IAGPkP,EAAYlP,IAChBlB,EAAMkB,KACN0O,EAAMS,OAWFjD,EAAOkD,IACX,GAAkB,aAAdvE,EAAK7K,KAAqB,CAC5B,MAAMiL,EAAUnM,EAAM2M,OAAS,IAAmB,UAAb2D,EAAIpP,MAAiC,UAAboP,EAAIpP,MAC3DoL,GAA4B,IAAhBgE,EAAIC,SAAqBZ,EAASpN,SAAwB,SAAb+N,EAAIpP,MAAgC,UAAboP,EAAIpP,MAEzE,UAAboP,EAAIpP,MAAiC,UAAboP,EAAIpP,MAAqBiL,GAAYG,IAC/DtM,EAAMuK,OAASvK,EAAMuK,OAAOzI,MAAM,GAAIiK,EAAKxB,OAAOhI,QAClDwJ,EAAK7K,KAAO,OACZ6K,EAAKzL,MAAQ,IACbyL,EAAKxB,OAAS4E,EACdnP,EAAMuK,QAAUwB,EAAKxB,OAE7B,CAOI,GALIoF,EAASpN,QAAuB,UAAb+N,EAAIpP,OACzByO,EAASA,EAASpN,OAAS,GAAGiO,OAASF,EAAIhQ,QAGzCgQ,EAAIhQ,OAASgQ,EAAI/F,SAAQyF,EAAOM,GAChCvE,GAAsB,SAAdA,EAAK7K,MAAgC,SAAboP,EAAIpP,KAGtC,OAFA6K,EAAKxB,QAAUwB,EAAKxB,QAAUwB,EAAKzL,OAASgQ,EAAIhQ,WAChDyL,EAAKzL,OAASgQ,EAAIhQ,OAIpBgQ,EAAIvE,KAAOA,EACXD,EAAOsB,KAAKkD,GACZvE,EAAOuE,GAGHG,EAAc,CAACvP,EAAMZ,KACzB,MAAM+K,EAAQ,IAAKyD,EAAcxO,GAAQoQ,WAAY,EAAGF,MAAO,IAE/DnF,EAAMU,KAAOA,EACbV,EAAMoE,OAASzP,EAAMyP,OACrBpE,EAAMd,OAASvK,EAAMuK,OACrB,MAAMA,GAAUmB,EAAKkD,QAAU,IAAM,IAAMvD,EAAM3C,KAEjDyH,EAAU,UACV/C,EAAK,CAAElM,OAAMZ,QAAOiK,OAAQvK,EAAMuK,OAAS,GAAK5G,IAChDyJ,EAAK,CAAElM,KAAM,QAASqP,SAAS,EAAMjQ,MAAOyM,IAAWxC,WACvDoF,EAASvC,KAAK/B,IAGVsF,EAAetF,IACnB,IACIuF,EADArG,EAASc,EAAM1C,OAAS+C,EAAKkD,QAAU,IAAM,IAGjD,GAAmB,WAAfvD,EAAMnK,KAAmB,CAC3B,IAAI2P,EAAc1B,EAUlB,GARI9D,EAAMmF,OAASnF,EAAMmF,MAAMjO,OAAS,GAAK8I,EAAMmF,MAAMM,SAAS,OAChED,EAAc9B,EAASrD,KAGrBmF,IAAgB1B,GAAQvC,KAAS,QAAQtD,KAAKuG,QAChDtF,EAASc,EAAM1C,MAAQ,OAAOkI,KAG5BxF,EAAMmF,MAAMM,SAAS,OAASF,EAAOf,MAAgB,eAAevG,KAAKsH,GAAO,CAMlF,MAAMG,EAAa5C,EAAMyC,EAAM,IAAKlG,EAASsG,WAAW,IAASzG,OAEjEA,EAASc,EAAM1C,MAAQ,IAAIoI,KAAcF,IACjD,CAE8B,QAApBxF,EAAMU,KAAK7K,OACblB,EAAMyM,gBAAiB,EAE/B,CAEIW,EAAK,CAAElM,KAAM,QAASqP,SAAS,EAAMjQ,QAAOiK,WAC5C6F,EAAU,WAOZ,IAAuB,IAAnB1E,EAAKsF,YAAwB,sBAAsB1H,KAAKW,GAAQ,CAClE,IAAIuC,GAAc,EAEdjC,EAASN,EAAM5H,QAAQmD,EAA6B,CAACyL,EAAGC,EAAKzI,EAAO/G,EAAOkP,EAAM5E,IACrE,OAAVtK,GACF8K,GAAc,EACPyE,GAGK,MAAVvP,EACEwP,EACKA,EAAMxP,GAASkP,EAAOxN,EAAM+N,OAAOP,EAAKrO,QAAU,IAE7C,IAAVyJ,EACKkD,GAAc0B,EAAOxN,EAAM+N,OAAOP,EAAKrO,QAAU,IAEnDa,EAAM+N,OAAO1I,EAAMlG,QAGd,MAAVb,EACKwB,EAAYiO,OAAO1I,EAAMlG,QAGpB,MAAVb,EACEwP,EACKA,EAAMxP,GAASkP,EAAOzB,EAAO,IAE/BA,EAEF+B,EAAMD,EAAI,KAAKA,KAaxB,OAVoB,IAAhBzE,IAEAjC,GADoB,IAAlBmB,EAAK6B,SACEhD,EAAOlI,QAAQ,MAAO,IAEtBkI,EAAOlI,QAAQ,OAAQ4O,GACvBA,EAAE1O,OAAS,GAAM,EAAI,OAAU0O,EAAI,KAAO,KAKnD1G,IAAWN,IAA2B,IAAlByB,EAAKf,UAC3B3K,EAAMuK,OAASN,EACRjK,IAGTA,EAAMuK,OAASS,EAAMP,WAAWF,EAAQvK,EAAO0K,GACxC1K,EACX,CAME,MAAQ4M,KAAO,CAGb,GAFAtM,EAAQyM,IAEM,OAAVzM,EACF,SAOF,GAAc,OAAVA,EAAgB,CAClB,MAAM0M,EAAOH,IAEb,GAAa,MAATG,IAA8B,IAAdtB,EAAK0D,KACvB,SAGF,GAAa,MAATpC,GAAyB,MAATA,EAClB,SAGF,IAAKA,EAAM,CACT1M,GAAS,KACT8M,EAAK,CAAElM,KAAM,OAAQZ,UACrB,QACR,CAGM,MAAMyJ,EAAQ,OAAOqH,KAAKvB,KAC1B,IAAIhE,EAAU,EAgBd,GAdI9B,GAASA,EAAM,GAAGxH,OAAS,IAC7BsJ,EAAU9B,EAAM,GAAGxH,OACnBvC,EAAMgM,OAASH,EACXA,EAAU,GAAM,IAClBvL,GAAS,QAIS,IAAlBoL,EAAK6B,SACPjN,EAAQyM,IAERzM,GAASyM,IAGY,IAAnB/M,EAAMwP,SAAgB,CACxBpC,EAAK,CAAElM,KAAM,OAAQZ,UACrB,QACR,CACA,CAOI,GAAIN,EAAMwP,SAAW,IAAgB,MAAVlP,GAAgC,MAAfyL,EAAKzL,OAAgC,OAAfyL,EAAKzL,OAAiB,CACtF,IAAmB,IAAfoL,EAAK2F,OAA6B,MAAV/Q,EAAe,CACzC,MAAMkQ,EAAQzE,EAAKzL,MAAMwB,MAAM,GAC/B,GAAI0O,EAAMM,SAAS,OACjB/E,EAAKsF,OAAQ,EAETb,EAAMM,SAAS,MAAM,CACvB,MAAM1G,EAAM2B,EAAKzL,MAAM+J,YAAY,KAC7BiH,EAAMvF,EAAKzL,MAAMwB,MAAM,EAAGsI,GAC1BwG,EAAO7E,EAAKzL,MAAMwB,MAAMsI,EAAM,GAC9BiH,EAAQ/M,EAAmBsM,GACjC,GAAIS,EAAO,CACTtF,EAAKzL,MAAQgR,EAAMD,EACnBrR,EAAMuP,WAAY,EAClBxC,IAEK2B,EAAInE,QAAmC,IAAzBuB,EAAOyF,QAAQxF,KAChC2C,EAAInE,OAAS5G,GAEf,QACd,CACA,CAEA,EAEqB,MAAVrD,GAA4B,MAAXuM,KAA8B,MAAVvM,GAA4B,MAAXuM,OACzDvM,EAAQ,KAAKA,KAGD,MAAVA,GAAiC,MAAfyL,EAAKzL,OAAgC,OAAfyL,EAAKzL,QAC/CA,EAAQ,KAAKA,MAGI,IAAfoL,EAAK2F,OAA4B,MAAV/Q,GAAgC,MAAfyL,EAAKzL,QAC/CA,EAAQ,KAGVyL,EAAKzL,OAASA,EACd0P,EAAO,CAAE1P,UACT,QACN,CAOI,GAAqB,IAAjBN,EAAM0P,QAA0B,MAAVpP,EAAe,CACvCA,EAAQ0K,EAAMxB,YAAYlJ,GAC1ByL,EAAKzL,OAASA,EACd0P,EAAO,CAAE1P,UACT,QACN,CAMI,GAAc,MAAVA,EAAe,CACjBN,EAAM0P,OAA0B,IAAjB1P,EAAM0P,OAAe,EAAI,GAChB,IAApBhE,EAAK8F,YACPpE,EAAK,CAAElM,KAAM,OAAQZ,UAEvB,QACN,CAMI,GAAc,MAAVA,EAAe,CACjB6P,EAAU,UACV/C,EAAK,CAAElM,KAAM,QAASZ,UACtB,QACN,CAEI,GAAc,MAAVA,EAAe,CACjB,GAAqB,IAAjBN,EAAMyP,SAAwC,IAAxB/D,EAAK+F,eAC7B,MAAM,IAAIhD,YAAYP,EAAY,UAAW,MAG/C,MAAMqC,EAAUZ,EAASA,EAASpN,OAAS,GAC3C,GAAIgO,GAAWvQ,EAAMyP,SAAWc,EAAQd,OAAS,EAAG,CAClDkB,EAAahB,EAASU,OACtB,QACR,CAEMjD,EAAK,CAAElM,KAAM,QAASZ,QAAOiK,OAAQvK,EAAMyP,OAAS,IAAM,QAC1DW,EAAU,UACV,QACN,CAMI,GAAc,MAAV9P,EAAe,CACjB,IAAuB,IAAnBoL,EAAKgG,WAAuB7B,IAAYiB,SAAS,KAOnDX,EAAU,gBAP+C,CACzD,IAAuB,IAAnBzE,EAAKgG,YAA8C,IAAxBhG,EAAK+F,eAClC,MAAM,IAAIhD,YAAYP,EAAY,UAAW,MAG/C5N,EAAQ,KAAKA,GACrB,CAIM8M,EAAK,CAAElM,KAAM,UAAWZ,UACxB,QACN,CAEI,GAAc,MAAVA,EAAe,CACjB,IAAuB,IAAnBoL,EAAKgG,WAAuB3F,GAAsB,YAAdA,EAAK7K,MAA4C,IAAtB6K,EAAKzL,MAAMiC,OAAe,CAC3F6K,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQ,KAAKjK,MACzC,QACR,CAEM,GAAuB,IAAnBN,EAAMwP,SAAgB,CACxB,IAA4B,IAAxB9D,EAAK+F,eACP,MAAM,IAAIhD,YAAYP,EAAY,UAAW,MAG/Cd,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQ,KAAKjK,MACzC,QACR,CAEM8P,EAAU,YAEV,MAAMuB,EAAY5F,EAAKzL,MAAMwB,MAAM,GAUnC,IATmB,IAAfiK,EAAKsF,OAAmC,MAAjBM,EAAU,IAAeA,EAAUb,SAAS,OACrExQ,EAAQ,IAAIA,KAGdyL,EAAKzL,OAASA,EACd0P,EAAO,CAAE1P,WAIoB,IAAzBoL,EAAKkG,iBAA6B5G,EAAM5B,cAAcuI,GACxD,SAGF,MAAME,EAAU7G,EAAMxB,YAAYuC,EAAKzL,OAKvC,GAJAN,EAAMuK,OAASvK,EAAMuK,OAAOzI,MAAM,GAAIiK,EAAKzL,MAAMiC,SAIpB,IAAzBmJ,EAAKkG,gBAA0B,CACjC5R,EAAMuK,QAAUsH,EAChB9F,EAAKzL,MAAQuR,EACb,QACR,CAGM9F,EAAKzL,MAAQ,IAAIsO,IAAUiD,KAAW9F,EAAKzL,SAC3CN,EAAMuK,QAAUwB,EAAKzL,MACrB,QACN,CAMI,GAAc,MAAVA,IAAkC,IAAjBoL,EAAKoG,QAAkB,CAC1C3B,EAAU,UAEV,MAAMzH,EAAO,CACXxH,KAAM,QACNZ,QACAiK,OAAQ,IACRwH,YAAa/R,EAAMuK,OAAOhI,OAC1ByP,YAAahS,EAAM8L,OAAOvJ,QAG5BoK,EAAOS,KAAK1E,GACZ0E,EAAK1E,GACL,QACN,CAEI,GAAc,MAAVpI,EAAe,CACjB,MAAM2R,EAAQtF,EAAOA,EAAOpK,OAAS,GAErC,IAAqB,IAAjBmJ,EAAKoG,UAAqBG,EAAO,CACnC7E,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQjK,IACpC,QACR,CAEM,IAAIiK,EAAS,IAEb,IAAmB,IAAf0H,EAAMC,KAAe,CACvB,MAAMC,EAAMrG,EAAOhK,QACbsQ,EAAQ,GAEd,IAAK,IAAIzE,EAAIwE,EAAI5P,OAAS,EAAGoL,GAAK,IAChC7B,EAAOuE,MACa,UAAhB8B,EAAIxE,GAAGzM,MAFwByM,IAKf,SAAhBwE,EAAIxE,GAAGzM,MACTkR,EAAMC,QAAQF,EAAIxE,GAAGrN,OAIzBiK,EAASqD,EAAYwE,EAAO1G,GAC5B1L,EAAMuP,WAAY,CAC1B,CAEM,IAAoB,IAAhB0C,EAAMK,QAAiC,IAAfL,EAAMC,KAAe,CAC/C,MAAMK,EAAMvS,EAAMuK,OAAOzI,MAAM,EAAGmQ,EAAMF,aAClCS,EAAOxS,EAAM8L,OAAOhK,MAAMmQ,EAAMD,aACtCC,EAAM3R,MAAQ2R,EAAM1H,OAAS,MAC7BjK,EAAQiK,EAAS,MACjBvK,EAAMuK,OAASgI,EACf,IAAK,MAAME,KAAKD,EACdxS,EAAMuK,QAAWkI,EAAElI,QAAUkI,EAAEnS,KAEzC,CAEM8M,EAAK,CAAElM,KAAM,QAASZ,QAAOiK,WAC7B6F,EAAU,UACVzD,EAAO0D,MACP,QACN,CAMI,GAAc,MAAV/P,EAAe,CACbqP,EAASpN,OAAS,GACpBoN,EAASA,EAASpN,OAAS,GAAGmO,aAEhCtD,EAAK,CAAElM,KAAM,OAAQZ,UACrB,QACN,CAMI,GAAc,MAAVA,EAAe,CACjB,IAAIiK,EAASjK,EAEb,MAAM2R,EAAQtF,EAAOA,EAAOpK,OAAS,GACjC0P,GAAqC,WAA5BrC,EAAMA,EAAMrN,OAAS,KAChC0P,EAAMK,OAAQ,EACd/H,EAAS,KAGX6C,EAAK,CAAElM,KAAM,QAASZ,QAAOiK,WAC7B,QACN,CAMI,GAAc,MAAVjK,EAAe,CAKjB,GAAkB,QAAdyL,EAAK7K,MAAkBlB,EAAMgM,QAAUhM,EAAMiM,MAAQ,EAAG,CAC1DjM,EAAMiM,MAAQjM,EAAMgM,MAAQ,EAC5BhM,EAAMsP,SAAW,GACjBtP,EAAMuK,OAAS,GACfuB,EAAOuE,MACPtE,EAAO2C,EACP,QACR,CAEMtB,EAAK,CAAElM,KAAM,QAASZ,QAAOiK,OAAQpH,IACrC,QACN,CAMI,GAAc,MAAV7C,EAAe,CACjB,GAAIN,EAAM2M,OAAS,GAAmB,QAAdZ,EAAK7K,KAAgB,CACxB,MAAf6K,EAAKzL,QAAeyL,EAAKxB,OAASrH,GACtC,MAAM+O,EAAQtF,EAAOA,EAAOpK,OAAS,GACrCwJ,EAAK7K,KAAO,OACZ6K,EAAKxB,QAAUjK,EACfyL,EAAKzL,OAASA,EACd2R,EAAMC,MAAO,EACb,QACR,CAEM,GAAKlS,EAAM2M,OAAS3M,EAAMyP,SAAY,GAAmB,QAAd1D,EAAK7K,MAAgC,UAAd6K,EAAK7K,KAAkB,CACvFkM,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQrH,IACpC,QACR,CAEMkK,EAAK,CAAElM,KAAM,MAAOZ,QAAOiK,OAAQrH,IACnC,QACN,CAMI,GAAc,MAAV5C,EAAe,CAEjB,KADgByL,GAAuB,MAAfA,EAAKzL,SACM,IAAnBoL,EAAK2D,WAAiC,MAAXxC,KAA8B,MAAZA,EAAK,GAAY,CAC5E4D,EAAY,QAASnQ,GACrB,QACR,CAEM,GAAIyL,GAAsB,UAAdA,EAAK7K,KAAkB,CACjC,MAAM8L,EAAOH,IACb,IAAItC,EAASjK,GAEO,MAAfyL,EAAKzL,QAAkB,SAASgJ,KAAK0D,IAAoB,MAATA,IAAiB,eAAe1D,KAAKuG,QACxFtF,EAAS,KAAKjK,KAGhB8M,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,WAC5B,QACR,CAEM,IAAiB,IAAbmB,EAAKsD,MAA+B,UAAdjD,EAAK7K,MAAkC,QAAd6K,EAAK7K,MAAiB,CACvEkM,EAAK,CAAElM,KAAM,QAASZ,QAAOiK,OAAQvG,IACrC,QACR,CAEMoJ,EAAK,CAAElM,KAAM,QAASZ,QAAOiK,OAAQnH,IACrC,QACN,CAMI,GAAc,MAAV9C,EAAe,CACjB,IAAuB,IAAnBoL,EAAK2D,WAAiC,MAAXxC,MACb,MAAZA,EAAK,KAAe,SAASvD,KAAKuD,EAAK,KAAK,CAC9C4D,EAAY,SAAUnQ,GACtB,QACV,CAGM,IAAsB,IAAlBoL,EAAKwB,UAAqC,IAAhBlN,EAAMgM,MAAa,CAC/CiE,IACA,QACR,CACA,CAMI,GAAc,MAAV3P,EAAe,CACjB,IAAuB,IAAnBoL,EAAK2D,WAAiC,MAAXxC,KAA8B,MAAZA,EAAK,GAAY,CAChE4D,EAAY,OAAQnQ,GACpB,QACR,CAEM,GAAKyL,GAAuB,MAAfA,EAAKzL,QAAiC,IAAfoL,EAAKgH,MAAiB,CACxDtF,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQ9G,IACpC,QACR,CAEM,GAAKsI,IAAuB,YAAdA,EAAK7K,MAAoC,UAAd6K,EAAK7K,MAAkC,UAAd6K,EAAK7K,OAAsBlB,EAAMyP,OAAS,EAAG,CAC7GrC,EAAK,CAAElM,KAAM,OAAQZ,UACrB,QACR,CAEM8M,EAAK,CAAElM,KAAM,OAAQZ,MAAOmD,IAC5B,QACN,CAMI,GAAc,MAAVnD,EAAe,CACjB,IAAuB,IAAnBoL,EAAK2D,WAAiC,MAAXxC,KAA8B,MAAZA,EAAK,GAAY,CAChEO,EAAK,CAAElM,KAAM,KAAMqP,SAAS,EAAMjQ,QAAOiK,OAAQ,KACjD,QACR,CAEM6C,EAAK,CAAElM,KAAM,OAAQZ,UACrB,QACN,CAMI,GAAc,MAAVA,EAAe,CACH,MAAVA,GAA2B,MAAVA,IACnBA,EAAQ,KAAKA,KAGf,MAAMyJ,EAAQzE,EAAwB8L,KAAKvB,KACvC9F,IACFzJ,GAASyJ,EAAM,GACf/J,EAAMgM,OAASjC,EAAM,GAAGxH,QAG1B6K,EAAK,CAAElM,KAAM,OAAQZ,UACrB,QACN,CAMI,GAAIyL,IAAuB,aAAdA,EAAK7K,OAAqC,IAAd6K,EAAKoD,MAAgB,CAC5DpD,EAAK7K,KAAO,OACZ6K,EAAKoD,MAAO,EACZpD,EAAKzL,OAASA,EACdyL,EAAKxB,OAAS4E,EACdnP,EAAMuP,WAAY,EAClBvP,EAAM+O,UAAW,EACjBe,EAAQxP,GACR,QACN,CAEI,IAAIsQ,EAAOf,IACX,IAAuB,IAAnBnE,EAAK2D,WAAsB,UAAU/F,KAAKsH,GAAO,CACnDH,EAAY,OAAQnQ,GACpB,QACN,CAEI,GAAkB,SAAdyL,EAAK7K,KAAiB,CACxB,IAAwB,IAApBwK,EAAKiH,WAAqB,CAC5B7C,EAAQxP,GACR,QACR,CAEM,MAAMsS,EAAQ7G,EAAKA,KACb8G,EAASD,EAAM7G,KACf+G,EAAyB,UAAfF,EAAM1R,MAAmC,QAAf0R,EAAM1R,KAC1C6R,EAAYF,IAA2B,SAAhBA,EAAO3R,MAAmC,aAAhB2R,EAAO3R,MAE9D,IAAkB,IAAdwK,EAAK0D,QAAmB0D,GAAYlC,EAAK,IAAkB,MAAZA,EAAK,IAAc,CACpExD,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQ,KACpC,QACR,CAEM,MAAM4B,EAAUnM,EAAM2M,OAAS,IAAqB,UAAfiG,EAAM1R,MAAmC,UAAf0R,EAAM1R,MAC/DoL,EAAYqD,EAASpN,SAA0B,SAAfqQ,EAAM1R,MAAkC,UAAf0R,EAAM1R,MACrE,IAAK4R,GAA0B,UAAfF,EAAM1R,OAAqBiL,IAAYG,EAAW,CAChEc,EAAK,CAAElM,KAAM,OAAQZ,QAAOiK,OAAQ,KACpC,QACR,CAGM,KAA4B,QAArBqG,EAAK9O,MAAM,EAAG,IAAc,CACjC,MAAMkR,EAAQ/I,EAAMjK,EAAMgM,MAAQ,GAClC,GAAIgH,GAAmB,MAAVA,EACX,MAEFpC,EAAOA,EAAK9O,MAAM,GAClBgO,EAAQ,MAAO,EACvB,CAEM,GAAmB,QAAf8C,EAAM1R,MAAkB0L,IAAO,CACjCb,EAAK7K,KAAO,WACZ6K,EAAKzL,OAASA,EACdyL,EAAKxB,OAASwE,EAASrD,GACvB1L,EAAMuK,OAASwB,EAAKxB,OACpBvK,EAAM+O,UAAW,EACjBe,EAAQxP,GACR,QACR,CAEM,GAAmB,UAAfsS,EAAM1R,MAAwC,QAApB0R,EAAM7G,KAAK7K,OAAmB6R,GAAanG,IAAO,CAC9E5M,EAAMuK,OAASvK,EAAMuK,OAAOzI,MAAM,IAAK8Q,EAAMrI,OAASwB,EAAKxB,QAAQhI,QACnEqQ,EAAMrI,OAAS,MAAMqI,EAAMrI,SAE3BwB,EAAK7K,KAAO,WACZ6K,EAAKxB,OAASwE,EAASrD,IAASA,EAAKuH,cAAgB,IAAM,OAC3DlH,EAAKzL,OAASA,EACdN,EAAM+O,UAAW,EACjB/O,EAAMuK,QAAUqI,EAAMrI,OAASwB,EAAKxB,OACpCuF,EAAQxP,GACR,QACR,CAEM,GAAmB,UAAfsS,EAAM1R,MAAwC,QAApB0R,EAAM7G,KAAK7K,MAA8B,MAAZ0P,EAAK,GAAY,CAC1E,MAAMsC,OAAkB,IAAZtC,EAAK,GAAgB,KAAO,GAExC5Q,EAAMuK,OAASvK,EAAMuK,OAAOzI,MAAM,IAAK8Q,EAAMrI,OAASwB,EAAKxB,QAAQhI,QACnEqQ,EAAMrI,OAAS,MAAMqI,EAAMrI,SAE3BwB,EAAK7K,KAAO,WACZ6K,EAAKxB,OAAS,GAAGwE,EAASrD,KAAQvI,KAAiBA,IAAgB+P,KACnEnH,EAAKzL,OAASA,EAEdN,EAAMuK,QAAUqI,EAAMrI,OAASwB,EAAKxB,OACpCvK,EAAM+O,UAAW,EAEjBe,EAAQxP,EAAQyM,KAEhBK,EAAK,CAAElM,KAAM,QAASZ,MAAO,IAAKiK,OAAQ,KAC1C,QACR,CAEM,GAAmB,QAAfqI,EAAM1R,MAA8B,MAAZ0P,EAAK,GAAY,CAC3C7E,EAAK7K,KAAO,WACZ6K,EAAKzL,OAASA,EACdyL,EAAKxB,OAAS,QAAQpH,KAAiB4L,EAASrD,KAAQvI,KACxDnD,EAAMuK,OAASwB,EAAKxB,OACpBvK,EAAM+O,UAAW,EACjBe,EAAQxP,EAAQyM,KAChBK,EAAK,CAAElM,KAAM,QAASZ,MAAO,IAAKiK,OAAQ,KAC1C,QACR,CAGMvK,EAAMuK,OAASvK,EAAMuK,OAAOzI,MAAM,GAAIiK,EAAKxB,OAAOhI,QAGlDwJ,EAAK7K,KAAO,WACZ6K,EAAKxB,OAASwE,EAASrD,GACvBK,EAAKzL,OAASA,EAGdN,EAAMuK,QAAUwB,EAAKxB,OACrBvK,EAAM+O,UAAW,EACjBe,EAAQxP,GACR,QACN,CAEI,MAAM+K,EAAQ,CAAEnK,KAAM,OAAQZ,QAAOiK,OAAQ4E,IAE3B,IAAdzD,EAAK0D,MASLrD,GAAuB,YAAdA,EAAK7K,MAAoC,UAAd6K,EAAK7K,OAAoC,IAAfwK,EAAKgH,OAMnE1S,EAAMgM,QAAUhM,EAAMiM,OAAuB,UAAdF,EAAK7K,MAAkC,QAAd6K,EAAK7K,OAC7C,QAAd6K,EAAK7K,MACPlB,EAAMuK,QAAUzG,EAChBiI,EAAKxB,QAAUzG,IAEO,IAAb4H,EAAKsD,KACdhP,EAAMuK,QAAUxG,EAChBgI,EAAKxB,QAAUxG,IAGf/D,EAAMuK,QAAU0E,EAChBlD,EAAKxB,QAAU0E,GAGF,MAAXpC,MACF7M,EAAMuK,QAAU5G,EAChBoI,EAAKxB,QAAU5G,IAInByJ,EAAK/B,KAzBHA,EAAMd,OAASjK,EACf8M,EAAK/B,KAVLA,EAAMd,OAAS,MACG,QAAdwB,EAAK7K,MAAgC,UAAd6K,EAAK7K,OAC9BmK,EAAMd,OAAS0E,EAAQ5D,EAAMd,QAE/B6C,EAAK/B,GA+BX,CAEE,KAAOrL,EAAMwP,SAAW,GAAG,CACzB,IAA4B,IAAxB9D,EAAK+F,eAAyB,MAAM,IAAIhD,YAAYP,EAAY,UAAW,MAC/ElO,EAAMuK,OAASS,EAAMhB,WAAWhK,EAAMuK,OAAQ,KAC9C6F,EAAU,WACd,CAEE,KAAOpQ,EAAMyP,OAAS,GAAG,CACvB,IAA4B,IAAxB/D,EAAK+F,eAAyB,MAAM,IAAIhD,YAAYP,EAAY,UAAW,MAC/ElO,EAAMuK,OAASS,EAAMhB,WAAWhK,EAAMuK,OAAQ,KAC9C6F,EAAU,SACd,CAEE,KAAOpQ,EAAM2M,OAAS,GAAG,CACvB,IAA4B,IAAxBjB,EAAK+F,eAAyB,MAAM,IAAIhD,YAAYP,EAAY,UAAW,MAC/ElO,EAAMuK,OAASS,EAAMhB,WAAWhK,EAAMuK,OAAQ,KAC9C6F,EAAU,SACd,CAOE,IAL2B,IAAvB1E,EAAKuH,eAAyC,SAAdlH,EAAK7K,MAAiC,YAAd6K,EAAK7K,MAC/DkM,EAAK,CAAElM,KAAM,cAAeZ,MAAO,GAAIiK,OAAQ,GAAGpH,QAI5B,IAApBnD,EAAMuP,UAAoB,CAC5BvP,EAAMuK,OAAS,GAEf,IAAK,MAAMc,KAASrL,EAAM8L,OACxB9L,EAAMuK,QAA0B,MAAhBc,EAAMd,OAAiBc,EAAMd,OAASc,EAAM/K,MAExD+K,EAAM8H,SACRnT,EAAMuK,QAAUc,EAAM8H,OAG9B,CAEE,OAAOnT,UASTmO,EAAM6C,UAAY,CAAC/G,EAAOS,KACxB,MAAMgB,EAAO,IAAKhB,GACZ0D,EAAgC,iBAAnB1C,EAAK2C,UAAyBC,KAAKC,IAAIlK,EAAYqH,EAAK2C,WAAahK,EAClFmK,EAAMvE,EAAM1H,OAClB,GAAIiM,EAAMJ,EACR,MAAM,IAAIK,YAAY,iBAAiBD,sCAAwCJ,KAGjFnE,EAAQtE,EAAasE,IAAUA,EAG/B,MAAM/G,YACJA,EAAWC,cACXA,EAAaQ,SACbA,EAAQJ,WACRA,EAAUK,OACVA,EAAMC,QACNA,EAAOE,cACPA,EAAaE,KACbA,EAAIX,aACJA,GACEc,EAAUwE,UAAU8C,EAAKZ,SAEvBmE,EAAQvD,EAAKsD,IAAMnL,EAAUD,EAC7BwP,EAAW1H,EAAKsD,IAAMjL,EAAgBH,EACtCgL,EAAUlD,EAAKkD,QAAU,GAAK,KAEpC,IAAIO,GAAqB,IAAdzD,EAAK0D,KAAgB,MAAQnL,EAEpCyH,EAAKkD,UACPO,EAAO,IAAIA,MAGb,MAAMJ,EAAWrD,IACS,IAApBA,EAAKiH,WAA4BxD,EAC9B,IAAIP,UAAgBtL,IAAeoI,EAAKsD,IAAMzL,EAAaL,UAG9DmQ,EAAShK,IACb,OAAQA,GACN,IAAK,IACH,MAAO,GAAG4F,IAAQtL,IAAWwL,IAE/B,IAAK,KACH,MAAO,GAAGjM,IAAcS,IAAWwL,IAErC,IAAK,MACH,MAAO,GAAGF,IAAQE,IAAOjM,IAAcS,IAAWwL,IAEpD,IAAK,MACH,MAAO,GAAGF,IAAQE,IAAOhM,IAAgBQ,IAAWyP,IAAWjE,IAEjE,IAAK,KACH,OAAOF,EAAQF,EAASrD,GAE1B,IAAK,OACH,MAAO,MAAMuD,IAAQF,EAASrD,KAAQvI,MAAkBiQ,IAAWzP,IAAWwL,IAEhF,IAAK,SACH,MAAO,MAAMF,IAAQF,EAASrD,KAAQvI,MAAkBiQ,IAAWjE,IAAOjM,IAAcS,IAAWwL,IAErG,IAAK,QACH,MAAO,MAAMF,IAAQF,EAASrD,KAAQvI,MAAkBD,IAAcS,IAAWwL,IAEnF,QAAS,CACP,MAAMpF,EAAQ,iBAAiBqH,KAAK/H,GACpC,IAAKU,EAAO,OAEZ,MAAMuJ,EAASD,EAAOtJ,EAAM,IAC5B,IAAKuJ,EAAQ,OAEb,OAAOA,EAASpQ,EAAc6G,EAAM,EAC5C,IAIQQ,EAASS,EAAMV,aAAaL,EAlDpB,CAAEW,SAAS,EAAOJ,OAAQ,KAmDxC,IAAI8I,EAASD,EAAO9I,GAMpB,OAJI+I,IAAiC,IAAvB5H,EAAKuH,gBACjBK,GAAU,GAAGnQ,MAGRmQ,GAGTC,EAAiBpF,iCC1jCjB,MAAMqF,EAAO1K,IACPqF,EAAQlD,IACRD,EAAQyI,IACRrP,EAAYsP,IAyBZC,EAAY,CAACrG,EAAM5C,EAASkJ,GAAc,KAC9C,GAAI1K,MAAMC,QAAQmE,GAAO,CACvB,MAAMuG,EAAMvG,EAAKhM,IAAI2I,GAAS0J,EAAU1J,EAAOS,EAASkJ,IAClDE,EAAezK,IACnB,IAAK,MAAM0K,KAAWF,EAAK,CACzB,MAAM7T,EAAQ+T,EAAQ1K,GACtB,GAAIrJ,EAAO,OAAOA,CAC1B,CACM,OAAO,GAET,OAAO8T,CACX,CAEE,MAAME,GArCS/K,EAqCUqE,IArCmB,iBAARrE,IAAqBC,MAAMC,QAAQF,IAqCrCqE,EAAKxB,QAAUwB,EAAKrD,MArCvChB,MAuCf,GAAa,KAATqE,GAAgC,iBAATA,IAAsB0G,EAC/C,MAAM,IAAI7T,UAAU,6CAGtB,MAAMuL,EAAOhB,GAAW,CAAA,EAClB2G,EAAQ3F,EAAKZ,QACb4H,EAAQsB,EACVL,EAAUM,UAAU3G,EAAM5C,GAC1BiJ,EAAUO,OAAO5G,EAAM5C,GAAS,GAAO,GAErC1K,EAAQ0S,EAAM1S,aACb0S,EAAM1S,MAEb,IAAImU,EAAY,KAAM,EACtB,GAAIzI,EAAK0I,OAAQ,CACf,MAAMC,EAAa,IAAK3J,EAAS0J,OAAQ,KAAME,QAAS,KAAMC,SAAU,MACxEJ,EAAYR,EAAUjI,EAAK0I,OAAQC,EAAYT,EACnD,CAEE,MAAMY,EAAU,CAACvK,EAAOwK,GAAe,KACrC,MAAMV,QAAEA,EAAOhK,MAAEA,EAAKQ,OAAEA,GAAWoJ,EAAUrK,KAAKW,EAAOyI,EAAOhI,EAAS,CAAE4C,OAAM+D,UAC3EqD,EAAS,CAAEpH,OAAMtN,QAAO0S,QAAOrB,QAAOpH,QAAOM,SAAQR,QAAOgK,WAMlE,MAJ6B,mBAAlBrI,EAAK6I,UACd7I,EAAK6I,SAASG,IAGA,IAAZX,GACFW,EAAOX,SAAU,IACVU,GAAeC,GAGpBP,EAAUlK,IACiB,mBAAlByB,EAAKiJ,UACdjJ,EAAKiJ,SAASD,GAEhBA,EAAOX,SAAU,IACVU,GAAeC,IAGI,mBAAjBhJ,EAAK4I,SACd5I,EAAK4I,QAAQI,IAERD,GAAeC,IAOxB,OAJId,IACFY,EAAQxU,MAAQA,GAGXwU,UAoBTb,EAAUrK,KAAO,CAACW,EAAOyI,EAAOhI,GAAW4C,OAAM+D,SAAU,MACzD,GAAqB,iBAAVpH,EACT,MAAM,IAAI9J,UAAU,iCAGtB,GAAc,KAAV8J,EACF,MAAO,CAAE8J,SAAS,EAAOxJ,OAAQ,IAGnC,MAAMmB,EAAOhB,GAAW,CAAA,EAClBkK,EAASlJ,EAAKkJ,SAAWvD,EAAQrG,EAAMvB,eAAiB,MAC9D,IAAIM,EAAQE,IAAUqD,EAClB/C,EAAUR,GAAS6K,EAAUA,EAAO3K,GAASA,EAejD,OAbc,IAAVF,IACFQ,EAASqK,EAASA,EAAO3K,GAASA,EAClCF,EAAQQ,IAAW+C,IAGP,IAAVvD,IAAoC,IAAjB2B,EAAKkD,UAExB7E,GADqB,IAAnB2B,EAAKmJ,YAAwC,IAAlBnJ,EAAKb,SAC1B8I,EAAUkB,UAAU5K,EAAOyI,EAAOhI,EAAS2G,GAE3CqB,EAAMtB,KAAK7G,IAIhB,CAAEwJ,QAASe,QAAQ/K,GAAQA,QAAOQ,WAiB3CoJ,EAAUkB,UAAY,CAAC5K,EAAOqD,EAAM5C,KACpB4C,aAAgBS,OAAST,EAAOqG,EAAUO,OAAO5G,EAAM5C,IACxDpB,KAAK0B,EAAMH,SAASZ,IAoBnC0J,EAAUI,QAAU,CAAC1K,EAAK0L,EAAUrK,IAAYiJ,EAAUoB,EAAUrK,EAApBiJ,CAA6BtK,GAgB7EsK,EAAUxF,MAAQ,CAAC6G,EAAStK,IACtBxB,MAAMC,QAAQ6L,GAAiBA,EAAQ1T,IAAI2T,GAAKtB,EAAUxF,MAAM8G,EAAGvK,IAChEyD,EAAM6G,EAAS,IAAKtK,EAASsG,WAAW,IA8BjD2C,EAAUH,KAAO,CAACvJ,EAAOS,IAAY8I,EAAKvJ,EAAOS,GAcjDiJ,EAAUM,UAAY,CAACjU,EAAO0K,EAASwK,GAAe,EAAOtB,GAAc,KACzE,IAAqB,IAAjBsB,EACF,OAAOlV,EAAMuK,OAGf,MAAMmB,EAAOhB,GAAW,CAAA,EAClBiE,EAAUjD,EAAKf,SAAW,GAAK,IAC/BqF,EAAStE,EAAKf,SAAW,GAAK,IAEpC,IAAI2I,EAAS,GAAG3E,OAAa3O,EAAMuK,UAAUyF,IACzChQ,IAA2B,IAAlBA,EAAM4K,UACjB0I,EAAS,OAAOA,SAGlB,MAAMZ,EAAQiB,EAAUwB,QAAQ7B,EAAQ5I,GAKxC,OAJoB,IAAhBkJ,IACFlB,EAAM1S,MAAQA,GAGT0S,GAsBTiB,EAAUO,OAAS,CAACjK,EAAOS,EAAU,CAAA,EAAIwK,GAAe,EAAOtB,GAAc,KAC3E,IAAK3J,GAA0B,iBAAVA,EACnB,MAAM,IAAI9J,UAAU,+BAGtB,IAAIiV,EAAS,CAAExK,SAAS,EAAOoG,WAAW,GAU1C,OAR0B,IAAtBtG,EAAQsG,WAAqC,MAAb/G,EAAM,IAA2B,MAAbA,EAAM,KAC5DmL,EAAO7K,OAAS4D,EAAM6C,UAAU/G,EAAOS,IAGpC0K,EAAO7K,SACV6K,EAASjH,EAAMlE,EAAOS,IAGjBiJ,EAAUM,UAAUmB,EAAQ1K,EAASwK,EAActB,IAoB5DD,EAAUwB,QAAU,CAAC7B,EAAQ5I,KAC3B,IACE,MAAMgB,EAAOhB,GAAW,CAAA,EACxB,OAAO,IAAIqD,OAAOuF,EAAQ5H,EAAK2J,QAAU3J,EAAK4J,OAAS,IAAM,IACjE,CAAI,MAAOC,GACP,GAAI7K,IAA6B,IAAlBA,EAAQ8K,MAAgB,MAAMD,EAC7C,MAAO,IACX,GAQA5B,EAAUvP,UAAYA,EAMtBqR,EAAiB9B,+BClVjBtC,EAAiBvI,kBCoBjB,MAAM4M,EAIJhV,WAAAA,CAAYiV,GACV,MAAOxU,EAAYyU,GAxBGD,KACxB,MAAMxU,EAAuB,GACvByU,EAAsB,GAc5B,OAZAD,EACGlT,MAAM,KACNnB,IAAIuU,GAAYA,EAASnT,QACzBoT,OAAOhB,SACPiB,QAAQC,IACHA,EAASnU,WAAW,KACtBV,EAAWiM,KAAK,IAAI4I,KAEpBJ,EAAUxI,KAAK4I,KAId,CAAC7U,EAAYyU,IAQcK,CAAiBN,GAEjD7V,KAAKqB,WAAaA,EAClBrB,KAAK8V,UAAYA,CACnB,CAEOM,UAAAA,CAAWC,GAChB,OAA+B,IAA3BrW,KAAKqB,WAAWoB,QAA0C,IAA1BzC,KAAK8V,UAAUrT,SAIjDzC,KAAKsW,mBAAmB3V,EAAKyB,QAAQiU,KACrCrW,KAAKuW,oBAAoBF,GAE7B,CAEQE,mBAAAA,CAAoBF,GAC1B,OAA+B,IAA3BrW,KAAKqB,WAAWoB,QAIboR,EAAUI,QAAQoC,EAAUrW,KAAKqB,WAAY,CAAEmU,QAAQ,GAChE,CAEQc,kBAAAA,CAAmBP,GACzB,SAAKA,GAAsC,IAA1B/V,KAAK8V,UAAUrT,SAIzBoR,EAAUI,QAAQ8B,EAAU/V,KAAK8V,UAC1C,ECtDF,MA2BMU,EAA8BC,UAGlC,MAAM7B,EAAiB,GAEvB,GAAI8B,EAAMC,OAAQ,CAChB,MAAMC,OA1B6BH,UAGrC,IAAII,QAAQ,CAACC,EAASC,KACpBC,EAAUJ,KAAKE,EAASC,KAsBLE,CACjBP,GAEF9B,EAAOtH,KAAKsJ,EACd,MAAO,GAAIF,EAAMQ,YAAa,CAC5B,MAAMC,OAtCsBV,UAG9B,IAAII,QAAQ,CAACC,EAASC,KACpBK,EAAeC,eAAeC,YAAYR,EAASC,KAkChBQ,CACjCb,GAEIc,OA3B4Bf,WAGpC,MAAM7B,EAAiB,GAEvB,IAAK,MAAM8B,KAASpV,SACWkV,EAA4BE,IAC1CT,QAAQW,GAAQhC,EAAOtH,KAAKsJ,IAG7C,OAAOhC,GAiBe6C,CAA8BN,GAClDK,EAAMvB,QAAQW,GAAQhC,EAAOtH,KAAKsJ,GACpC,CAEA,OAAOhC,GAiCT,MAAM8C,EAMJ9W,WAAAA,EAAY+W,UACVA,EAAS9B,YACTA,EAAW+B,cACXA,EAAaC,SACbA,IAOA7X,KAAK2X,UAAYA,EACjB3X,KAAK4X,cAAgBA,EACrB5X,KAAK8X,kBAAoB,IAAIlC,EAAkBC,GAC/C7V,KAAK6X,SAAWA,EAEhBF,EAAUI,iBAAiB,YAAa,KACtCJ,EAAUK,UAAU/V,IAAI,kBAE1B0V,EAAUI,iBAAiB,YAAa,KACtCJ,EAAUK,UAAUC,OAAO,kBAE7BN,EAAUI,iBAAiB,WAAYG,IACrCP,EAAUK,UAAU/V,IAAI,gBACxBiW,EAAEC,mBAEJR,EAAUI,iBAAiB,OAAQ/X,KAAKoY,OAC1C,CAEAA,OAAUF,IACR,MAAMG,EAAYH,EAClBlY,KAAK2X,UAAUK,UAAUC,OAAO,gBAChCI,EAAUF,iBACVE,EAAUC,kBAEU7B,WAClB,IACE,GAAI4B,EAAUE,aAAc,CAC1B,MAAMf,OA1EiBf,WAI/B,GAAI8B,EAAaC,MAAO,CACtB,MAAMhB,EAAgB,GAEtB,IAAK,MAAMiB,KAAQF,EAAaC,MAAO,CACrC,MAAME,EAAkBD,EAAKE,mBAC7B,GAAID,SAC2BlC,EAC3BkC,IAEazC,QAAQW,GAAQY,EAAMlK,KAAKsJ,QACrC,CACL,MAAMA,EAAO6B,EAAKG,YAEdhC,GACFY,EAAMlK,KAAKsJ,EAEf,CACF,CAEA,OAAOY,CACT,CAEE,MAAO,IAAIe,EAAaf,QAgDEqB,CAAyBR,EAAUE,cACjDO,EAAwB,GACxBC,EAAuB,GAE7B,IAAK,MAAMnC,KAAQY,EACbxX,KAAK8X,kBAAkB1B,WAAWQ,EAAKoC,MACzCF,EAAcxL,KAAKsJ,GAEnBmC,EAAazL,KAAKsJ,GAItB5W,KAAK6X,SAASoB,qBAAqBF,GAC9B/Y,KAAK4X,cAAckB,EAC1B,CACF,CAAE,MAAOI,GACPC,QAAQD,MAAMA,EAChB,GAGGE;;;;;;;gDClIT,IAAIC,EAAkB,iBAOtBC,EAUA,SAAoBC,GAClB,IAOIC,EAPAjQ,EAAM,GAAKgQ,EACXtP,EAAQoP,EAAgB/H,KAAK/H,GAEjC,IAAKU,EACH,OAAOV,EAIT,IAAIkQ,EAAO,GACPvN,EAAQ,EACRE,EAAY,EAEhB,IAAKF,EAAQjC,EAAMiC,MAAOA,EAAQ3C,EAAI9G,OAAQyJ,IAAS,CACrD,OAAQ3C,EAAIyD,WAAWd,IACrB,KAAK,GACHsN,EAAS,SACT,MACF,KAAK,GACHA,EAAS,QACT,MACF,KAAK,GACHA,EAAS,QACT,MACF,KAAK,GACHA,EAAS,OACT,MACF,KAAK,GACHA,EAAS,OACT,MACF,QACE,SAGApN,IAAcF,IAChBuN,GAAQlQ,EAAImQ,UAAUtN,EAAWF,IAGnCE,EAAYF,EAAQ,EACpBuN,GAAQD,CACZ,CAEE,OAAOpN,IAAcF,EACjBuN,EAAOlQ,EAAImQ,UAAUtN,EAAWF,GAChCuN,CACN,cC7EO,MAmBME,EAAyBA,CACpCC,EACAlP,IACYA,EAAS,GAAGA,KAAUkP,IAAcA,EAE5CC,EAA4BA,CAChCD,EACAlP,IACYA,EAASkP,EAAU5X,MAAM0I,EAAOjI,OAAS,GAAKmX,EAE/CE,EAAYA,CACvBC,EACAH,EACAlP,KAEA,MAAMsP,EAAsBL,EAAuBC,EAAWlP,GACxDP,EAAQ4P,EAAKE,cAAc,UAAUD,OAE3C,OAAK7P,GACI,MAME+P,EAAsBA,CACjCN,EACAlP,IACW,GAAGmP,EAA0BD,EAAWlP,aAExCyP,EAAgCA,CAC3CJ,EACAH,EACAlP,IACuBoP,EAAUC,EAAMH,EAAWlP,IAASlK,MCjD7D,MAAM4Z,EAMJxZ,WAAAA,EAAYuJ,MACVA,EAAK7K,OACLA,EAAM+a,aACNA,EAAYC,aACZA,IAOAta,KAAK2X,UAAY3X,KAAKua,qBAAqBjb,GAC3CU,KAAKwa,OAASxa,KAAKya,qBAAqBnb,GACxCU,KAAKmK,MAAQA,EACbnK,KAAKsa,aAAeA,EAEhBD,IACFra,KAAKmK,MAAMuQ,UAAW,EAE1B,CAEOC,YAAAA,CAAaC,EAAkBC,GACpC,MAAMC,EAAM9a,KAAK+a,QAAQH,EAAUC,GAE7BG,EAAeC,SAASC,cAAc,QAC5CF,EAAaG,UAAY,eAEzB,MAAMC,EAAYH,SAASC,cAAc,QACzCE,EAAUD,UAAY,qBAEtBH,EAAaK,YAAYD,GACzBN,EAAIO,YAAYL,GAEhB,MAAMM,EAAaL,SAASC,cAAc,KAQ1C,OAPAI,EAAWH,UAAY,aAEvBnb,KAAKub,eAAeD,EAAYtb,KAAKwb,eAAe,WACpDF,EAAWG,aAAa,aAAcZ,EAAYa,YAClDJ,EAAWK,KAAO,IAClBb,EAAIO,YAAYC,GAETR,CACT,CAEOc,eAAAA,CACLhB,EACAC,EACAgB,GAEA,MAAMxc,EAAUW,KAAK+a,QAAQH,EAAUC,GAEvC,OADA7a,KAAK8b,WAAWjB,EAAagB,GACtBxc,CACT,CAEO0c,UAAAA,GACL,MAAM5R,MAAEA,GAAUnK,KAElBmK,EAAM3J,MAAQ,EAChB,CAEOwb,UAAAA,CAAW9P,GAChB,MAAM4O,EAAM9a,KAAKic,YAAY/P,GAEzB4O,GACFA,EAAI7C,QAER,CAEOiE,aAAAA,CAAchQ,GACnB,MAAMiQ,EAAanc,KAAKoc,eAAelQ,GAEnCiQ,GACFA,EAAWnE,UAAU/V,IAAI,eAE7B,CAEOoa,aAAAA,CAAcnQ,GACnB,MAAMoQ,EAAatc,KAAKuc,eAAerQ,GAEnCoQ,GACFA,EAAWtE,UAAU/V,IAAI,eAE7B,CAEOga,WAAAA,CAAY/P,GACjB,OAAOlM,KAAK2X,UAAUsC,cAAc,gBAAgB/N,EAAMwP,aAC5D,CAEOc,cAAAA,GACL,MAAMC,EAAWzc,KAAK2X,UAAUsC,cAAc,kBAE1CwC,GACFA,EAASxE,QAEb,CAEOyE,cAAAA,GACL,GAAI1c,KAAK2X,UAAUsC,cAAc,kBAC/B,OAGF,MAAMwC,EAAWxB,SAASC,cAAc,OACxCuB,EAAStB,UAAY,gBACrBnb,KAAKub,eAAekB,EAAUzc,KAAKwb,eAAe,yBAElDxb,KAAK2X,UAAU0D,YAAYoB,EAC7B,CAEOE,eAAAA,CAAgBzQ,GACrBlM,KAAK4c,gBAAgB1Q,EAAOlM,KAAKwb,eAAe,kBAEhDxb,KAAK6c,aAAa3Q,EACpB,CAEO4Q,QAAAA,CAAS5Q,GACdlM,KAAK4c,gBAAgB1Q,EAAOlM,KAAKwb,eAAe,kBAEhD,MAAMuB,EAAK/c,KAAKic,YAAY/P,GACxB6Q,GACFA,EAAG/E,UAAU/V,IAAI,mBAGnBjC,KAAKgd,eAAe9Q,GACpBlM,KAAKid,aAAa/Q,EACpB,CAEO+M,oBAAAA,CAAqBzB,GAC1B,MAAM0F,EAAiBjC,SAASC,cAAc,MAE9C,IAAK,MAAMtE,KAAQY,EAAO,CACxB,MAAM2F,EAAMlC,SAASC,cAAc,MAC7BkC,EAAyBpd,KAAKwb,eAAe,qBACnDxb,KAAKub,eAAe4B,EAAK,GAAGvG,EAAKoC,SAASoE,KAC1CD,EAAIhC,UAAY,YAChB+B,EAAe7B,YAAY8B,EAC7B,CAEAnd,KAAKwa,OAAO6C,gBAAgBH,GAC5Bld,KAAK+b,YACP,CAEOD,UAAAA,CAAW5P,EAAeoR,GAC/B,MAAMP,EAAK/c,KAAKic,YAAY/P,GAC5B,GAAI6Q,EAAI,CAGN,GAFAA,EAAG/E,UAAU/V,IAAI,sBAEL,MAARqb,EAAc,CAChB,MAAMC,EAAetC,SAASC,cAAc,QAC5Clb,KAAKub,eAAegC,ED9JDC,EAACC,EAAeC,KACzC,GAAc,IAAVD,EACF,MAAO,UAGT,MACME,EAAyBD,EAEzB7P,EAAIW,KAAKoP,MAAMpP,KAAKqP,IAAIJ,GAASjP,KAAKqP,IAHlC,OAIJjQ,EAAIkQ,YAAYL,EAJZ,MAIyB5P,GAAGkQ,QAAQJ,IACxCL,EAHQ,CAAC,QAAS,KAAM,KAAM,MAGjBzP,GAEnB,OAAY,MAARyP,EACK,GAEA,GAAG1P,EAAE8N,cAAc4B,KC+IYE,CAAYF,EAAM,IACpDC,EAAapC,UAAY,eAEzB4B,EAAG1B,YAAYkC,EACjB,CAEA,MAAMjB,EAAarB,SAASC,cAAc,KAC1Clb,KAAKub,eAAee,EAAYtc,KAAKwb,eAAe,WACpDc,EAAWnB,UAAY,aACvBmB,EAAWb,aAAa,aAAcvP,EAAMwP,YAC5CY,EAAWX,KAAO,IAElBoB,EAAG1B,YAAYiB,EACjB,CAEAtc,KAAKgd,eAAe9Q,GACpBlM,KAAKid,aAAa/Q,EACpB,CAEO8R,cAAAA,CAAe9R,EAAe+R,GACnC,MAAMlB,EAAK/c,KAAK2X,UAAUsC,cAAc,gBAAgB/N,EAAMwP,cAC9D,GAAIqB,EAAI,CACN,MAAMmB,EAAoBnB,EAAG9C,cAAc,uBAEvCiE,IACDA,EAAkCC,MAAMC,MAAQ,GAAGH,KAExD,CACF,CAEQlD,OAAAA,CAAQH,EAAkBC,GAChC,MAAMC,EAAMG,SAASC,cAAc,OACnCJ,EAAIK,UAAY,wBAAwBN,EAAYa,aAEpD,MAAM2C,EAAWpD,SAASC,cAAc,QASxC,OARAmD,EAASC,UAAY9E,EAAOoB,GAC5ByD,EAASlD,UAAY,eACrBkD,EAAS5C,aAAa,aAAcZ,EAAYa,YAEhDZ,EAAIO,YAAYgD,GAChBre,KAAK2X,UAAU0D,YAAYP,GAE3B9a,KAAKmK,MAAMuQ,UAAW,EACfI,CACT,CAEQL,qBAAwBnb,IAC9B,MAAMwb,EAAMG,SAASC,cAAc,OAGnC,OAFAJ,EAAIK,UAAY,oBAChB7b,EAAO+b,YAAYP,GACZA,GAGDP,qBAAwBjb,IAC9B,MAAMwb,EAAMG,SAASC,cAAc,OAInC,OAHAJ,EAAIK,UAAY,YAChB7b,EAAO+b,YAAYP,GAEZA,GAGD+B,YAAAA,CAAa3Q,GACnB,MAAMoQ,EAAatc,KAAKuc,eAAerQ,GAEnCoQ,GACFA,EAAWtE,UAAUC,OAAO,eAEhC,CAEQmE,cAAAA,CAAelQ,GACrB,MAAM6Q,EAAK/c,KAAKic,YAAY/P,GAE5B,OAAK6Q,EAIEA,EAAG9C,cAA2B,eAH5B,IAIX,CAEQsC,cAAAA,CAAerQ,GACrB,MAAM4O,EAAM9a,KAAKic,YAAY/P,GAC7B,OAAK4O,EAIEA,EAAIb,cAAc,eAHhBa,CAIX,CAEQU,cAAAA,CAAe+C,GACrB,OAAOve,KAAKsa,aAAaiE,IAAQA,CACnC,CAEQtB,YAAAA,CAAa/Q,GACnB,MAAMiQ,EAAanc,KAAKoc,eAAelQ,GAEnCiQ,GACFA,EAAWlE,QAEf,CAEQ+E,cAAAA,CAAe9Q,GACrB,MAAM6Q,EAAK/c,KAAKic,YAAY/P,GAE5B,GAAI6Q,EAAI,CACN,MAAM/B,EAAe+B,EAAG9C,cAAc,iBAElCe,GACFA,EAAa/C,QAEjB,CACF,CAEQ2E,eAAAA,CAAgB1Q,EAAesS,GACrC,MAAMzB,EAAK/c,KAAKic,YAAY/P,GAC5B,IAAK6Q,EACH,OAGF,MAAM0B,EAAsB1B,EAAG9C,cAAc,cACzCwE,GACFA,EAAoBxG,SAGtB,MAAMyG,EAAOzD,SAASC,cAAc,QACpCwD,EAAK1G,UAAU/V,IAAI,aACnBjC,KAAKub,eAAemD,EAAMF,GAE1BzB,EAAG1B,YAAYqD,EACjB,CAEQnD,cAAAA,CAAelc,EAAsBsf,GAC3Ctf,EAAQ6Q,OAAO+K,SAAS2D,eAAeD,GACzC,EC/OF,IAAAE,EAAA,MAMEje,WAAAA,EAAYoY,KAAEA,EAAI8F,OAAEA,EAAM1d,KAAEA,EAAIyZ,YAAEA,IAChC7a,KAAKgZ,KAAOA,EACZhZ,KAAK8e,OAASA,EACd9e,KAAKoB,KAAOA,EACZpB,KAAK6a,YAAcA,CACrB,CAEA,WAAakE,GACX,CAEF,YAAaC,GACX,GCTW,SAASC,IAStB,OApEF,SAAoBC,GAClB,IAAIC,EAAc,GAClB,GAAwB,IAApBD,EAASzc,OAAgB,MAAO,GAEpC,GAA2B,iBAAhByc,EAAS,GAClB,MAAM,IAAI7e,UAAU,kCAAoC6e,EAAS,IAInE,GAAIA,EAAS,GAAGjV,MAAM,iBAAmBiV,EAASzc,OAAS,EAAG,CAC5D,IAAIb,EAAQsd,EAASE,QACrBF,EAAS,GAAKtd,EAAQsd,EAAS,EACjC,CAGIA,EAAS,GAAGjV,MAAM,gBACpBiV,EAAS,GAAKA,EAAS,GAAG3c,QAAQ,gBAAiB,UAEnD2c,EAAS,GAAKA,EAAS,GAAG3c,QAAQ,gBAAiB,SAGrD,IAAK,IAAIsL,EAAI,EAAGA,EAAIqR,EAASzc,OAAQoL,IAAK,CACxC,IAAIwR,EAAYH,EAASrR,GAEzB,GAAyB,iBAAdwR,EACT,MAAM,IAAIhf,UAAU,kCAAoCgf,GAGxC,KAAdA,IAEAxR,EAAI,IAENwR,EAAYA,EAAU9c,QAAQ,SAAU,KAIxC8c,EAFExR,EAAIqR,EAASzc,OAAS,EAEZ4c,EAAU9c,QAAQ,SAAU,IAG5B8c,EAAU9c,QAAQ,SAAU,KAG1C4c,EAAY7R,KAAK+R,GAEnB,CAEA,IAAI9V,EAAM4V,EAAYnR,KAAK,KAOvBlC,GAHJvC,EAAMA,EAAIhH,QAAQ,kBAAmB,OAGrBI,MAAM,KAGtB,OAFMmJ,EAAMsT,SAAWtT,EAAMrJ,OAAS,EAAI,IAAK,IAAMqJ,EAAMkC,KAAK,IAGlE,CAWSsR,CANqB,iBAAjBC,UAAU,GACXA,UAAU,GAEV,GAAGvd,MAAMzB,KAAKgf,WAI1B,CChDO,MA0IMtH,EAASA,CAAC5F,EAAgB0K,KACrC,MAAMlP,EAAIwE,EAAIZ,QAAQsL,IACZ,IAANlP,GACFwE,EAAImN,OAAO3R,EAAG,IClIlB,MAAM4R,UAAiBC,EAiBrB9e,WAAAA,EAAY+e,UACVA,EAASC,SACTA,EAAQhJ,KACRA,EAAIiJ,YACJA,EAAWhF,YACXA,IAEAiF,MAAM,CAAE9G,KAAMpC,EAAKoC,KAAM8F,OAAQ,YAAa1d,KAAM,KAAMyZ,gBAE1D7a,KAAK2f,UAAYA,EACjB3f,KAAK4f,SAAWA,EAChB5f,KAAK4W,KAAOA,EACZ5W,KAAK6f,YAAcA,EAEnB7f,KAAKue,IAAM,KACXve,KAAK+f,SAAW,KAChB/f,KAAK8L,MAAQ,GASb9L,KAAKggB,eAAiBnJ,QAAQE,OAAO,IAAI5U,OACzCnC,KAAKigB,OAAS,GACdjgB,KAAKkgB,WAAa,GAClBlgB,KAAKmgB,UAAY,GACjBngB,KAAKogB,aAAUC,EACfrgB,KAAKsgB,gBAAaD,EAClBrgB,KAAKugB,eAAYF,EAEjBrgB,KAAKwgB,aAELxgB,KAAKggB,eAAeS,MAAM,KAAA,CAAS,GACrC,CAEA,WAAa1B,GACX/e,KAAKmgB,UAAUne,QAAQiU,QAAQyK,IAC7BA,EAAI3B,UAEN/e,KAAKmgB,UAAY,SAEXngB,KAAKggB,eAEPhgB,KAAKue,KAAOve,KAAK+f,eDjEWY,GAClChB,YACAC,WACArB,MACAwB,eAEA,MAAMnF,EAAWgG,mBAAmBrC,GAC9BsC,EAAcD,mBAAmBb,GACjCe,EAAU,IAAIC,QAAQ,CAC1B,cAAepB,IAEXqB,EAAMC,EAAQrB,EAAUiB,EAAa,QAAQjG,KACnD,OAAOsG,MAAMF,EAAK,CAChBF,QAASA,EACTK,OAAQ,WACPC,KAAKC,GACCA,EAASC,SCkDRX,CAAqB,CACzBhB,UAAW3f,KAAK2f,UAChBC,SAAU5f,KAAK4f,SACfrB,IAAKve,KAAKue,IACVwB,SAAU/f,KAAK+f,UAGrB,CAEA,YAAaf,GACX,OAAOnI,QAAQC,SACjB,CAEOyK,KAAAA,GACL,OAAOvhB,KAAK+f,eAAYM,CAC1B,CAEOmB,cAAAA,GACL,MAAO,CACLC,GAAIzhB,KAAK+f,UAAY,GACrB/G,KAAMhZ,KAAKue,KAAO,GAClBmD,cAAe1hB,KAAK4W,KAAKoC,KACzBsE,KAAMtd,KAAK4W,KAAK0G,KAChBlc,KAAM,KAEV,CAEOugB,OAAAA,GACL,OAAO3hB,KAAK4W,KAAK0G,IACnB,CAEOnR,KAAAA,GACAnM,KAAK4hB,cACZ,CAEQC,cAAAA,GAIN,OAFA7hB,KAAK8L,MAAMiC,KAAK,CAAC+T,EAAGC,IAAMD,EAAEE,WAAaD,EAAEC,YAEtChiB,KAAK+f,UAAa/f,KAAKue,ID7EO0D,GACrCtC,YACAC,WACArB,MACAzS,QACAiU,eAEA,MAAMnF,EAAWgG,mBAAmBrC,GAC9BsC,EAAcD,mBAAmBb,GACjCe,EAAU,IAAIC,QAAQ,CAC1B,cAAepB,IAEXqB,EAAMC,EAAQrB,EAAUiB,EAAa,WAAY,QAAQjG,KAC/D,OAAOsG,MAAMF,EAAK,CAChBkB,KAAMC,KAAKC,UAAU,CACnBtW,MAAOA,IAETgV,QAASA,EACTK,OAAQ,SAEPC,KAAKC,GACGA,EAASC,QAEjBF,KAAKiB,GACGA,ICyDFJ,CAAwB,CAC7BtC,UAAW3f,KAAK2f,UAChBC,SAAU5f,KAAK4f,SACfrB,IAAKve,KAAKue,IACVzS,MAAO9L,KAAK8L,MACZiU,SAAU/f,KAAK+f,WACdqB,KACD,KACMphB,KAAKugB,WACPvgB,KAAKugB,aAGR9K,IACCzV,KAAKsiB,YAAY7M,KAhBZoB,QAAQC,SAmBnB,CAEQ8K,YAAAA,GAON,OANA5hB,KAAKggB,eDjE4BuC,GACnC5C,YACAC,WACAhJ,OACAiJ,kBAEA,MAAMiB,EAAU,IAAIC,QAAQ,CAC1ByB,OAAQ,mBACR,eAAgB,mBAChB,cAAe7C,IAEjB,OAAOuB,MAAMtB,EAAU,CACrBsC,KAAMC,KAAKC,UAAU,CACnBK,YAAa7L,EAAKxV,KAClBwZ,SAAUhE,EAAKoC,KACf6G,YAAaA,IAEfiB,QAASA,EACTK,OAAQ,SAEPC,KAAKC,GACGA,EAASC,QAEjBF,KAAKiB,GACGA,ICyCaE,CAAsB,CAC1C5C,UAAW3f,KAAK2f,UAChBC,SAAU5f,KAAK4f,SACfhJ,KAAM5W,KAAK4W,KACXiJ,YAAa7f,KAAK6f,cAEb7f,KAAKggB,eACToB,KAAMxM,IAML,KAJoB,iBAAXA,GACPA,GAC2B,iBAApBA,EAAOmL,UACQ,iBAAfnL,EAAO2J,KAEd,MAAM,IAAIle,UACR,iHAIJL,KAAKue,IAAM3J,EAAO2J,IAClBve,KAAK+f,SAAWnL,EAAOmL,SAEvB/f,KAAK0iB,gBAENjC,MAAOhL,IACNzV,KAAKsiB,YAAY7M,IAEvB,CAEQ6M,WAAAA,CAAYpJ,GAClB,IAAIlZ,KAAKogB,QAGP,MAAMlH,EAFNlZ,KAAKogB,QAAQlH,EAIjB,CAEQsH,UAAAA,GACN,MAAMP,EAAiB,GACjB0C,GD5EmB/L,EC4Ea5W,KAAK4W,KD3E7CpI,KAAKoU,KAAKhM,EAAK0G,KAAO,MADK1G,MC8EzB,MAAMiM,EAAerU,KAAKF,IAAI,QAAQE,KAAKoU,KAAK5iB,KAAK4W,KAAK0G,KAAO,MAC3DwF,EAAYtU,KAAKF,IAAIqU,EAAkBE,GAE7C,IAAK,IAAIhV,EAAI,EAAGA,EAAI7N,KAAK4W,KAAK0G,KAAMzP,GAAKiV,EAAW,CAClD,MAAM1P,EAAM5E,KAAKC,IAAIzO,KAAK4W,KAAK0G,KAAMzP,EAAIiV,GACzC7C,EAAO3S,KAAKtN,KAAK4W,KAAK5U,MAAM6L,EAAGuF,GACjC,CAEApT,KAAKigB,OAASA,EACdjgB,KAAKkgB,WAAaD,EAAOze,IAAI,KAAA,CAC3BuhB,MAAM,EACNC,MAAM,EACNC,SAAU,IAEd,CAEQC,cAAAA,CAAehX,EAAeiX,GACpC,MAAMjjB,EAAQF,KAAKkgB,WAAWhU,GAE1BhM,IACFA,EAAMijB,KAAOA,EACbjjB,EAAM8iB,MAAO,GAGf,MAAMI,EAAO,CACXC,KAAMF,EACNnB,WAAY9V,EAAQ,GAEtBlM,KAAK8L,MAAMwB,KAAK8V,GAEhBpjB,KAAK0iB,aACP,CAEQY,cAAAA,CAAepX,EAAeqX,GACpC,MAAMrjB,EAAQF,KAAKkgB,WAAWhU,GAM9B,GAJIhM,IACFA,EAAM+iB,SAAWM,GAGfvjB,KAAKsgB,WAAY,CACnB,MAAMkD,EAAgBxjB,KAAKkgB,WAAWuD,OAAO,CAAC7V,EAAG8V,IAAM9V,EAAI8V,EAAET,SAAU,GACvEjjB,KAAKsgB,WAAWkD,EAAexjB,KAAK4W,KAAK0G,KAC3C,CACF,CAEQqG,UAAAA,CAAWzX,GACjB,MAAMhM,EAAQF,KAAKkgB,WAAWhU,GAM9B,OAJIhM,IACFA,EAAM6iB,MAAO,GAGV/iB,KAAKue,KAAQve,KAAK+f,SDxHM6D,GAC/BjE,YACAC,WACArB,MACAsF,SACA9D,eAEA,MAAMnF,EAAWgG,mBAAmBrC,GAC9BuC,EAAU,IAAIC,QAAQ,CAAE,cAAepB,IACvCqB,EAAMC,EACVrB,EACAG,EACA8D,EAAOnI,WACP,QAAQd,KAEV,OAAOsG,MAAMF,EAAK,CAChBF,QAASA,EACTK,OAAQ,QAEPC,KAAKC,GACGA,EAASC,QAEjBF,KAAKiB,GACGA,ICqGFuB,CAAkB,CACvBjE,UAAW3f,KAAK2f,UAChBC,SAAU5f,KAAK4f,SACfrB,IAAKve,KAAKue,IACVsF,OAAQ3X,EAAQ,EAChB6T,SAAU/f,KAAK+f,WAEdqB,KAAKxM,IAGJ,KADoB,iBAAXA,GAA6C,iBAAfA,EAAOoM,KAE5C,MAAM,IAAI3gB,UACR,mGAGJ,OAAOuU,IAERwM,KACC,EAAGJ,UACDhhB,KAAK8jB,gBAAgB5X,EAAO8U,IAE7BvL,IACCzV,KAAKsiB,YAAY7M,KAzBdoB,QAAQC,SA4BnB,CAEQgN,eAAAA,CAAgB5X,EAAe8U,GACrC,MAAMkB,EAAOliB,KAAKigB,OAAO/T,GACnBwU,EAAM,IAAIqD,eAChBrD,EAAI9X,KAAK,MAAOoY,GAAK,GACrBN,EAAIsD,aAAe,OAEnBhkB,KAAKmgB,UAAU7S,KAAKoT,GAEpBA,EAAIuD,OAAOlM,iBAAiB,WAAYmM,IACjCA,EAAGC,kBAIRnkB,KAAKsjB,eAAepX,EAAOgY,EAAGE,UAGhC1D,EAAI3I,iBAAiB,QAAS,KAC5BE,EAAOjY,KAAKmgB,UAAWO,GAEvB,MAAMxgB,EAAQF,KAAKkgB,WAAWhU,GAE1BhM,IACFA,EAAM6iB,MAAO,KAIjBrC,EAAI3I,iBAAiB,OAAQ,KAC3BE,EAAOjY,KAAKmgB,UAAWO,GAEvB,MAAMxgB,EAAQF,KAAKkgB,WAAWhU,GAM9B,GAJIhM,IACFA,EAAM6iB,MAAO,GAGXrC,EAAI5B,OAAS,KAAO4B,EAAI5B,QAAU,IAEpC,YADA9e,KAAKsiB,YAAY,IAAIngB,MAAM,YAI7BnC,KAAKsjB,eAAepX,EAAOgW,GAAM5E,MAAQ,GAGzC,MAAM6F,EAAOzC,EAAI2D,kBAAkB,QACtB,OAATlB,EASJnjB,KAAKkjB,eAAehX,EAAOiX,GARzBnjB,KAAKsiB,YACH,IAAIngB,MACF,gNASRue,EAAI3I,iBAAiB,QAAS,KAC5BE,EAAOjY,KAAKmgB,UAAWO,GAEvB,MAAMxgB,EAAQF,KAAKkgB,WAAWhU,GAE1BhM,IACFA,EAAM6iB,MAAO,GAGf,MAAM7J,EAAQ,IAAI/W,MAAM,iBACxBnC,KAAKsiB,YAAYpJ,KAEnBwH,EAAI4D,KAAKpC,EACX,CAEQQ,WAAAA,GACN,MAAM6B,EAAO,EAAIvkB,KAAKmgB,UAAU1d,OAChC,GAAa,IAAT8hB,EACF,OAIF,GAAIvkB,KAAKkgB,WAAWsE,MAAMtkB,GAASA,EAAM8iB,MAEvC,YADKhjB,KAAK6hB,iBAIZ,MAAM4C,EAAa,GACnB,IAAK,IAAI5W,EAAI,EAAGA,EAAI7N,KAAKkgB,WAAWzd,OAAQoL,IAAK,CAC/C,MAAM3N,EAAQF,KAAKkgB,WAAWrS,GAE9B,GAAK3N,IAASA,EAAM8iB,OAAQ9iB,EAAM6iB,OAIlC0B,EAAWnX,KAAKO,GACZ4W,EAAWhiB,QAAU8hB,GACvB,KAEJ,CAEAE,EAAWxO,QAAQ/J,IACZlM,KAAK2jB,WAAWzX,IAEzB,EC/XF,MAAMwY,UAAsBviB,MAC1BvB,WAAAA,CAAY4d,EAASmG,EAAa,KAAMC,EAAM,KAAMC,EAAM,MAWxD,GAVA/E,MAAMtB,GAENxe,KAAK8kB,gBAAkBF,EACvB5kB,KAAK+kB,iBAAmBF,EACxB7kB,KAAKglB,aAAeL,EAEF,MAAdA,IACFnG,GAAW,eAAemG,EAAWjJ,cAG5B,MAAPkJ,EAAa,CACf,MAAMK,EAAYL,EAAIM,UAAU,iBAAmB,MAKnD1G,GAAW,sCAJIoG,EAAIO,qBACPP,EAAIQ,4BACDP,EAAMA,EAAIQ,YAAc,yBAC1BR,EAAMA,EAAIS,WAAa,GAAK,sBAC8FL,IACzI,CACAjlB,KAAKwe,QAAUA,CACjB,ECVF,MAKM+G,EAA+B,mBAAXC,OAEpBC,GAD6B,mBAAhBC,aAA6B,IAAIA,YACjB,mBAAhBC,YAA6B,IAAIA,iBAAgBtF,GAE9DuF,EAASxc,MAAMyc,UAAU7jB,MAAMzB,KADvB,qEAERulB,EAAS,CAAEhE,IACb,IAAIiE,EAAM,CAAA,EAEV,OADAjE,EAAE7L,QAAQ,CAACyN,EAAG7V,IAAMkY,EAAIrC,GAAK7V,GACtBkY,CACV,EAJc,CAIZH,GACGI,EAAQ,0EACRC,EAAUC,OAAOC,aAAaC,KAAKF,QAInCG,GAHsC,mBAApBC,WAAWC,MAC7BD,WAAWC,KAAKH,KAAKE,YAEPE,GAAQA,EACvBjkB,QAAQ,KAAM,IAAIA,QAAQ,SAAWkkB,GAAa,KAANA,EAAY,IAAM,MAC7DC,EAAYC,GAAMA,EAAEpkB,QAAQ,oBAAqB,IAIjDqkB,GAAgBC,IAElB,IAAIC,EAAKC,EAAIC,EAAIC,EAAIC,EAAM,GAC3B,MAAMC,EAAMN,EAAIpkB,OAAS,EACzB,IAAK,IAAIoL,EAAI,EAAGA,EAAIgZ,EAAIpkB,QAAS,CAC7B,IAAKskB,EAAKF,EAAI7Z,WAAWa,MAAQ,MAC5BmZ,EAAKH,EAAI7Z,WAAWa,MAAQ,MAC5BoZ,EAAKJ,EAAI7Z,WAAWa,MAAQ,IAC7B,MAAM,IAAIxN,UAAU,2BACxBymB,EAAOC,GAAM,GAAOC,GAAM,EAAKC,EAC/BC,GAAOtB,EAAOkB,GAAO,GAAK,IACpBlB,EAAOkB,GAAO,GAAK,IACnBlB,EAAOkB,GAAO,EAAI,IAClBlB,EAAa,GAANkB,EACjB,CACA,OAAOK,EAAMD,EAAIllB,MAAM,EAAGmlB,EAAM,GAAK,MAAMzN,UAAUyN,GAAOD,GAO1DE,GAAwB,mBAATC,KAAuBR,GAAQQ,KAAKR,GACnDtB,EAAcsB,GAAQrB,OAAOe,KAAKM,EAAK,UAAUnL,SAAS,UACtDkL,GACJU,GAAkB/B,EACjBgC,GAAQ/B,OAAOe,KAAKgB,GAAK7L,SAAS,UAClC6L,IAGC,IAAIC,EAAO,GACX,IAAK,IAAI3Z,EAAI,EAAG4Z,EAAIF,EAAI9kB,OAAQoL,EAAI4Z,EAAG5Z,GAFvB,KAGZ2Z,EAAKla,KAAK2Y,EAAQyB,MAAM,KAAMH,EAAII,SAAS9Z,EAAGA,EAHlC,QAKhB,OAAOuZ,GAAMI,EAAKxZ,KAAK,MAWzB4Z,GAAWlE,IACb,GAAIA,EAAEjhB,OAAS,EAEX,OADIolB,EAAKnE,EAAE1W,WAAW,IACV,IAAO0W,EACbmE,EAAK,KAAS5B,EAAQ,IAAQ4B,IAAO,GACjC5B,EAAQ,IAAa,GAAL4B,GACf5B,EAAQ,IAAS4B,IAAO,GAAM,IAC3B5B,EAAQ,IAAS4B,IAAO,EAAK,IAC7B5B,EAAQ,IAAa,GAAL4B,GAG9B,IAAIA,EAAK,MAC0B,MAA5BnE,EAAE1W,WAAW,GAAK,QAClB0W,EAAE1W,WAAW,GAAK,OACzB,OAAQiZ,EAAQ,IAAS4B,IAAO,GAAM,GAChC5B,EAAQ,IAAS4B,IAAO,GAAM,IAC9B5B,EAAQ,IAAS4B,IAAO,EAAK,IAC7B5B,EAAQ,IAAa,GAAL4B,IAGxBC,GAAU,gDAMVC,GAAQC,GAAMA,EAAEzlB,QAAQulB,GAASF,IAEjCK,GAAU1C,EACToB,GAAMnB,OAAOe,KAAKI,EAAG,QAAQjL,SAAS,UACvC+J,EACKkB,GAAMW,GAAgB7B,EAAIyC,OAAOvB,IACjCA,GAAMS,GAAMW,GAAKpB,IAMtBuB,GAAS,CAAC1B,EAAK2B,GAAU,IAAUA,EACnC9B,EAAW4B,GAAQzB,IACnByB,GAAQzB,GAqCR4B,GAAgBlB,IAGlB,GADAA,EAAMA,EAAI3kB,QAAQ,OAAQ,KACrByjB,EAAMxc,KAAK0d,GACZ,MAAM,IAAI7mB,UAAU,qBAExB,IAAIgoB,EAAKC,EAAIC,EADbrB,GAAO,KAAKllB,MAAM,GAAkB,EAAbklB,EAAIzkB,SAE3B,IAAI+lB,EAAW,GACf,IAAK,IAAI3a,EAAI,EAAGA,EAAIqZ,EAAIzkB,QACpB4lB,EAAMvC,EAAOoB,EAAIuB,OAAO5a,OAAS,GAC3BiY,EAAOoB,EAAIuB,OAAO5a,OAAS,IAC1Bya,EAAKxC,EAAOoB,EAAIuB,OAAO5a,QAAU,GACjC0a,EAAKzC,EAAOoB,EAAIuB,OAAO5a,OACnB,KAAPya,EACAE,EAASlb,KAAK2Y,EAAQoC,GAAO,GAAK,MAEtB,KAAPE,EACLC,EAASlb,KAAK2Y,EAAQoC,GAAO,GAAK,IAAKA,GAAO,EAAI,MAGlDG,EAASlb,KAAK2Y,EAAQoC,GAAO,GAAK,IAAKA,GAAO,EAAI,IAAW,IAANA,IAG/D,OAAOG,EAASxa,KAAK,KA0EnB0a,GASMR,uECvQZ,IAAIxN,cCSJiO,GAAiB,SAAkBC,EAAMC,GAIvC,GAHAA,EAAWA,EAASlmB,MAAM,KAAK,KAC/BimB,GAAQA,GAEG,OAAO,EAElB,OAAQC,GACN,IAAK,OACL,IAAK,KACL,OAAgB,KAATD,EAEP,IAAK,QACL,IAAK,MACL,OAAgB,MAATA,EAEP,IAAK,MACL,OAAgB,KAATA,EAEP,IAAK,SACL,OAAgB,KAATA,EAEP,IAAK,OACL,OAAO,EAGT,OAAgB,IAATA,CACT,GDlCIE,kCEDJ,IAAIxoB,EAAMZ,OAAOmmB,UAAUkD,eAU3B,SAASC,EAAO7e,GACd,IACE,OAAO8e,mBAAmB9e,EAAM5H,QAAQ,MAAO,KACnD,CAAI,MAAO2V,GACP,OAAO,IACX,CACA,CASA,SAASgQ,EAAO/d,GACd,IACE,OAAOyW,mBAAmBzW,EAC9B,CAAI,MAAO+N,GACP,OAAO,IACX,CACA,QAmFAgR,GAAA9G,UA1CA,SAAwB+G,EAAKze,GAC3BA,EAASA,GAAU,GAEnB,IACIlK,EACA+d,EAFA6K,EAAQ,GASZ,IAAK7K,IAFD,iBAAoB7T,IAAQA,EAAS,KAE7Bye,EACV,GAAI7oB,EAAIC,KAAK4oB,EAAK5K,GAAM,CAkBtB,IAjBA/d,EAAQ2oB,EAAI5K,KAMG/d,UAAqC6oB,MAAM7oB,KACxDA,EAAQ,IAGV+d,EAAM2J,EAAO3J,GACb/d,EAAQ0nB,EAAO1nB,GAMH,OAAR+d,GAA0B,OAAV/d,EAAgB,SACpC4oB,EAAM9b,KAAKiR,EAAK,IAAK/d,EAC3B,CAGE,OAAO4oB,EAAM3mB,OAASiI,EAAS0e,EAAMpb,KAAK,KAAO,EACnD,EAMAkb,GAAA7a,MA3EA,SAAqBib,GAKnB,IAJA,IAEIlG,EAFAmG,EAAS,uBACT3U,EAAS,CAAA,EAGNwO,EAAOmG,EAAOjY,KAAKgY,IAAQ,CAChC,IAAI/K,EAAMyK,EAAO5F,EAAK,IAClB5iB,EAAQwoB,EAAO5F,EAAK,IAUZ,OAAR7E,GAA0B,OAAV/d,GAAkB+d,KAAO3J,IAC7CA,EAAO2J,GAAO/d,EAClB,CAEE,OAAOoU,CACT,KF7DSzJ,GACLqe,EAAsB,6EACtBC,EAAS,YACT1d,EAAU,gCACV6c,EAAO,QACPc,EAAa,mDACbC,EAAqB,aAUzB,SAASC,EAASrgB,GAChB,OAAQA,GAAY,IAAImS,WAAWnZ,QAAQinB,EAAqB,GAClE,CAcA,IAAIK,EAAQ,CACV,CAAC,IAAK,QACN,CAAC,IAAK,SACN,SAAkBC,EAAS9I,GACzB,OAAO+I,EAAU/I,EAAI6H,UAAYiB,EAAQvnB,QAAQ,MAAO,KAAOunB,CACnE,EACE,CAAC,IAAK,YACN,CAAC,IAAK,OAAQ,GACd,CAACE,IAAK,YAAQ3J,EAAW,EAAG,GAC5B,CAAC,UAAW,YAAQA,EAAW,GAC/B,CAAC2J,IAAK,gBAAY3J,EAAW,EAAG,IAW9B/L,EAAS,CAAE2V,KAAM,EAAGX,MAAO,GAc/B,SAASY,EAAUC,GACjB,IAYI5L,EALA6L,GALkB,oBAAXC,OAAoCA,YACpB,IAAXC,EAAoCA,EAC3B,oBAATC,KAAkCA,KACjC,CAAA,GAEQH,UAAY,CAAA,EAGjCI,EAAmB,CAAA,EACnBppB,SAHJ+oB,EAAMA,GAAOC,GAMb,GAAI,UAAYD,EAAItB,SAClB2B,EAAmB,IAAIC,EAAIhd,SAAS0c,EAAIO,UAAW,SAC9C,GAAI,WAAatpB,EAEtB,IAAKmd,KADLiM,EAAmB,IAAIC,EAAIN,EAAK,IACpB7V,SAAekW,EAAiBjM,QACvC,GAAI,WAAand,EAAM,CAC5B,IAAKmd,KAAO4L,EACN5L,KAAOjK,IACXkW,EAAiBjM,GAAO4L,EAAI5L,SAGG8B,IAA7BmK,EAAiBze,UACnBye,EAAiBze,QAAUA,EAAQvC,KAAK2gB,EAAIxO,MAElD,CAEE,OAAO6O,CACT,CASA,SAAST,EAAUY,GACjB,MACa,UAAXA,GACW,SAAXA,GACW,UAAXA,GACW,WAAXA,GACW,QAAXA,GACW,SAAXA,CAEJ,CAkBA,SAASC,EAAgBd,EAASM,GAEhCN,GADAA,EAAUF,EAASE,IACDvnB,QAAQknB,EAAQ,IAClCW,EAAWA,GAAY,CAAA,EAEvB,IAKItZ,EALA7G,EAAQyf,EAAWpY,KAAKwY,GACxBjB,EAAW5e,EAAM,GAAKA,EAAM,GAAG1I,cAAgB,GAC/CspB,IAAmB5gB,EAAM,GACzB6gB,IAAiB7gB,EAAM,GACvB8gB,EAAe,EAkCnB,OA/BIF,EACEC,GACFha,EAAO7G,EAAM,GAAKA,EAAM,GAAKA,EAAM,GACnC8gB,EAAe9gB,EAAM,GAAGxH,OAASwH,EAAM,GAAGxH,SAE1CqO,EAAO7G,EAAM,GAAKA,EAAM,GACxB8gB,EAAe9gB,EAAM,GAAGxH,QAGtBqoB,GACFha,EAAO7G,EAAM,GAAKA,EAAM,GACxB8gB,EAAe9gB,EAAM,GAAGxH,QAExBqO,EAAO7G,EAAM,GAIA,UAAb4e,EACEkC,GAAgB,IAClBja,EAAOA,EAAK9O,MAAM,IAEX+nB,EAAUlB,GACnB/X,EAAO7G,EAAM,GACJ4e,EACLgC,IACF/Z,EAAOA,EAAK9O,MAAM,IAEX+oB,GAAgB,GAAKhB,EAAUK,EAASvB,YACjD/X,EAAO7G,EAAM,IAGR,CACL4e,SAAUA,EACV9c,QAAS8e,GAAkBd,EAAUlB,GACrCkC,aAAcA,EACdja,KAAMA,EAEV,CAoDA,SAAS2Z,EAAIX,EAASM,EAAUb,GAI9B,GAFAO,GADAA,EAAUF,EAASE,IACDvnB,QAAQknB,EAAQ,MAE5BzpB,gBAAgByqB,GACpB,OAAO,IAAIA,EAAIX,EAASM,EAAUb,GAGpC,IAAIyB,EAAUC,EAAW5c,EAAO6c,EAAahf,EAAOqS,EAChD4M,EAAetB,EAAM7nB,QACrBZ,SAAcgpB,EACdpJ,EAAMhhB,KACN6N,EAAI,EA8CR,IAjCI,WAAazM,GAAQ,WAAaA,IACpCmoB,EAASa,EACTA,EAAW,MAGTb,GAAU,mBAAsBA,IAAQA,EAAST,EAAGza,OAQxD2c,IADAC,EAAYL,EAAgBd,GAAW,GALvCM,EAAWF,EAAUE,KAMCvB,WAAaoC,EAAUlf,QAC7CiV,EAAIjV,QAAUkf,EAAUlf,SAAWif,GAAYZ,EAASre,QACxDiV,EAAI6H,SAAWoC,EAAUpC,UAAYuB,EAASvB,UAAY,GAC1DiB,EAAUmB,EAAUna,MAOK,UAAvBma,EAAUpC,WACmB,IAA3BoC,EAAUF,cAAsBpB,EAAmBngB,KAAKsgB,MACxDmB,EAAUlf,UACTkf,EAAUpC,UACToC,EAAUF,aAAe,IACxBhB,EAAU/I,EAAI6H,cAEnBsC,EAAa,GAAK,CAAC,OAAQ,aAGtBtd,EAAIsd,EAAa1oB,OAAQoL,IAGH,mBAF3Bqd,EAAcC,EAAatd,KAO3BQ,EAAQ6c,EAAY,GACpB3M,EAAM2M,EAAY,GAEd7c,GAAUA,EACZ2S,EAAIzC,GAAOuL,EACF,iBAAoBzb,IAC7BnC,EAAkB,MAAVmC,EACJyb,EAAQvf,YAAY8D,GACpByb,EAAQrY,QAAQpD,MAGd,iBAAoB6c,EAAY,IAClClK,EAAIzC,GAAOuL,EAAQ9nB,MAAM,EAAGkK,GAC5B4d,EAAUA,EAAQ9nB,MAAMkK,EAAQgf,EAAY,MAE5ClK,EAAIzC,GAAOuL,EAAQ9nB,MAAMkK,GACzB4d,EAAUA,EAAQ9nB,MAAM,EAAGkK,MAGrBA,EAAQmC,EAAMiD,KAAKwY,MAC7B9I,EAAIzC,GAAOrS,EAAM,GACjB4d,EAAUA,EAAQ9nB,MAAM,EAAGkK,EAAMA,QAGnC8U,EAAIzC,GAAOyC,EAAIzC,IACbyM,GAAYE,EAAY,IAAKd,EAAS7L,IAAa,GAOjD2M,EAAY,KAAIlK,EAAIzC,GAAOyC,EAAIzC,GAAKhd,gBApCtCuoB,EAAUoB,EAAYpB,EAAS9I,GA4C/BuI,IAAQvI,EAAIsI,MAAQC,EAAOvI,EAAIsI,QAM/B0B,GACCZ,EAASre,SACkB,MAA3BiV,EAAI0J,SAASjC,OAAO,KACF,KAAjBzH,EAAI0J,UAAyC,KAAtBN,EAASM,YAEpC1J,EAAI0J,SA/JR,SAAiBM,EAAUzd,GACzB,GAAiB,KAAbyd,EAAiB,OAAOzd,EAQ5B,IANA,IAAIlL,GAAQkL,GAAQ,KAAK5K,MAAM,KAAKX,MAAM,GAAG,GAAIopB,OAAOJ,EAASroB,MAAM,MACnEkL,EAAIxL,EAAKI,OACTH,EAAOD,EAAKwL,EAAI,GAChB0E,GAAU,EACV8Y,EAAK,EAEFxd,KACW,MAAZxL,EAAKwL,GACPxL,EAAKmd,OAAO3R,EAAG,GACM,OAAZxL,EAAKwL,IACdxL,EAAKmd,OAAO3R,EAAG,GACfwd,KACSA,IACC,IAANxd,IAAS0E,GAAU,GACvBlQ,EAAKmd,OAAO3R,EAAG,GACfwd,KAOJ,OAHI9Y,GAASlQ,EAAKkQ,QAAQ,IACb,MAATjQ,GAAyB,OAATA,GAAeD,EAAKiL,KAAK,IAEtCjL,EAAK2L,KAAK,IACnB,CAqImB8I,CAAQkK,EAAI0J,SAAUN,EAASM,WAOjB,MAA3B1J,EAAI0J,SAASjC,OAAO,IAAcsB,EAAU/I,EAAI6H,YAClD7H,EAAI0J,SAAW,IAAM1J,EAAI0J,UAQtBhQ,EAASsG,EAAI4H,KAAM5H,EAAI6H,YAC1B7H,EAAIsK,KAAOtK,EAAIuK,SACfvK,EAAI4H,KAAO,IAMb5H,EAAIwK,SAAWxK,EAAIyK,SAAW,GAE1BzK,EAAI0K,SACNxf,EAAQ8U,EAAI0K,KAAKja,QAAQ,OAGvBuP,EAAIwK,SAAWxK,EAAI0K,KAAK1pB,MAAM,EAAGkK,GACjC8U,EAAIwK,SAAW5K,mBAAmBqI,mBAAmBjI,EAAIwK,WAEzDxK,EAAIyK,SAAWzK,EAAI0K,KAAK1pB,MAAMkK,EAAQ,GACtC8U,EAAIyK,SAAW7K,mBAAmBqI,mBAAmBjI,EAAIyK,YAEzDzK,EAAIwK,SAAW5K,mBAAmBqI,mBAAmBjI,EAAI0K,OAG3D1K,EAAI0K,KAAO1K,EAAIyK,SAAWzK,EAAIwK,SAAU,IAAKxK,EAAIyK,SAAWzK,EAAIwK,UAGlExK,EAAI2K,OAA0B,UAAjB3K,EAAI6H,UAAwBkB,EAAU/I,EAAI6H,WAAa7H,EAAIsK,KACpEtK,EAAI6H,SAAU,KAAM7H,EAAIsK,KACxB,OAKJtK,EAAIrF,KAAOqF,EAAItF,UACjB,QA2KA+O,EAAI5E,UAAY,CAAE/kB,IA5JlB,SAAasiB,EAAM5iB,EAAOorB,GACxB,IAAI5K,EAAMhhB,KAEV,OAAQojB,GACN,IAAK,QACC,iBAAoB5iB,GAASA,EAAMiC,SACrCjC,GAASorB,GAAM9C,EAAGza,OAAO7N,IAG3BwgB,EAAIoC,GAAQ5iB,EACZ,MAEF,IAAK,OACHwgB,EAAIoC,GAAQ5iB,EAEPka,EAASla,EAAOwgB,EAAI6H,UAGdroB,IACTwgB,EAAIsK,KAAOtK,EAAIuK,SAAU,IAAK/qB,IAH9BwgB,EAAIsK,KAAOtK,EAAIuK,SACfvK,EAAIoC,GAAQ,IAKd,MAEF,IAAK,WACHpC,EAAIoC,GAAQ5iB,EAERwgB,EAAI4H,OAAMpoB,GAAS,IAAKwgB,EAAI4H,MAChC5H,EAAIsK,KAAO9qB,EACX,MAEF,IAAK,OACHwgB,EAAIoC,GAAQ5iB,EAERooB,EAAKpf,KAAKhJ,IACZA,EAAQA,EAAMmC,MAAM,KACpBqe,EAAI4H,KAAOpoB,EAAM+P,MACjByQ,EAAIuK,SAAW/qB,EAAMwN,KAAK,OAE1BgT,EAAIuK,SAAW/qB,EACfwgB,EAAI4H,KAAO,IAGb,MAEF,IAAK,WACH5H,EAAI6H,SAAWroB,EAAMe,cACrByf,EAAIjV,SAAW6f,EACf,MAEF,IAAK,WACL,IAAK,OACH,GAAIprB,EAAO,CACT,IAAI4J,EAAgB,aAATgZ,EAAsB,IAAM,IACvCpC,EAAIoC,GAAQ5iB,EAAMioB,OAAO,KAAOre,EAAOA,EAAO5J,EAAQA,CAC9D,MACQwgB,EAAIoC,GAAQ5iB,EAEd,MAEF,IAAK,WACL,IAAK,WACHwgB,EAAIoC,GAAQxC,mBAAmBpgB,GAC/B,MAEF,IAAK,OACH,IAAI0L,EAAQ1L,EAAMiR,QAAQ,MAErBvF,GACH8U,EAAIwK,SAAWhrB,EAAMwB,MAAM,EAAGkK,GAC9B8U,EAAIwK,SAAW5K,mBAAmBqI,mBAAmBjI,EAAIwK,WAEzDxK,EAAIyK,SAAWjrB,EAAMwB,MAAMkK,EAAQ,GACnC8U,EAAIyK,SAAW7K,mBAAmBqI,mBAAmBjI,EAAIyK,YAEzDzK,EAAIwK,SAAW5K,mBAAmBqI,mBAAmBzoB,IAI3D,IAAK,IAAIqN,EAAI,EAAGA,EAAIgc,EAAMpnB,OAAQoL,IAAK,CACrC,IAAIge,EAAMhC,EAAMhc,GAEZge,EAAI,KAAI7K,EAAI6K,EAAI,IAAM7K,EAAI6K,EAAI,IAAItqB,cAC1C,CAUE,OARAyf,EAAI0K,KAAO1K,EAAIyK,SAAWzK,EAAIwK,SAAU,IAAKxK,EAAIyK,SAAWzK,EAAIwK,SAEhExK,EAAI2K,OAA0B,UAAjB3K,EAAI6H,UAAwBkB,EAAU/I,EAAI6H,WAAa7H,EAAIsK,KACpEtK,EAAI6H,SAAU,KAAM7H,EAAIsK,KACxB,OAEJtK,EAAIrF,KAAOqF,EAAItF,WAERsF,CACT,EA8D4BtF,SArD5B,SAAkB0G,GACXA,GAAa,mBAAsBA,IAAWA,EAAY0G,EAAG1G,WAElE,IAAIkH,EACAtI,EAAMhhB,KACNsrB,EAAOtK,EAAIsK,KACXzC,EAAW7H,EAAI6H,SAEfA,GAAqD,MAAzCA,EAASJ,OAAOI,EAASpmB,OAAS,KAAYomB,GAAY,KAE1E,IAAIjU,EACFiU,GACE7H,EAAI6H,UAAY7H,EAAIjV,SAAYge,EAAU/I,EAAI6H,UAAY,KAAO,IAsCrE,OApCI7H,EAAIwK,UACN5W,GAAUoM,EAAIwK,SACVxK,EAAIyK,WAAU7W,GAAU,IAAKoM,EAAIyK,UACrC7W,GAAU,KACDoM,EAAIyK,UACb7W,GAAU,IAAKoM,EAAIyK,SACnB7W,GAAU,KAEO,UAAjBoM,EAAI6H,UACJkB,EAAU/I,EAAI6H,YACbyC,GACgB,MAAjBtK,EAAI0J,WAMJ9V,GAAU,MAQkB,MAA1B0W,EAAKA,EAAK7oB,OAAS,IAAemmB,EAAKpf,KAAKwX,EAAIuK,YAAcvK,EAAI4H,QACpE0C,GAAQ,KAGV1W,GAAU0W,EAAOtK,EAAI0J,UAErBpB,EAAQ,iBAAoBtI,EAAIsI,MAAQlH,EAAUpB,EAAIsI,OAAStI,EAAIsI,SACxD1U,GAAU,MAAQ0U,EAAMb,OAAO,GAAK,IAAKa,EAAQA,GAExDtI,EAAIiJ,OAAMrV,GAAUoM,EAAIiJ,MAErBrV,CACT,GAQA6V,EAAIG,gBAAkBA,EACtBH,EAAIL,SAAWF,EACfO,EAAIb,SAAWA,EACfa,EAAI3B,GAAKA,EAETgD,GAAiBrB,cGtkBjB,MAAMsB,GAAkB,SAClBC,GAAyB,gBACzBC,GAAyB,gBAEzBC,GAAiB,CACrBtM,SAAU,KAEVuM,UAAW,KACXC,SAAU,CAAA,EACVC,0BAA2B,CAAA,EAC3BC,YAAa,KACbC,WAAY,KAEZjM,WAAY,KACZkM,gBAAiB,KACjBjM,UAAW,KACXH,QAAS,KACTqM,qBAAsB,KAEtBC,qBAAqB,EACrB5L,QAAS,CAAA,EACT6L,cAAc,EACdC,gBAAiB,KACjBC,gBAAiB,KACjBC,cAAeC,GAEfjK,UAAWkK,OAAOC,kBAClBC,YAAa,CAAC,EAAG,IAAM,IAAM,KAC7BC,gBAAiB,EACjBC,yBAA0B,KAC1BC,6BAA6B,EAC7BC,4BAA4B,EAC5BC,sBAAsB,EACtBC,0BAA0B,EAE1BC,WAAY,KACZC,WAAY,KACZC,UAAW,KAEX9E,SAAUkD,IAGZ,MAAMrM,GACJ9e,WAAAA,CAAYgW,EAAMhM,GAEZ,WAAYA,GACduO,QAAQ0E,IACN,0GAKJ7d,KAAK4K,QAAUA,EAGf5K,KAAK4K,QAAQkY,UAAYkK,OAAOhtB,KAAK4K,QAAQkY,WAG7C9iB,KAAK4tB,YAAc5tB,KAAK4K,QAAQ6iB,WAGhCztB,KAAK4W,KAAOA,EAGZ5W,KAAKghB,IAAM,KAGXhhB,KAAK6tB,KAAO,KAGZ7tB,KAAK8tB,aAAe,KAGpB9tB,KAAK+tB,eAAiB,KAGtB/tB,KAAKguB,QAAU,KAGfhuB,KAAKiuB,UAAW,EAGhBjuB,KAAKkuB,MAAQ,KAKbluB,KAAKmuB,QAAU,KAGfnuB,KAAKouB,cAAgB,EAGrBpuB,KAAKquB,cAAgB,KAGrBruB,KAAKsuB,mBAAqB,EAI1BtuB,KAAKuuB,iBAAmB,KAIxBvuB,KAAKwuB,oBAAsB,IAC7B,CAYA,gBAAOC,CAAUzN,EAAKpW,EAAU,IAC9B,MAAMga,EAAM8J,GAAY,SAAU1N,EAAKpW,GAEvC,OAAO+jB,GAAY/J,EAAK,KAAMha,GAC3BwW,KAAMyD,IAEL,GAAwB,MAApBA,EAAIQ,YAIR,MAAM,IAAIX,EAAc,oDAAqD,KAAME,EAAKC,KAEzFpE,MAAOhL,IAKN,GAJMA,aAAeiP,IACnBjP,EAAM,IAAIiP,EAAc,kCAAmCjP,EAAKmP,EAAK,QAGlEgK,GAAYnZ,EAAK,EAAG7K,GACvB,MAAM6K,EAMR,MAAMoZ,EAAQjkB,EAAQsiB,YAAY,GAC5B4B,EAAkBlkB,EAAQsiB,YAAYlrB,MAAM,GAC5C+sB,EAAa,IACdnkB,EACHsiB,YAAa4B,GAEf,OAAO,IAAIjY,QAASC,GAAYkY,WAAWlY,EAAS+X,IAAQzN,KAAK,IAC/D1B,GAAW+O,UAAUzN,EAAK+N,KAGlC,CAEAE,mBAAAA,GACE,OAAOjvB,KAAK4K,QACT0hB,YAAYtsB,KAAK4W,KAAM5W,KAAK4K,SAC5BwW,KAAMkL,GAAgBtsB,KAAK4tB,YAAYsB,yBAAyB5C,GACrE,CAEA6C,wBAAAA,CAAyBC,GACvBpvB,KAAKghB,IAAMoO,EAAejD,WAAa,KACvCnsB,KAAKwuB,oBAAsBY,EAAeC,oBAAsB,KAChErvB,KAAK+tB,eAAiBqB,EAAeE,aACvC,CAEAnjB,KAAAA,GACE,MAAMyK,KAAEA,GAAS5W,KAEjB,IAAK4W,EAEH,YADA5W,KAAKuvB,WAAW,IAAIptB,MAAM,8CAI5B,IACG,CAAC4pB,GAAiBC,GAAwBC,IAAwBjb,SACjEhR,KAAK4K,QAAQie,UAIf,YADA7oB,KAAKuvB,WAAW,IAAIptB,MAAM,6BAA6BnC,KAAK4K,QAAQie,aAItE,IAAK7oB,KAAK4K,QAAQgV,WAAa5f,KAAK4K,QAAQuhB,YAAcnsB,KAAKghB,IAE7D,YADAhhB,KAAKuvB,WAAW,IAAIptB,MAAM,0DAI5B,MAAM+qB,YAAEA,GAAgBltB,KAAK4K,QAC7B,GAAmB,MAAfsiB,GAAuE,mBAAhDxtB,OAAOmmB,UAAUnK,SAASnb,KAAK2sB,GAA1D,CAKA,GAAIltB,KAAK4K,QAAQuiB,gBAAkB,EAEjC,IAAK,MAAMqC,IAAc,CAAC,YAAa,aAAc,wBACnD,GAAIxvB,KAAK4K,QAAQ4kB,GAIf,YAHAxvB,KAAKuvB,WACH,IAAIptB,MAAM,uBAAuBqtB,6CAOzC,GAAIxvB,KAAK4K,QAAQwiB,yBAA0B,CACzC,GAAIptB,KAAK4K,QAAQuiB,iBAAmB,EAMlC,YALAntB,KAAKuvB,WACH,IAAIptB,MACF,6FAKN,GAAInC,KAAK4K,QAAQuiB,kBAAoBntB,KAAK4K,QAAQwiB,yBAAyB3qB,OAMzE,YALAzC,KAAKuvB,WACH,IAAIptB,MACF,mGAKR,CAEAnC,KAAK4K,QACF0hB,YAAY1V,EAAM5W,KAAK4K,SACvBwW,KAAMkL,IASLtsB,KAAK8tB,aAAexB,EAEhBtsB,KAAKmuB,QACAnuB,KAAKmuB,QAEPnuB,KAAK4K,QAAQ8iB,WAAW+B,SAAS7Y,EAAM5W,KAAK4K,QAAQkY,aAE5D1B,KAAM5N,IAML,GALAxT,KAAKmuB,QAAU3a,EAKXxT,KAAK4K,QAAQ2iB,qBACfvtB,KAAKkuB,MAAQ,UACR,GAA+B,MAA3BluB,KAAK4K,QAAQ2hB,YAEtB,GADAvsB,KAAKkuB,MAAQlB,OAAOhtB,KAAK4K,QAAQ2hB,YAC7BS,OAAO3D,MAAMrpB,KAAKkuB,OAEpB,YADAluB,KAAKuvB,WAAW,IAAIptB,MAAM,+DAK5B,GADAnC,KAAKkuB,MAAQluB,KAAKmuB,QAAQ7Q,KACR,MAAdtd,KAAKkuB,MAMP,YALAluB,KAAKuvB,WACH,IAAIptB,MACF,0JASJnC,KAAK4K,QAAQuiB,gBAAkB,GAAiC,MAA5BntB,KAAKwuB,oBAC3CxuB,KAAK0vB,uBAEL1vB,KAAK2vB,uBAGRlP,MAAOhL,IACNzV,KAAKuvB,WAAW9Z,IAtFpB,MAFEzV,KAAKuvB,WAAW,IAAIptB,MAAM,iEA0F9B,CAQAutB,oBAAAA,GACE,MAAME,EAAY5vB,KAAKkuB,MACvB,IAAI2B,EAAgB,EACpB7vB,KAAKuuB,iBAAmB,GAExB,MAAMuB,EACwB,MAA5B9vB,KAAKwuB,oBACDxuB,KAAKwuB,oBAAoB/rB,OACzBzC,KAAK4K,QAAQuiB,gBAIbrhB,EACJ9L,KAAK4K,QAAQwiB,0BA2xBnB,SAA4BwC,EAAWE,GACrC,MAAMC,EAAWvhB,KAAKoP,MAAMgS,EAAYE,GAClChkB,EAAQ,GAEd,IAAK,IAAI+B,EAAI,EAAGA,EAAIiiB,EAAWjiB,IAC7B/B,EAAMwB,KAAK,CACTnB,MAAO4jB,EAAWliB,EAClBuF,IAAK2c,GAAYliB,EAAI,KAMzB,OAFA/B,EAAMgkB,EAAY,GAAG1c,IAAMwc,EAEpB9jB,CACT,CAzyB+CkkB,CAAmBhwB,KAAKmuB,QAAQ7Q,KAAMwS,GAG7E9vB,KAAKwuB,qBACP1iB,EAAMmK,QAAQ,CAACmN,EAAMlX,KACnBkX,EAAK+I,UAAYnsB,KAAKwuB,oBAAoBtiB,IAAU,OAKxDlM,KAAKwuB,oBAAsB,IAAIplB,MAAM0C,EAAMrJ,QAI3C,MAAMwtB,EAAUnkB,EAAMtK,IAAI,CAAC4hB,EAAMlX,KAC/B,IAAIgkB,EAAmB,EAEvB,OAAOlwB,KAAKmuB,QAAQnsB,MAAMohB,EAAKjX,MAAOiX,EAAKhQ,KAAKgO,KAC9C,EAAG5gB,WACD,IAAIqW,QAAQ,CAACC,EAASC,KAEpB,MAAMnM,EAAU,IACX5K,KAAK4K,QAERuhB,UAAW/I,EAAK+I,WAAa,KAG7BkB,6BAA6B,EAC7BC,4BAA4B,EAE5BH,gBAAiB,EAEjBC,yBAA0B,KAC1BhB,SAAUpsB,KAAK4K,QAAQyhB,0BAEvBvL,QAAS,IACJ9gB,KAAK4K,QAAQkW,QAChB,gBAAiB,WAGnBP,UAAWzJ,EACXsJ,QAASrJ,EAGTuJ,WAAa6P,IACXN,EAAgBA,EAAgBK,EAAmBC,EACnDD,EAAmBC,EACnBnwB,KAAKowB,cAAcP,EAAeD,IAIpCnD,qBAAsBA,KACpBzsB,KAAKwuB,oBAAoBtiB,GAAS+X,EAAOjD,IAErChhB,KAAKwuB,oBAAoBxY,OAAQgS,GAAMhT,QAAQgT,IAAIvlB,SAAWqJ,EAAMrJ,QACtEzC,KAAKqwB,4BAKLpM,EAAS,IAAIvE,GAAWlf,EAAOoK,GACrCqZ,EAAO9X,QAGPnM,KAAKuuB,iBAAiBjhB,KAAK2W,QAKnC,IAAIW,EAGJ/N,QAAQyZ,IAAIL,GACT7O,KAAK,KACJwD,EAAM5kB,KAAKuwB,aAAa,OAAQvwB,KAAK4K,QAAQgV,UAC7CgF,EAAI4L,UAAU,gBAAiB,SAASxwB,KAAKwuB,oBAAoBxgB,KAAK,QAGtE,MAAMoe,EAAWqE,GAAezwB,KAAK4K,QAAQwhB,UAK7C,MAJiB,KAAbA,GACFxH,EAAI4L,UAAU,kBAAmBpE,GAG5BpsB,KAAK0wB,aAAa9L,EAAK,QAE/BxD,KAAMyD,IACL,IAAK8L,GAAiB9L,EAAIQ,YAAa,KAErC,YADArlB,KAAK4wB,eAAehM,EAAKC,EAAK,kDAIhC,MAAMuF,EAAWvF,EAAIK,UAAU,YACf,MAAZkF,GAKJpqB,KAAKghB,IAAM6P,GAAW7wB,KAAK4K,QAAQgV,SAAUwK,GACpBpqB,KAAKghB,IAE9BhhB,KAAK8wB,aAAajM,IAPhB7kB,KAAK4wB,eAAehM,EAAKC,EAAK,6CASjCpE,MAAOhL,IACNzV,KAAKuvB,WAAW9Z,IAEtB,CAQAka,kBAAAA,GAOE,OAHA3vB,KAAKiuB,UAAW,EAGA,MAAZjuB,KAAKghB,KACmChhB,KAAKghB,SAC/ChhB,KAAK+wB,iBAKuB,MAA1B/wB,KAAK4K,QAAQuhB,WAC2BnsB,KAAK4K,QAAQuhB,UACvDnsB,KAAKghB,IAAMhhB,KAAK4K,QAAQuhB,eACxBnsB,KAAK+wB,sBAMP/wB,KAAKgxB,eACP,CAYAjS,KAAAA,CAAMkS,GAEJ,GAA6B,MAAzBjxB,KAAKuuB,iBACP,IAAK,MAAMtK,KAAUjkB,KAAKuuB,iBACxBtK,EAAOlF,MAAMkS,GAiBjB,OAZkB,OAAdjxB,KAAK6tB,MACP7tB,KAAK6tB,KAAK9O,QAGZ/e,KAAKiuB,UAAW,EAGU,MAAtBjuB,KAAKquB,gBACP6C,aAAalxB,KAAKquB,eAClBruB,KAAKquB,cAAgB,MAGlB4C,GAA+B,MAAZjxB,KAAKghB,IAK3BtB,GAAW+O,UAAUzuB,KAAKghB,IAAKhhB,KAAK4K,SAEjCwW,KAAK,IAAMphB,KAAKmxB,yBANZta,QAAQC,SAQnB,CAEA8Z,cAAAA,CAAehM,EAAKC,EAAKrG,EAASmG,GAChC3kB,KAAKuvB,WAAW,IAAI7K,EAAclG,EAASmG,EAAYC,EAAKC,GAC9D,CAEA0K,UAAAA,CAAW9Z,GAET,IAAIzV,KAAKiuB,SAAT,CAGA,GAAgC,MAA5BjuB,KAAK4K,QAAQsiB,YAAqB,CASpC,GAL0C,MAAhBltB,KAAKguB,SAAmBhuB,KAAKguB,QAAUhuB,KAAKsuB,qBAEpEtuB,KAAKouB,cAAgB,GAGnBQ,GAAYnZ,EAAKzV,KAAKouB,cAAepuB,KAAK4K,SAAU,CACtD,MAAMikB,EAAQ7uB,KAAK4K,QAAQsiB,YAAYltB,KAAKouB,iBAO5C,OALApuB,KAAKsuB,mBAAqBtuB,KAAKguB,aAE/BhuB,KAAKquB,cAAgBW,WAAW,KAC9BhvB,KAAKmM,SACJ0iB,GAEL,CACF,CAEA,GAAoC,mBAAzB7uB,KAAK4K,QAAQwV,QAGtB,MAAM3K,EAFNzV,KAAK4K,QAAQwV,QAAQ3K,EAzBJ,CA6BrB,CAQAqb,YAAAA,CAAaM,GACPpxB,KAAK4K,QAAQ0iB,4BAGfttB,KAAKmxB,wBAG+B,mBAA3BnxB,KAAK4K,QAAQ2V,WACtBvgB,KAAK4K,QAAQ2V,UAAU,CAAE6Q,gBAE7B,CAUAhB,aAAAA,CAAciB,EAAWC,GACgB,mBAA5BtxB,KAAK4K,QAAQ0V,YACtBtgB,KAAK4K,QAAQ0V,WAAW+Q,EAAWC,EAEvC,CAWAC,kBAAAA,CAAmBzO,EAAW0O,EAAeF,GACC,mBAAjCtxB,KAAK4K,QAAQ4hB,iBACtBxsB,KAAK4K,QAAQ4hB,gBAAgB1J,EAAW0O,EAAeF,EAE3D,CASAN,aAAAA,GACE,IAAKhxB,KAAK4K,QAAQgV,SAEhB,YADA5f,KAAKuvB,WAAW,IAAIptB,MAAM,iEAI5B,MAAMyiB,EAAM5kB,KAAKuwB,aAAa,OAAQvwB,KAAK4K,QAAQgV,UAE/C5f,KAAK4K,QAAQ2iB,qBACf3I,EAAI4L,UAAU,sBAAuB,KAErC5L,EAAI4L,UAAU,gBAAiB,GAAGxwB,KAAKkuB,SAIzC,MAAM9B,EAAWqE,GAAezwB,KAAK4K,QAAQwhB,UAK7C,IAAIqF,EAJa,KAAbrF,GACFxH,EAAI4L,UAAU,kBAAmBpE,GAI/BpsB,KAAK4K,QAAQ4iB,2BAA6BxtB,KAAK4K,QAAQ2iB,sBACzDvtB,KAAKguB,QAAU,EACfyD,EAAUzxB,KAAK0xB,mBAAmB9M,KAGhC5kB,KAAK4K,QAAQie,WAAamD,IAC1BhsB,KAAK4K,QAAQie,WAAaoD,IAE1BrH,EAAI4L,UAAU,kBAAmB,MAEnCiB,EAAUzxB,KAAK0wB,aAAa9L,EAAK,OAGnC6M,EACGrQ,KAAMyD,IACL,IAAK8L,GAAiB9L,EAAIQ,YAAa,KAErC,YADArlB,KAAK4wB,eAAehM,EAAKC,EAAK,kDAIhC,MAAMuF,EAAWvF,EAAIK,UAAU,YAC/B,GAAgB,MAAZkF,EAAJ,CAYA,GAPApqB,KAAKghB,IAAM6P,GAAW7wB,KAAK4K,QAAQgV,SAAUwK,GACpBpqB,KAAKghB,IAEmB,mBAAtChhB,KAAK4K,QAAQ6hB,sBACtBzsB,KAAK4K,QAAQ6hB,uBAGI,IAAfzsB,KAAKkuB,MAIP,OAFAluB,KAAK8wB,aAAajM,QAClB7kB,KAAKmuB,QAAQtlB,QAIf7I,KAAKqwB,0BAA0BjP,KAAK,KAC9BphB,KAAK4K,QAAQ4iB,yBACfxtB,KAAK2xB,sBAAsB/M,EAAKC,IAEhC7kB,KAAKguB,QAAU,EACfhuB,KAAK4xB,mBArBT,MAFE5xB,KAAK4wB,eAAehM,EAAKC,EAAK,6CA2BjCpE,MAAOhL,IACNzV,KAAK4wB,eAAehM,EAAK,KAAM,+BAAgCnP,IAErE,CASAsb,aAAAA,GACE,MAAMnM,EAAM5kB,KAAKuwB,aAAa,OAAQvwB,KAAKghB,KAC3BhhB,KAAK0wB,aAAa9L,EAAK,MAGpCxD,KAAMyD,IACL,MAAM/F,EAAS+F,EAAIQ,YACnB,IAAKsL,GAAiB7R,EAAQ,KAM5B,OAAe,MAAXA,OACF9e,KAAK4wB,eAAehM,EAAKC,EAAK,iDAI5B8L,GAAiB7R,EAAQ,MAG3B9e,KAAKmxB,wBAGFnxB,KAAK4K,QAAQgV,UAWlB5f,KAAKghB,IAAM,UACXhhB,KAAKgxB,sBAVHhxB,KAAK4wB,eACHhM,EACAC,EACA,oFAWN,MAAMgN,EAAS7E,OAAO8E,SAASjN,EAAIK,UAAU,iBAAkB,IAC/D,GAAI8H,OAAO3D,MAAMwI,GAEf,YADA7xB,KAAK4wB,eAAehM,EAAKC,EAAK,wCAIhC,MAAMpiB,EAASuqB,OAAO8E,SAASjN,EAAIK,UAAU,iBAAkB,KAE7D8H,OAAO3D,MAAM5mB,IACZzC,KAAK4K,QAAQ2iB,sBACdvtB,KAAK4K,QAAQie,WAAakD,IAMqB,mBAAtC/rB,KAAK4K,QAAQ6hB,sBACtBzsB,KAAK4K,QAAQ6hB,uBAGfzsB,KAAKqwB,0BAA0BjP,KAAK,KAGlC,GAAIyQ,IAAWpvB,EAGb,OAFAzC,KAAKowB,cAAc3tB,EAAQA,QAC3BzC,KAAK8wB,aAAajM,GAIpB7kB,KAAKguB,QAAU6D,EACf7xB,KAAK4xB,oBAlBL5xB,KAAK4wB,eAAehM,EAAKC,EAAK,0CAqBjCpE,MAAOhL,IACNzV,KAAK4wB,eAAehM,EAAK,KAAM,+BAAgCnP,IAErE,CASAmc,cAAAA,GAIE,GAAI5xB,KAAKiuB,SACP,OAGF,IAAIrJ,EAKA5kB,KAAK4K,QAAQ8hB,qBACf9H,EAAM5kB,KAAKuwB,aAAa,OAAQvwB,KAAKghB,KACrC4D,EAAI4L,UAAU,yBAA0B,UAExC5L,EAAM5kB,KAAKuwB,aAAa,QAASvwB,KAAKghB,KAGxC4D,EAAI4L,UAAU,gBAAiB,GAAGxwB,KAAKguB,WACvBhuB,KAAK0xB,mBAAmB9M,GAGrCxD,KAAMyD,IACA8L,GAAiB9L,EAAIQ,YAAa,KAKvCrlB,KAAK2xB,sBAAsB/M,EAAKC,GAJ9B7kB,KAAK4wB,eAAehM,EAAKC,EAAK,oDAMjCpE,MAAOhL,IAEFzV,KAAKiuB,UAITjuB,KAAK4wB,eAAehM,EAAK,KAAM,yCAAyC5kB,KAAKguB,UAAWvY,IAE9F,CAQAic,kBAAAA,CAAmB9M,GACjB,MAAMzY,EAAQnM,KAAKguB,QACnB,IAAI5a,EAAMpT,KAAKguB,QAAUhuB,KAAK4K,QAAQkY,UAsBtC,OApBA8B,EAAImN,mBAAoBV,IACtBrxB,KAAKowB,cAAcjkB,EAAQklB,EAAWrxB,KAAKkuB,SAGzCluB,KAAK4K,QAAQie,WAAakD,GAC5BnH,EAAI4L,UAAU,eAAgB,mCACrBxwB,KAAK4K,QAAQie,WAAaoD,IACnCrH,EAAI4L,UAAU,eAAgB,+BAO7Bpd,IAAQ4Z,OAAOC,mBAAqB7Z,EAAMpT,KAAKkuB,SAC/CluB,KAAK4K,QAAQ2iB,uBAEdna,EAAMpT,KAAKkuB,OAGNluB,KAAKmuB,QAAQnsB,MAAMmK,EAAOiH,GAAKgO,KAAK,EAAG5gB,QAAOwiB,WACnD,MAAMgP,EAAYxxB,GAAO8c,KAAO9c,EAAM8c,KAAO,EAKzCtd,KAAK4K,QAAQ2iB,sBAAwBvK,IACvChjB,KAAKkuB,MAAQluB,KAAKguB,QAAUgE,EAC5BpN,EAAI4L,UAAU,gBAAiB,GAAGxwB,KAAKkuB,UAQzC,MAAM+D,EAAUjyB,KAAKguB,QAAUgE,EAC/B,OAAKhyB,KAAK4K,QAAQ2iB,sBAAwBvK,GAAQiP,IAAYjyB,KAAKkuB,MAC1DrX,QAAQE,OACb,IAAI5U,MACF,wCAAwCnC,KAAKkuB,6CAA6C+D,YAKlF,OAAVzxB,EACKR,KAAK0wB,aAAa9L,IAIzB5kB,KAAK4K,QAAQie,WAAamD,IAC1BhsB,KAAK4K,QAAQie,WAAaoD,IAE1BrH,EAAI4L,UAAU,kBAAmBxN,EAAO,KAAO,MAEjDhjB,KAAKowB,cAAcpwB,KAAKguB,QAAShuB,KAAKkuB,OAC/BluB,KAAK0wB,aAAa9L,EAAKpkB,KAElC,CAQAmxB,qBAAAA,CAAsB/M,EAAKC,GACzB,MAAMgN,EAAS7E,OAAO8E,SAASjN,EAAIK,UAAU,iBAAkB,IAC/D,GAAI8H,OAAO3D,MAAMwI,GACf7xB,KAAK4wB,eAAehM,EAAKC,EAAK,4CADhC,CAUA,GALA7kB,KAAKowB,cAAcyB,EAAQ7xB,KAAKkuB,OAChCluB,KAAKuxB,mBAAmBM,EAAS7xB,KAAKguB,QAAS6D,EAAQ7xB,KAAKkuB,OAE5DluB,KAAKguB,QAAU6D,EAEXA,IAAW7xB,KAAKkuB,MAIlB,OAFAluB,KAAK8wB,aAAajM,QAClB7kB,KAAKmuB,QAAQtlB,QAIf7I,KAAK4xB,gBAdL,CAeF,CAOArB,YAAAA,CAAapP,EAAQH,GACnB,MAAM4D,EAAM8J,GAAYvN,EAAQH,EAAKhhB,KAAK4K,SAE1C,OADA5K,KAAK6tB,KAAOjJ,EACLA,CACT,CAOAuM,qBAAAA,GACOnxB,KAAK+tB,iBAEV/tB,KAAK4tB,YAAYsE,aAAalyB,KAAK+tB,gBAAgBtN,MAAOhL,IACxDzV,KAAKuvB,WAAW9Z,KAElBzV,KAAK+tB,eAAiB,KACxB,CAOAsC,uBAAAA,GAKE,IACGrwB,KAAK4K,QAAQyiB,8BACbrtB,KAAK8tB,cACkB,OAAxB9tB,KAAK+tB,eAEL,OAAOlX,QAAQC,UAGjB,MAAMqb,EAAe,CACnB7U,KAAMtd,KAAKkuB,MACX9B,SAAUpsB,KAAK4K,QAAQwhB,SACvBgG,cAAc,IAAIC,MAAO3W,YAW3B,OARI1b,KAAKuuB,iBAEP4D,EAAa9C,mBAAqBrvB,KAAKwuB,oBAGvC2D,EAAahG,UAAYnsB,KAAKghB,IAGzBhhB,KAAK4tB,YAAY0E,UAAUtyB,KAAK8tB,aAAcqE,GAAc/Q,KAAMkO,IACvEtvB,KAAK+tB,eAAiBuB,GAE1B,CAOAoB,YAAAA,CAAa9L,EAAK1C,EAAO,MACvB,OAAOyM,GAAY/J,EAAK1C,EAAMliB,KAAK4K,QACrC,EAGF,SAAS6lB,GAAerE,GACtB,OAAO1sB,OAAO4B,QAAQ8qB,GACnB5qB,IAAI,EAAE+c,EAAK/d,KAAW,GAAG+d,KAAOgU,GAAcrM,OAAO1lB,OACrDwN,KAAK,IACV,CAQA,SAAS2iB,GAAiB7R,EAAQ0T,GAChC,OAAO1T,GAAU0T,GAAY1T,EAAS0T,EAAW,GACnD,CASA,SAAS9D,GAAYvN,EAAQH,EAAKpW,GAChC,MAAMga,EAAMha,EAAQ+iB,UAAU8E,cAActR,EAAQH,GAEhDpW,EAAQie,WAAamD,GACvBpH,EAAI4L,UAAU,+BAAgC,KACrC5lB,EAAQie,WAAaoD,GAC9BrH,EAAI4L,UAAU,+BAAgC,KAE9C5L,EAAI4L,UAAU,gBAAiB,SAEjC,MAAM1P,EAAUlW,EAAQkW,SAAW,CAAA,EAEnC,IAAK,MAAO9H,EAAMxY,KAAUd,OAAO4B,QAAQwf,GACzC8D,EAAI4L,UAAUxX,EAAMxY,GAGtB,GAAIoK,EAAQ+hB,aAAc,CACxB,MAAM1H,ECx9BD,uCAAuC1iB,QAAQ,QAAUmhB,IAC9D,MAAMgP,EAAqB,GAAhBlkB,KAAKmkB,SAAiB,EAEjC,OADgB,MAANjP,EAAYgP,EAAS,EAAJA,EAAW,GAC7BhX,SAAS,MDs9BlBkJ,EAAI4L,UAAU,eAAgBvL,EAChC,CAEA,OAAOL,CACT,CAQAnO,eAAekY,GAAY/J,EAAK1C,EAAMtX,GACG,mBAA5BA,EAAQgiB,uBACXhiB,EAAQgiB,gBAAgBhI,GAGhC,MAAMC,QAAYD,EAAIN,KAAKpC,GAM3B,MAJuC,mBAA5BtX,EAAQiiB,uBACXjiB,EAAQiiB,gBAAgBjI,EAAKC,GAG9BA,CACT,CA2BA,SAAS+J,GAAYnZ,EAAKmd,EAAchoB,GAQtC,QACyB,MAAvBA,EAAQsiB,aACR0F,GAAgBhoB,EAAQsiB,YAAYzqB,QACb,MAAvBgT,EAAIqP,mBAKFla,GAA4C,mBAA1BA,EAAQkiB,cACrBliB,EAAQkiB,cAAcrX,EAAKmd,EAAchoB,GAG3CmiB,GAAqBtX,GAC9B,CAOA,SAASsX,GAAqBtX,GAC5B,MAAMqJ,EAASrJ,EAAIsP,iBAAmBtP,EAAIsP,iBAAiBM,YAAc,EACzE,QAASsL,GAAiB7R,EAAQ,MAAmB,MAAXA,GAA6B,MAAXA,IAjD9D,WACE,IAAI+T,GAAS,EAOb,MAJyB,oBAAdhpB,YAAkD,IAArBA,UAAUipB,SAChDD,GAAS,GAGJA,CACT,CAwCiFE,EACjF,CAQA,SAASlC,GAAWlF,EAAQqH,GAC1B,OAAO,IAAIC,GAAID,EAAMrH,GAAQjQ,UAC/B,CA2BAgE,GAAWwM,eAAiBA,GE7lC5B,MAAMgH,GAAgBA,IACC,oBAAdrpB,WACsB,iBAAtBA,UAAUspB,SACmB,gBAApCtpB,UAAUspB,QAAQ5xB,cCAL,MAAM6xB,GAEnBxyB,WAAAA,CAAYgW,GACV5W,KAAKqzB,MAAQzc,EACb5W,KAAKsd,KAAO1G,EAAK0G,IACnB,CAEAtb,KAAAA,CAAMmK,EAAOiH,GAIX,GCbgB,oBAAXiX,cACqB,IAApBA,OAAOiJ,eACa,IAAnBjJ,OAAOkJ,cACY,IAAnBlJ,OAAOmJ,SDWZ,OEVkCC,EFUXzzB,KAAKqzB,MAAMrxB,MAAMmK,EAAOiH,GET5C,IAAIyD,QAAQ,CAACC,EAASC,KAC3B,MAAM2c,EAAS,IAAIC,WACnBD,EAAOE,OAAS,KACd,MAAMpzB,EAAQ,IAAI8lB,WAAWoN,EAAO9e,QACpCkC,EAAQ,CAAEtW,WAEZkzB,EAAOG,QAAWpe,IAChBsB,EAAOtB,IAETie,EAAOI,kBAAkBL,KAVd,IAAyBA,EFapC,MAAMjzB,EAAQR,KAAKqzB,MAAMrxB,MAAMmK,EAAOiH,GAChC4P,EAAO5P,GAAOpT,KAAKsd,KACzB,OAAOzG,QAAQC,QAAQ,CAAEtW,QAAOwiB,QAClC,CAEAna,KAAAA,GACE,EGxBJ,SAAS6F,GAAIqlB,GACX,YAAoB1T,IAAhB0T,EAAkC,OACb1T,IAArB0T,EAAYzW,KAA2ByW,EAAYzW,KAChDyW,EAAYtxB,MACrB,CAwBe,MAAMuxB,GACnBpzB,WAAAA,CAAY8yB,GACV1zB,KAAKi0B,aAAU5T,EACfrgB,KAAKk0B,cAAgB,EACrBl0B,KAAKm0B,QAAUT,EACf1zB,KAAKo0B,OAAQ,CACf,CAEApyB,KAAAA,CAAMmK,EAAOiH,GACX,OAAIjH,EAAQnM,KAAKk0B,cACRrd,QAAQE,OAAO,IAAI5U,MAAM,yDAG3BnC,KAAKq0B,2BAA2BloB,EAAOiH,EAChD,CAEAihB,0BAAAA,CAA2BloB,EAAOiH,GAChC,MAAMkhB,EAAgBlhB,GAAOpT,KAAKk0B,cAAgBxlB,GAAI1O,KAAKi0B,SAC3D,GAAIj0B,KAAKo0B,OAASE,EAAe,CAC/B,MAAM9zB,EAAQR,KAAKu0B,mBAAmBpoB,EAAOiH,GACvC4P,EAAgB,MAATxiB,GAAgBR,KAAKo0B,MAClC,OAAOvd,QAAQC,QAAQ,CAAEtW,QAAOwiB,QAClC,CAEA,OAAOhjB,KAAKm0B,QAAQK,OAAOpT,KAAK,EAAG5gB,QAAOwiB,WACpCA,EACFhjB,KAAKo0B,OAAQ,OACa/T,IAAjBrgB,KAAKi0B,QACdj0B,KAAKi0B,QAAUzzB,EAEfR,KAAKi0B,QAhDb,SAAgBnS,EAAGC,GACjB,GAAID,EAAEsJ,OAEJ,OAAOtJ,EAAEsJ,OAAOrJ,GAElB,GAAID,aAAa2S,KACf,OAAO,IAAIA,KAAK,CAAC3S,EAAGC,GAAI,CAAE3gB,KAAM0gB,EAAE1gB,OAEpC,GAAI0gB,EAAEhhB,IAAK,CAET,MAAM4iB,EAAI,IAAI5B,EAAElhB,YAAYkhB,EAAErf,OAASsf,EAAEtf,QAGzC,OAFAihB,EAAE5iB,IAAIghB,GACN4B,EAAE5iB,IAAIihB,EAAGD,EAAErf,QACJihB,CACT,CACA,MAAM,IAAIvhB,MAAM,oBAClB,CAgCuBipB,CAAOprB,KAAKi0B,QAASzzB,GAG/BR,KAAKq0B,2BAA2BloB,EAAOiH,IAElD,CAEAmhB,kBAAAA,CAAmBpoB,EAAOiH,GAIpBjH,EAAQnM,KAAKk0B,gBACfl0B,KAAKi0B,QAAUj0B,KAAKi0B,QAAQjyB,MAAMmK,EAAQnM,KAAKk0B,eAC/Cl0B,KAAKk0B,cAAgB/nB,GAGvB,MAAMuoB,EAA2C,IAAtBhmB,GAAI1O,KAAKi0B,SACpC,OAAIj0B,KAAKo0B,OAASM,EACT,KAIF10B,KAAKi0B,QAAQjyB,MAAM,EAAGoR,EAAMjH,EACrC,CAEAtD,KAAAA,GACM7I,KAAKm0B,QAAQQ,QACf30B,KAAKm0B,QAAQQ,QAEjB,EC7EF,MAAMC,GACJh0B,WAAAA,CAAYugB,EAAQH,GAClBhhB,KAAK60B,KAAO,IAAI9Q,eAChB/jB,KAAK60B,KAAKjsB,KAAKuY,EAAQH,GAAK,GAE5BhhB,KAAK80B,QAAU3T,EACfnhB,KAAK+0B,KAAO/T,EACZhhB,KAAKg1B,SAAW,CAAA,CAClB,CAEA7P,SAAAA,GACE,OAAOnlB,KAAK80B,OACd,CAEA1P,MAAAA,GACE,OAAOplB,KAAK+0B,IACd,CAEAvE,SAAAA,CAAUyE,EAAQz0B,GAChBR,KAAK60B,KAAKK,iBAAiBD,EAAQz0B,GACnCR,KAAKg1B,SAASC,GAAUz0B,CAC1B,CAEA0kB,SAAAA,CAAU+P,GACR,OAAOj1B,KAAKg1B,SAASC,EACvB,CAEAlD,kBAAAA,CAAmBoD,GAEX,WAAYn1B,KAAK60B,OAIvB70B,KAAK60B,KAAK5Q,OAAOmR,WAAcld,IACxBA,EAAEiM,kBAIPgR,EAAgBjd,EAAEkM,SAEtB,CAEAE,IAAAA,CAAKpC,EAAO,MACV,OAAO,IAAIrL,QAAQ,CAACC,EAASC,KAC3B/W,KAAK60B,KAAKjB,OAAS,KACjB9c,EAAQ,IAAIue,GAASr1B,KAAK60B,QAG5B70B,KAAK60B,KAAKhB,QAAWpe,IACnBsB,EAAOtB,IAGTzV,KAAK60B,KAAKvQ,KAAKpC,IAEnB,CAEAnD,KAAAA,GAEE,OADA/e,KAAK60B,KAAK9V,QACHlI,QAAQC,SACjB,CAEAwe,mBAAAA,GACE,OAAOt1B,KAAK60B,IACd,EAGF,MAAMQ,GACJz0B,WAAAA,CAAY8f,GACV1gB,KAAK60B,KAAOnU,CACd,CAEA2E,SAAAA,GACE,OAAOrlB,KAAK60B,KAAK/V,MACnB,CAEAoG,SAAAA,CAAU+P,GACR,OAAOj1B,KAAK60B,KAAKxQ,kBAAkB4Q,EACrC,CAEA3P,OAAAA,GACE,OAAOtlB,KAAK60B,KAAKU,YACnB,CAEAD,mBAAAA,GACE,OAAOt1B,KAAK60B,IACd,EC/FF,IAAIW,IAAa,EACjB,IAEEA,GAAa,iBAAkBnL,OAM/B,MAAM9L,EAAM,aACNkX,EAAgBC,aAAaC,QAAQpX,GAC3CmX,aAAaE,QAAQrX,EAAKkX,GACJ,OAAlBA,GAAwBC,aAAaG,WAAWtX,EACtD,CAAE,MAAOrG,GAIP,GAAIA,EAAE7M,OAAS6M,EAAE4d,cAAgB5d,EAAE7M,OAAS6M,EAAE6d,mBAG5C,MAAM7d,EAFNsd,IAAa,CAIjB,CAEO,MAAMQ,GAAeR,GCd5B,MAAMtJ,GAAiB,IAClBxM,GAAWwM,eACdyB,UAAW,IFZE,MACb8E,aAAAA,CAActR,EAAQH,GACpB,OAAO,IAAI4T,GAAQzT,EAAQH,EAC7B,CAEAiV,OAAAA,GACE,MAAO,cACT,GEMAvI,WAAY,ICPC,MACb,cAAM+B,CAAStlB,EAAO2Y,GAKpB,GAAIoQ,MAAmB/oB,QAA8B,IAAdA,EAAM+rB,IAC3C,IACE,MAAMC,QCToBD,EDSG/rB,EAAM+rB,ICRlC,IAAIrf,QAAQ,CAACC,EAASC,KAC3B,MAAM2J,EAAM,IAAIqD,eAChBrD,EAAIsD,aAAe,OACnBtD,EAAIkT,OAAS,KACX,MAAMuC,EAAOzV,EAAIW,SACjBvK,EAAQqf,IAEVzV,EAAImT,QAAWpe,IACbsB,EAAOtB,IAETiL,EAAI9X,KAAK,MAAOstB,GAChBxV,EAAI4D,UDFA,OAAO,IAAI8O,GAAW+C,EACxB,CAAE,MAAO1gB,GACP,MAAM,IAAItT,MACR,wFAAwFsT,IAE5F,CCfS,IAAmBygB,EDsB9B,MAA2B,mBAAhB/rB,EAAMnI,YAA8C,IAAfmI,EAAMmT,KAC7CzG,QAAQC,QAAQ,IAAIsc,GAAWjpB,IAGd,mBAAfA,EAAMqqB,MACf1R,EAAYkK,OAAOlK,GACdkK,OAAOoJ,SAAStT,GAQdjM,QAAQC,QAAQ,IAAIkd,GAAa7pB,EAAO2Y,IAPtCjM,QAAQE,OACb,IAAI5U,MACF,uFAQD0U,QAAQE,OACb,IAAI5U,MACF,sFAGN,GDnCAsrB,WAAYuI,GAAe,IDYtB,MACLK,cAAAA,GACE,MAAMC,EAAUt2B,KAAKu2B,aAAa,SAClC,OAAO1f,QAAQC,QAAQwf,EACzB,CAEApH,wBAAAA,CAAyB5C,GACvB,MAAMgK,EAAUt2B,KAAKu2B,aAAa,QAAQjK,OAC1C,OAAOzV,QAAQC,QAAQwf,EACzB,CAEApE,YAAAA,CAAa5C,GAEX,OADAoG,aAAaG,WAAWvG,GACjBzY,QAAQC,SACjB,CAEAwb,SAAAA,CAAUhG,EAAarI,GACrB,MACM1F,EAAM,QAAQ+N,MADT9d,KAAKgoB,MAAsB,KAAhBhoB,KAAKmkB,YAI3B,OADA+C,aAAaE,QAAQrX,EAAK4D,KAAKC,UAAU6B,IAClCpN,QAAQC,QAAQyH,EACzB,CAEAgY,YAAAA,CAAa7rB,GACX,MAAM4rB,EAAU,GAEhB,IAAK,IAAIzoB,EAAI,EAAGA,EAAI6nB,aAAajzB,OAAQoL,IAAK,CAC5C,MAAM0Q,EAAMmX,aAAanX,IAAI1Q,GAC7B,GAA4B,IAAxB0Q,EAAI9M,QAAQ/G,GAEhB,IACE,MAAMuZ,EAAS9B,KAAK9T,MAAMqnB,aAAaC,QAAQpX,IAC/C0F,EAAOqL,cAAgB/Q,EAEvB+X,EAAQhpB,KAAK2W,EACf,CAAE,MAAOwS,GAEP,CAEJ,CAEA,OAAOH,CACT,GCvDwD,IGd3C,MACbI,cAAAA,GACE,OAAO7f,QAAQC,QAAQ,GACzB,CAEAoY,wBAAAA,CAAyBpB,GACvB,OAAOjX,QAAQC,QAAQ,GACzB,CAEAob,YAAAA,CAAanE,GACX,OAAOlX,QAAQC,SACjB,CAEAwb,SAAAA,CAAUxE,EAAc6I,GACtB,OAAO9f,QAAQC,QAAQ,KACzB,GHAAwV,YIJa,SAAqB1V,EAAMhM,GACxC,OAAIsoB,KACKrc,QAAQC,QAQnB,SAAgCF,EAAMhM,GACpC,MAAMgsB,EAAWhgB,EAAKigB,KAMxB,SAAkBttB,GAEhB,IAAI0gB,EAAO,EACX,GAAmB,IAAf1gB,EAAI9G,OACN,OAAOwnB,EAET,IAAK,IAAIpc,EAAI,EAAGA,EAAItE,EAAI9G,OAAQoL,IAAK,CAEnCoc,GAAQA,GAAQ,GAAKA,EADR1gB,EAAIyD,WAAWa,GAE5Boc,GAAQA,CACV,CACA,OAAOA,CACT,CAlB+B6M,CAAS3U,KAAKC,UAAUxL,EAAKigB,OAAS,SACnE,MAAO,CAAC,SAAUjgB,EAAKoC,MAAQ,SAAUpC,EAAK0G,MAAQ,SAAUsZ,EAAUhsB,EAAQgV,UAAU5R,KAC1F,IAEJ,CAb2B+oB,CAAuBngB,EAAMhM,IAG/CiM,QAAQC,QACb,CAAC,SAAUF,EAAKoC,KAAMpC,EAAKxV,KAAMwV,EAAK0G,KAAM1G,EAAKogB,aAAcpsB,EAAQgV,UAAU5R,KAAK,KAE1F,GJDA,MAAMipB,WAAevX,GACnB9e,WAAAA,CAAYgW,EAAO,KAAMhM,EAAU,CAAA,GAEjCkV,MAAMlJ,EADNhM,EAAU,IAAKshB,MAAmBthB,GAEpC,CAEA,gBAAO6jB,CAAUzN,EAAKpW,EAAU,IAE9B,OADAA,EAAU,IAAKshB,MAAmBthB,GAC3B8U,GAAW+O,UAAUzN,EAAKpW,EACnC,EK3BK,MAAMssB,GAAezgB,MAC1BuK,EACArB,IAEA,IAAI9I,QAAQ,CAACC,EAASC,KACpB,MAAM2J,EAAM,IAAIqD,eAChBrD,EAAI9X,KAAK,SAAUoY,GAEnBN,EAAIkT,OAAS,KACQ,MAAflT,EAAI5B,OACNhI,IAEAC,EAAO,IAAI5U,QAGfue,EAAIwU,iBAAiB,gBAAiB,SACtCxU,EAAIwU,iBAAiB,cAAevV,GACpCe,EAAI4D,KAAK,QCDE,MAAM6S,WAAkBzX,EAQrC9e,WAAAA,EAAYkiB,UACVA,EAASnD,UACTA,EAAS/F,UACTA,EAAShD,KACTA,EAAIwgB,OACJA,EAAMlK,YACNA,EAAWrS,YACXA,EAAWsR,UACXA,IAEArM,MAAM,CAAE9G,KAAMpC,EAAKoC,KAAM8F,OAAQ,YAAa1d,KAAM,MAAOyZ,gBAE3D7a,KAAK2f,UAAYA,EAEjB3f,KAAKikB,OAAS,IAAIgT,GAAOrgB,EAAM,CAC7BkM,YACAlD,SAAUuM,EACVC,SAAU,CACRxS,UAAWA,EACXgB,SAAUhE,EAAKoC,KACfoe,OAAQA,GAEVvK,gBAAiB7sB,KAAKq3B,mBACtBzK,gBAAiB5sB,KAAKs3B,qBACtBlX,QAASpgB,KAAKsiB,YACdhC,WAAYtgB,KAAKu3B,eACjBhX,UAAWvgB,KAAKw3B,aAChBtK,YAAaA,GAAe,CAAC,EAAG,IAAM,IAAM,OAG9CltB,KAAKogB,aAAUC,EACfrgB,KAAKsgB,gBAAaD,EAClBrgB,KAAKugB,eAAYF,CACnB,CAEA,WAAatB,SACL/e,KAAKikB,OAAOlF,OAAM,EAC1B,CAEA,YAAaC,GACX,IAAKhf,KAAKikB,OAAOjD,IACf,OAAOnK,QAAQC,gBAGXogB,GAAal3B,KAAKikB,OAAOjD,IAAKhhB,KAAK2f,UAC3C,CAEO4B,KAAAA,GACL,OAAOvhB,KAAKyhB,EACd,CAEAD,cAAAA,GACE,MAAO,CACLC,GAAIzhB,KAAKyhB,GACTzI,KAAMhZ,KAAKgZ,KACXsE,KAAMtd,KAAK2hB,UACXvgB,KAAM,MACN4f,IAAK,GAET,CAEOW,OAAAA,GACL,OAAQ3hB,KAAKikB,OAAOrN,KAAc0G,IACpC,CAEOnR,KAAAA,GACLnM,KAAKikB,OAAO9X,OACd,CAEQmrB,qBAAwBG,IAC9BA,EAAQjH,UAAU,cAAexwB,KAAK2f,YAGhC0X,mBAAqBA,CAC3BK,EACArW,KAEA,MAAMsW,EAAatW,EAAS6D,UAAU,cAElCyS,IACF33B,KAAKyhB,GAAKkW,IAINrV,YAAepJ,IACrB,IAAIlZ,KAAKogB,QAGP,MAAMlH,EAFNlZ,KAAKogB,QAAQlH,IAMTqe,eAAiBA,CAACK,EAAuBtG,KAC3CtxB,KAAKsgB,YACPtgB,KAAKsgB,WAAWsX,EAAetG,IAI3BkG,aAAeA,KACjBx3B,KAAKugB,WACPvgB,KAAKugB,aC7FJ,MAAesX,WAAyBnY,EAG7C9e,WAAAA,EAAYoY,KAAEA,EAAIsE,KAAEA,EAAIlc,KAAEA,EAAIyZ,YAAEA,IAC9BiF,MAAM,CAAE9G,OAAM8F,OAAQ,OAAQ1d,OAAMyZ,gBAEpC7a,KAAKsd,KAAOA,CACd,CAEA,WAAayB,GACX,OAAOlI,QAAQC,SACjB,CAEA,YAAakI,GACX,OAAOnI,QAAQC,SACjB,CAEO6K,OAAAA,GACL,OAAO3hB,KAAKsd,IACd,EAGF,MAAMwa,WAAwBD,GAG5Bj3B,WAAAA,CAAYm3B,EAAqCld,GAC/CiF,MAAM,CACJ9G,KAAM+e,EAAY/e,KAClBsE,KAAMya,EAAYza,KAClBlc,KAAM,cACNyZ,gBAGF7a,KAAKyhB,GAAKsW,EAAYtW,EACxB,CAEOF,KAAAA,GAEP,CAEOC,cAAAA,GACL,MAAO,CACLC,GAAIzhB,KAAKyhB,GACTzI,KAAMhZ,KAAKgZ,KACXsE,KAAMtd,KAAKsd,KACXlc,KAAM,cAEV,EAGK,MAAM42B,WAAqBH,GAChCj3B,WAAAA,CAAYm3B,EAAkCld,GAC5CiF,MAAM,CACJ9G,KAAM+e,EAAY/e,KAClBsE,KAAMya,EAAYza,KAClBlc,KAAM,WACNyZ,eAEJ,CAEO0G,KAAAA,GAEP,CAEOC,cAAAA,GACL,MAAO,CACLxI,KAAMhZ,KAAKgZ,KACXsE,KAAMtd,KAAKsd,KACXlc,KAAM,WAEV,EAGK,MAAM62B,WAAuBJ,GAIlCj3B,WAAAA,CAAYm3B,EAA4Bld,GACtCiF,MAAM,CACJ9G,KAAM+e,EAAYrW,eAAiBqW,EAAY/e,KAC/CsE,KAAMya,EAAYza,KAClBlc,KAAM,aACNyZ,gBAGF7a,KAAKyhB,GAAKsW,EAAYtW,GACtBzhB,KAAKue,IAAMwZ,EAAY/e,IACzB,CAEOuI,KAAAA,GACL,OAAOvhB,KAAKyhB,EACd,CAEAD,cAAAA,GACE,MAAO,CACLC,GAAIzhB,KAAKyhB,GACTzI,KAAMhZ,KAAKue,IACXmD,cAAe1hB,KAAKgZ,KACpBsE,KAAMtd,KAAKsd,KACXlc,KAAM,KAEV,EAGK,MAAM82B,WAAwBL,GAKnCj3B,WAAAA,EAAY+e,UACVA,EAASoY,YACTA,EAAWld,YACXA,EAAWsR,UACXA,IAEArM,MAAM,CACJ9G,KAAM+e,EAAY/e,KAClBsE,KAAMya,EAAYza,KAClBlc,KAAM,cACNyZ,gBAGF7a,KAAK2f,UAAYA,EACjB3f,KAAKyhB,GAAKsW,EAAYtW,GACtBzhB,KAAKghB,IAAM,GAAGmL,IAAY4L,EAAYtW,IACxC,CAEA,YAAazC,SACLkY,GAAal3B,KAAKghB,IAAKhhB,KAAK2f,UACpC,CAEO4B,KAAAA,GACL,OAAOvhB,KAAKyhB,EACd,CAEAD,cAAAA,GACE,MAAO,CACLC,GAAIzhB,KAAKyhB,GACTzI,KAAMhZ,KAAKgZ,KACXsE,KAAMtd,KAAKsd,KACXlc,KAAM,MACN4f,IAAK,GAET,ECrHF,MAAMmX,GAmBJv3B,WAAAA,EAAYw3B,UACVA,EAAStV,UACTA,EAASnD,UACTA,EAAS0Y,aACTA,EAAYze,UACZA,EAASG,KACTA,EAAIqd,OACJA,EAAMkB,QACNA,EAAOnuB,MACPA,EAAKouB,SACLA,EAAQj5B,OACRA,EAAMoL,OACNA,EAAMwiB,YACNA,EAAWrN,YACXA,EAAWxF,aACXA,EAAYme,gBACZA,EAAele,aACfA,EAAY6R,UACZA,IAEAnsB,KAAKo4B,UAAYA,EACjBp4B,KAAK8iB,UAAYA,EACjB9iB,KAAK2f,UAAYA,EACjB3f,KAAKq4B,aAAeA,EACpBr4B,KAAK4Z,UAAYA,EACjB5Z,KAAK+Z,KAAOA,EACZ/Z,KAAKo3B,OAASA,EACdp3B,KAAKu4B,SAAWA,EAChBv4B,KAAK0K,OAASA,EACd1K,KAAKktB,YAAcA,EACnBltB,KAAK6f,YAAcA,EACnB7f,KAAKw4B,gBAAkBA,IAAoBruB,EAAMsuB,SACjDz4B,KAAKmsB,UAAYA,EACjBnsB,KAAK8X,kBAAoB,IAAIlC,EAAkBzL,EAAMqY,QAErDxiB,KAAKiwB,QAAU,GACfjwB,KAAK04B,gBAAkB,EAEvB14B,KAAK6X,SAAW,IAAIuC,EAAiB,CACnCjQ,QACA7K,SACA+a,eACAC,iBAEF,MAAMqe,EAAiB34B,KAAK6X,SAASF,UAEjC6gB,GACFx4B,KAAK44B,aAAaD,EAAgBxuB,EAAMqY,QAG1CxiB,KAAK64B,gBAAgBP,GAErBt4B,KAAK84B,gBAEL3uB,EAAM4N,iBAAiB,SAAU/X,KAAK+4B,UACtCJ,EAAe5gB,iBAAiB,QAAS/X,KAAKg5B,YAChD,CAEAH,eAAAA,CAAgBI,GACd,GAA4B,IAAxBA,EAAax2B,OACf,OAGF,MAAM81B,SAAEA,EAAQ1gB,SAAEA,GAAa7X,KAEzBk5B,EAAkBnB,IACtB,MAAMza,KAAEA,GAASya,EACX/e,EACiB,OAArB+e,EAAY32B,MAAiB22B,EAAYrW,cACrCqW,EAAYrW,cACZqW,EAAY/e,KAEZ3Z,EAAUwY,EAAS+D,gBACvB5C,EACAhZ,KAAK04B,gBACLpb,GAGI2G,EDuBsBkV,GAChCxZ,YACAoY,cACAld,cACAsR,gBAEA,OAAQ4L,EAAY32B,MAClB,IAAK,WACH,OAAO,IAAI42B,GAAaD,EAAald,GAEvC,IAAK,cACH,OAAO,IAAIid,GAAgBC,EAAald,GAE1C,IAAK,KACH,OAAO,IAAIod,GAAeF,EAAald,GAEzC,IAAK,MACH,OAAO,IAAIqd,GAAgB,CACzBvY,YACAoY,cACAld,cACAsR,gBC5CagN,CAAmB,CAChCxZ,UAAW3f,KAAK2f,UAChBoY,cACAld,YAAa7a,KAAK04B,gBAClBvM,UAAWnsB,KAAKmsB,YAElBnsB,KAAKiwB,QAAQ3iB,KAAK2W,GAElBjkB,KAAKo5B,UAAU,YAAa/5B,EAAS4kB,IAGvC,GAAIsU,EACFU,EAAahjB,QAASW,IACpBsiB,EAAetiB,GACf5W,KAAK04B,iBAAmB,QAErB,CACL,MAAMX,EAAckB,EAAa,GAE7BlB,GACFmB,EAAenB,EAEnB,CACF,CAEAe,aAAAA,GACE,IAAK94B,KAAKw4B,gBACR,OAK6B,IAFPx4B,KAAKiwB,QAAQja,OAAOkC,GAAKlD,QAAQkD,IAErCzV,OAClBzC,KAAK6X,SAAS6E,iBAEd1c,KAAK6X,SAAS2E,gBAElB,CAEA4c,SAAAA,CAAUC,EAAmBh6B,EAAsB4kB,GAC7CjkB,KAAKq4B,cACPr4B,KAAKq4B,aAAaiB,KAAKD,EAAW,CAChCh6B,UACAua,UAAW5Z,KAAK4Z,UAChBvD,SAAU4N,EAAOjL,KACjBugB,cAAev5B,KAAKw5B,mBACpBvV,UAGN,CAEAwV,gBAAAA,CAAiBpjB,GACf,OAAOrW,KAAKiwB,QAAQyJ,KAAKzV,GAAUA,EAAOjL,OAAS3C,EACrD,CAEAmjB,gBAAAA,GACE,OAAO1f,EACL9Z,KAAK+Z,M5B3JTH,E4B4JyB5Z,KAAK4Z,U5B3J9BlP,E4B2JyC1K,KAAK0K,O5B1JnC,GAAGmP,EAA0BD,EAAWlP,e4B2J/C1K,KAAK0K,Q5B9JyBivB,IAClC/f,EACAlP,C4B8JA,CAEAkvB,gBAAAA,CAAiB/e,GACf,OAAO7a,KAAKiwB,QAAQyJ,KAAKzV,GAAUA,EAAOpJ,cAAgBA,EAC5D,CAEA,kBAAMgf,CAAa5V,GACjBjkB,KAAK6X,SAASqE,cAAc+H,EAAOpJ,mBAC7BoJ,EAAOlF,QACb/e,KAAK85B,qBAAqB7V,EAC5B,CAEA+U,YAAe9gB,IACb,MAAM6hB,EAAS7hB,EAAE6hB,OAEXC,EAAYA,KAChB,MAAMC,EAAYF,EAAOG,aAAa,cAEtC,IAAKD,EACH,OAGF,MAAMpf,EAAciX,SAASmI,EAAW,IACxC,OAAOj6B,KAAK45B,iBAAiB/e,IAG/B,GACEkf,EAAO/hB,UAAUnN,SAAS,gBACzBkvB,EAAO/hB,UAAUnN,SAAS,gBAC3B,CACAqN,EAAEC,iBAEF,MAAM8L,EAAS+V,IAEX/V,GACGjkB,KAAKm6B,qBAAqBlW,EAEnC,MAAO,GAAI8V,EAAO/hB,UAAUnN,SAAS,cAAe,CAClDqN,EAAEC,iBAEF,MAAM8L,EAAS+V,IAEX/V,GACGjkB,KAAK65B,aAAa5V,EAE3B,MAAO,GAAI8V,EAAO/hB,UAAUnN,SAAS,gBAAiB,CACpDqN,EAAEC,iBAEF,MAAM8L,EAAS+V,IAEQ,SAAnB/V,GAAQnF,QAAqB9e,KAAKo4B,UAAUgC,SAC9Cp6B,KAAKo4B,UAAUgC,QAAQ,CACrBxgB,UAAW5Z,KAAK4Z,UAChBvD,SAAU4N,EAAOjL,KACjByI,GAAIwC,EAAO1C,QACXngB,KAAM6iB,EAAO7iB,MAGnB,GAGFkhB,YAAcA,CAAC2B,EAAoB/K,KACjClZ,KAAK6X,SAASiF,SAASmH,EAAOpJ,aAC9BoJ,EAAOnF,OAAS,QAEhB,MAAMsB,QAAEA,GAAYpgB,KAAKo4B,UAErBhY,GACE6D,aAAkBkT,IACpB/W,EAAQlH,EAAO+K,IAKrBoW,mBAAsB7iB,IACpBxX,KAAK6X,SAASoB,qBAAqBzB,IAGrC+f,eAAiBA,CACftT,EACA2T,EACAtG,KAEA,MAAMrT,GAAe2Z,EAAgBtG,EAAc,KAAKvT,QAAQ,GAEhE/d,KAAK6X,SAASmG,eAAeiG,EAAOpJ,YAAaoD,GAEjD,MAAMqC,WAAEA,GAAetgB,KAAKo4B,UAExB9X,GACE2D,aAAkBkT,IACpB7W,EAAWsX,EAAetG,EAAYrN,IAK5CqW,cAAiBrW,IACf,MAAMpM,SAAEA,GAAa7X,KAErBA,KAAKu6B,yBAEL1iB,EAASkE,aACTlE,EAASiE,WAAWmI,EAAOpJ,YAAaoJ,EAAOtC,WAC/CsC,EAAOnF,OAAS,OAEhB,MAAMyB,UAAEA,GAAcvgB,KAAKo4B,UAErB/4B,EAAUW,KAAK6X,SAASoE,YAAYgI,EAAOpJ,aAE7Cxb,GACFW,KAAKo5B,UAAU,iBAAkB/5B,EAAS4kB,GAGxC1D,GAA6B,QAAhB0D,EAAO7iB,MACtBmf,EAAU0D,IAId2U,YAAAA,CAAajhB,EAAoB9B,GAC/B,IAAI6B,EAAS,CACXC,YACA9B,cACA+B,cAAe5X,KAAKoZ,YACpBvB,SAAU7X,KAAK6X,UAEnB,CAEAkhB,SAAY7gB,IACV,MAAMV,EAASU,EAAE6hB,OAA4BviB,OAAU,GACjDsB,EAAwB,GACxBC,EAAuB,GAE7B,IAAK,MAAMnC,KAAQY,EACbxX,KAAK8X,kBAAkB1B,WAAWQ,EAAKoC,MACzCF,EAAcxL,KAAKsJ,GAEnBmC,EAAazL,KAAKsJ,GAItB5W,KAAKq6B,mBAAmB,IAAIthB,IACvB/Y,KAAKoZ,YAAY,IAAIN,IAE1B9Y,KAAK6X,SAASkE,cAGhB,0BAAMoe,CAAqBlW,GACzB,MAAM5kB,EAAUW,KAAK6X,SAASoE,YAAYgI,EAAOpJ,aAMjD,GAJIxb,GACFW,KAAKo5B,UAAU,eAAgB/5B,EAAS4kB,GAGpB,cAAlBA,EAAOnF,OACT9e,KAAK6X,SAASqE,cAAc+H,EAAOpJ,mBAC7BoJ,EAAOlF,aACR,GAAsB,SAAlBkF,EAAOnF,OAAmB,CACnC9e,KAAK6X,SAASwE,cAAc4H,EAAOpJ,aAEnC,UACQoJ,EAAOjF,QACf,CAAE,MAEA,YADAhf,KAAK6X,SAAS8E,gBAAgBsH,EAAOpJ,YAEvC,CACF,CAEA7a,KAAK85B,qBAAqB7V,GAC1BjkB,KAAKu6B,wBACP,CAEAT,oBAAAA,CAAqB7V,GACnBjkB,KAAK6X,SAASmE,WAAWiI,EAAOpJ,aAEhC,MAAM3O,EAAQlM,KAAKiwB,QAAQxe,QAAQwS,GAE/B/X,GAAS,GACXlM,KAAKiwB,QAAQzQ,OAAOtT,EAAO,GAG7BlM,KAAK84B,gBAEL,MAAM0B,SAAEA,GAAax6B,KAAKo4B,UAEtBoC,GACFA,EAASvW,EAEb,CAEAsW,sBAAAA,GACE,MAAMpwB,EAAQ2P,EACZ9Z,KAAK+Z,KACLG,EAAoBla,KAAK4Z,UAAW5Z,KAAK0K,QACzC1K,KAAK0K,QAEP,IAAKP,EACH,OAGF,MAAMswB,EAAkCz6B,KAAKiwB,QAAQzuB,IAAIyiB,GACvDA,EAAOzC,kBAGTrX,EAAM3J,MAAQ2hB,KAAKC,UAAUqY,EAC/B,CAEA,gBAAMC,CAAW9jB,GACf,MAyBMgD,UAAEA,EAASwd,OAAEA,EAAMvf,SAAEA,EAAQsU,UAAEA,GAAcnsB,KAC7CqW,EAAWO,EAAKoC,KAChB2hB,EAAiB36B,KAAKy5B,iBAAiBpjB,GACvCukB,EAAiBD,EACnBA,EAAe9f,YACf7a,KAAK04B,gBAEJiC,IACH36B,KAAK04B,iBAAmB,GAGtBiC,SACI36B,KAAKm6B,qBAAqBQ,GAGlC,MAAM1W,EAxCerC,MACnB,MAAMjC,UAAEA,EAASE,YAAEA,GAAgB7f,KAEnC,OAAmB,MAAf6f,EACK,IAAIJ,EAAS,CAClBE,YACAC,SAAUuM,EACVvV,OACAiJ,cACAhF,YAAa+f,IAGR,IAAIzD,GAAU,CACnBrU,UAAW9iB,KAAK8iB,UAChBnD,UAAW3f,KAAK2f,UAChB/F,YACAhD,OACAwgB,SACAlK,YAAaltB,KAAKktB,YAClBrS,YAAa+f,EACbzO,eAoBSvK,GAEfqC,EAAO7D,QAAWlH,IAChBlZ,KAAKsiB,YAAY2B,EAAQ/K,IAE3B+K,EAAO3D,WAAa,CAACsX,EAAetG,KAClCtxB,KAAKu3B,eAAetT,EAAQ2T,EAAetG,IAE7CrN,EAAO1D,UAAY,KACjBvgB,KAAKs6B,cAAcrW,IAErBA,EAAO9X,QAEPnM,KAAKiwB,QAAQ3iB,KAAK2W,GAElB,MAAM5kB,EAAUwY,EAAS8C,aAAatE,EAAUukB,GAChD56B,KAAKo5B,UAAU,YAAa/5B,EAAS4kB,EACvC,CAEA7K,YAAc3C,UACZ,GAAqB,IAAjBe,EAAM/U,OAAV,CAIA,GAAKzC,KAAKu4B,SAYR,IAAK,MAAM3hB,KAAQY,QACXxX,KAAK06B,WAAW9jB,OAbN,CAClB,IAAK,MAAMqN,KAAUjkB,KAAKiwB,QACxBjwB,KAAK6X,SAASmE,WAAWiI,EAAOpJ,aAGlC7a,KAAKiwB,QAAU,GACf,MAAMrZ,EAAOY,EAAM,GAEfZ,SACI5W,KAAK06B,WAAW9jB,EAE1B,CAMA5W,KAAK84B,eAnBL,GChdJ,MAAM+B,GAAmBA,CAAC9gB,EAAenP,EAAmB,MAC1D,MAQMkwB,EAAYA,IAAqBlwB,EAAQF,QAAU,KAEnDqwB,EAAiBnhB,GACrBO,EAA8BJ,EAAMH,EAAWkhB,KAc3C3O,EAAY4O,EAAc,cAC1B3D,EAAS2D,EAAc,WACvBlb,EAAckb,EAAc,iBAC5B1gB,EAAezP,EAAQyP,eAAgB,EACvC3P,EAASowB,IACTnb,EAAY7F,EAAUC,EAAM,sBAAuB,OAAOvZ,MAEhE,IAAKmf,EACH,MAAMxd,MAAM,wBAGTi1B,GAAWjL,GAIhBpS,EAAKihB,iBAAiB,iBAAiB/kB,QAAQglB,IAC7C,MAAMtjB,EAAYsjB,EAAYhhB,cAAc,kBAE5C,IAAKtC,EACH,OAGF,MAAMxN,EAAQwN,EAAUsC,cAAgC,oBAExD,IAAM9P,IAjDeyP,KAChBhP,EAAQF,QAINkP,EAAU7X,WAAW,GAAG6I,EAAQF,WA4CxBwwB,CAAc/wB,EAAM6O,MACjC,OAGF,MAAMY,EAAYzP,EAAM6O,MAClBuf,SAAEA,GAAapuB,EACfmuB,EA1CiB1e,KACvB,MAAMyI,EAAO0Y,EAAc7gB,EAAoBN,EAAWkhB,MAE1D,OAAKzY,EAIGF,KAAK9T,MAAMgU,GAAoCrM,OACrDY,GAAQA,EAAKxV,MAJN,IAsCO+5B,CAAgBvhB,GAC1BwhB,EAAmBzjB,EAAUuiB,aAAa,qBAC1C5f,EAA6B8gB,EAC9BjZ,KAAK9T,MAAM+sB,GACZ,CAAA,EACE5C,KAAgD,IAA5B5tB,EAAQ4tB,iBAElC,IAAIL,GAAU,CACZC,UAAWxtB,EAAQwtB,WAAa,CAAA,EAChCtV,UAAWlY,EAAQkY,WAAa,QAChCnD,YACA0Y,aAAcztB,EAAQytB,aACtBze,YACAG,OACAqd,SACAkB,UACAnuB,QACAouB,WACAj5B,OAAQqY,EACRjN,SACAwiB,YAAatiB,EAAQsiB,aAAe,KACpCrN,YAAaA,GAAe,KAC5BxF,eACAme,kBACAle,eACA6R,iBC/FN9B,OAAOgR,kB3CamBA,KACxB,MAAMR,EAAmBxQ,OAAOwQ,iBANlB93B,SASZqG,MAAMmd,KAAKtL,SAAS+f,iBAAiB,kBAAkBx5B,IAAIpC,GAR7DgK,MAAMmd,KAAK,IAAI7kB,IAAIqB,GAAQA,WAUrBkT,QAAQ4kB,I2ClBhBxQ,OAAOiR,YCDaA,CAClBvhB,EACAwhB,KAEA,IAAI3wB,EAGFA,EAD0B,iBAAjB2wB,EACC,CAAE7wB,OAAQ6wB,GAEVA,EAGZ,MAAM7wB,EAASE,EAAQF,QAAU,OAE3B8wB,EAAkBrhB,EACtBJ,EACA,cACArP,GAGF,IAAK8wB,EACH,OAGF,MAAMC,EAAY3J,SAAS0J,EAAiB,IAE5C,IAAK,IAAI3tB,EAAI,EAAGA,EAAI4tB,EAAW5tB,GAAK,EAAG,CACrC,MAAM6tB,EAAgB/hB,EAAuB9L,EAAE6N,WAAY,MAC3Dmf,GAAiB9gB,EAAM,IAClBnP,EACHF,OAAQ,GAAGA,KAAUgxB,KAEzB,GD9BFrR,OAAOwQ,iBAAmBA","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,12,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0de5430c..43ee4dc6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -52,9 +52,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", - "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", "dev": true, "license": "MIT" }, @@ -119,22 +119,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -150,14 +150,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -197,18 +197,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "engines": { @@ -292,15 +292,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -413,42 +413,42 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -525,14 +525,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -737,13 +737,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -754,9 +754,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", - "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", + "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -765,7 +765,7 @@ "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1295,9 +1295,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", - "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", + "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", "dev": true, "license": "MIT", "dependencies": { @@ -1344,9 +1344,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz", - "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1533,9 +1533,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", - "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", "dev": true, "license": "MIT", "dependencies": { @@ -1547,7 +1547,7 @@ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", @@ -1558,8 +1558,8 @@ "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.0", "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", "@babel/plugin-transform-computed-properties": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-dotall-regex": "^7.27.1", @@ -1591,7 +1591,7 @@ "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regenerator": "^7.28.3", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1653,9 +1653,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1677,18 +1677,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.2", "debug": "^4.3.1" }, "engines": { @@ -1696,9 +1696,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", - "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1872,21 +1872,21 @@ } }, "node_modules/@emnapi/core": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz", - "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.3", + "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", - "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", "dev": true, "license": "MIT", "optional": true, @@ -1895,9 +1895,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz", - "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", "dev": true, "license": "MIT", "optional": true, @@ -1906,9 +1906,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", - "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", "cpu": [ "ppc64" ], @@ -1923,9 +1923,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", - "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", "cpu": [ "arm" ], @@ -1940,9 +1940,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", - "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", "cpu": [ "arm64" ], @@ -1957,9 +1957,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", - "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", "cpu": [ "x64" ], @@ -1974,9 +1974,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", - "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", "cpu": [ "arm64" ], @@ -1991,9 +1991,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", - "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", "cpu": [ "x64" ], @@ -2008,9 +2008,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", - "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", "cpu": [ "arm64" ], @@ -2025,9 +2025,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", - "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", "cpu": [ "x64" ], @@ -2042,9 +2042,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", - "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", "cpu": [ "arm" ], @@ -2059,9 +2059,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", - "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", "cpu": [ "arm64" ], @@ -2076,9 +2076,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", - "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", "cpu": [ "ia32" ], @@ -2093,9 +2093,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", - "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", "cpu": [ "loong64" ], @@ -2110,9 +2110,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", - "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", "cpu": [ "mips64el" ], @@ -2127,9 +2127,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", - "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", "cpu": [ "ppc64" ], @@ -2144,9 +2144,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", - "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", "cpu": [ "riscv64" ], @@ -2161,9 +2161,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", - "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", "cpu": [ "s390x" ], @@ -2178,9 +2178,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", - "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", "cpu": [ "x64" ], @@ -2195,9 +2195,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", - "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", "cpu": [ "arm64" ], @@ -2212,9 +2212,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", - "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", "cpu": [ "x64" ], @@ -2229,9 +2229,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", - "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", "cpu": [ "arm64" ], @@ -2246,9 +2246,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", - "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", "cpu": [ "x64" ], @@ -2263,9 +2263,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", - "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", "cpu": [ "arm64" ], @@ -2280,9 +2280,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", - "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", "cpu": [ "x64" ], @@ -2297,9 +2297,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", - "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", "cpu": [ "arm64" ], @@ -2314,9 +2314,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", - "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", "cpu": [ "ia32" ], @@ -2331,9 +2331,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", - "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", "cpu": [ "x64" ], @@ -2416,9 +2416,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2426,9 +2426,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2507,9 +2507,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", - "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", "dev": true, "license": "MIT", "engines": { @@ -2530,13 +2530,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz", - "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -2610,14 +2610,14 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.13.tgz", - "integrity": "sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==", + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", + "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7" + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" }, "engines": { "node": ">=18" @@ -2632,14 +2632,14 @@ } }, "node_modules/@inquirer/core": { - "version": "10.1.14", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz", - "integrity": "sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==", + "version": "10.1.15", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz", + "integrity": "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", @@ -2660,9 +2660,9 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", - "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", + "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", "dev": true, "license": "MIT", "engines": { @@ -2670,9 +2670,9 @@ } }, "node_modules/@inquirer/type": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", - "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", + "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", "dev": true, "license": "MIT", "engines": { @@ -2764,9 +2764,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -2785,9 +2785,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -2796,16 +2796,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2814,9 +2814,9 @@ } }, "node_modules/@mswjs/interceptors": { - "version": "0.39.3", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.3.tgz", - "integrity": "sha512-9bw/wBL7pblsnOCIqvn1788S9o4h+cC5HWXg0Xhh0dOzsZ53IyfmBM+FYqpDDPbm0xjCqEqvCITloF3Dm4TXRQ==", + "version": "0.39.6", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.6.tgz", + "integrity": "sha512-bndDP83naYYkfayr/qhBHMhk0YGwS1iv6vaEGcr0SQbO0IZtbOPqjKjds/WcG+bJA+1T5vCx6kprKOzn5Bg+Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -3371,9 +3371,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", - "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", "cpu": [ "arm" ], @@ -3385,9 +3385,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", - "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", "cpu": [ "arm64" ], @@ -3399,9 +3399,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", - "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", "cpu": [ "arm64" ], @@ -3413,9 +3413,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", - "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", "cpu": [ "x64" ], @@ -3427,9 +3427,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", - "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", "cpu": [ "arm64" ], @@ -3441,9 +3441,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", - "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", "cpu": [ "x64" ], @@ -3455,9 +3455,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", - "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", "cpu": [ "arm" ], @@ -3469,9 +3469,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", - "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", "cpu": [ "arm" ], @@ -3483,9 +3483,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", - "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", "cpu": [ "arm64" ], @@ -3497,9 +3497,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", - "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", "cpu": [ "arm64" ], @@ -3511,9 +3511,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", - "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", "cpu": [ "loong64" ], @@ -3524,10 +3524,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", - "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", "cpu": [ "ppc64" ], @@ -3539,9 +3539,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", - "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", "cpu": [ "riscv64" ], @@ -3553,9 +3553,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", - "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", "cpu": [ "riscv64" ], @@ -3567,9 +3567,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", - "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", "cpu": [ "s390x" ], @@ -3581,9 +3581,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", - "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", "cpu": [ "x64" ], @@ -3595,9 +3595,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", - "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", "cpu": [ "x64" ], @@ -3609,9 +3609,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", - "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", "cpu": [ "arm64" ], @@ -3623,9 +3623,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", - "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", "cpu": [ "ia32" ], @@ -3637,9 +3637,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", - "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", "cpu": [ "x64" ], @@ -3658,9 +3658,9 @@ "license": "MIT" }, "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", "dependencies": { @@ -3668,9 +3668,9 @@ "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", - "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", + "picocolors": "1.1.1", "pretty-format": "^27.0.2" }, "engines": { @@ -3678,18 +3678,17 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", - "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.7.0.tgz", + "integrity": "sha512-RI2e97YZ7MRa+vxP4UUnMuMFL2buSsf0ollxUbTgrbPLKhMn8KVTx7raS6DYjC7v1NDVrioOvaShxsguLNISCA==", "dev": true, "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", - "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", + "picocolors": "^1.1.1", "redent": "^3.0.0" }, "engines": { @@ -3698,20 +3697,6 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", @@ -3790,13 +3775,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz", - "integrity": "sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", + "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.8.0" + "undici-types": "~7.10.0" } }, "node_modules/@types/resolve": { @@ -3821,17 +3806,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.37.0.tgz", - "integrity": "sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz", + "integrity": "sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.37.0", - "@typescript-eslint/type-utils": "8.37.0", - "@typescript-eslint/utils": "8.37.0", - "@typescript-eslint/visitor-keys": "8.37.0", + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/type-utils": "8.39.1", + "@typescript-eslint/utils": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -3845,9 +3830,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.37.0", + "@typescript-eslint/parser": "^8.39.1", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -3861,16 +3846,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.37.0.tgz", - "integrity": "sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.1.tgz", + "integrity": "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.37.0", - "@typescript-eslint/types": "8.37.0", - "@typescript-eslint/typescript-estree": "8.37.0", - "@typescript-eslint/visitor-keys": "8.37.0", + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4" }, "engines": { @@ -3882,18 +3867,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.37.0.tgz", - "integrity": "sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.1.tgz", + "integrity": "sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.37.0", - "@typescript-eslint/types": "^8.37.0", + "@typescript-eslint/tsconfig-utils": "^8.39.1", + "@typescript-eslint/types": "^8.39.1", "debug": "^4.3.4" }, "engines": { @@ -3904,18 +3889,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.37.0.tgz", - "integrity": "sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz", + "integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.37.0", - "@typescript-eslint/visitor-keys": "8.37.0" + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3926,9 +3911,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.37.0.tgz", - "integrity": "sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz", + "integrity": "sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==", "dev": true, "license": "MIT", "engines": { @@ -3939,19 +3924,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.37.0.tgz", - "integrity": "sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz", + "integrity": "sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.37.0", - "@typescript-eslint/typescript-estree": "8.37.0", - "@typescript-eslint/utils": "8.37.0", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/utils": "8.39.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -3964,13 +3949,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.37.0.tgz", - "integrity": "sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", + "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", "dev": true, "license": "MIT", "engines": { @@ -3982,16 +3967,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.37.0.tgz", - "integrity": "sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz", + "integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.37.0", - "@typescript-eslint/tsconfig-utils": "8.37.0", - "@typescript-eslint/types": "8.37.0", - "@typescript-eslint/visitor-keys": "8.37.0", + "@typescript-eslint/project-service": "8.39.1", + "@typescript-eslint/tsconfig-utils": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/visitor-keys": "8.39.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4007,7 +3992,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -4024,16 +4009,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.37.0.tgz", - "integrity": "sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz", + "integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.37.0", - "@typescript-eslint/types": "8.37.0", - "@typescript-eslint/typescript-estree": "8.37.0" + "@typescript-eslint/scope-manager": "8.39.1", + "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4044,17 +4029,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.37.0.tgz", - "integrity": "sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz", + "integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.37.0", + "@typescript-eslint/types": "8.39.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4992,9 +4977,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", "dev": true, "funding": [ { @@ -5012,8 +4997,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -5111,9 +5096,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001735", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", + "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", "dev": true, "funding": [ { @@ -5337,9 +5322,9 @@ } }, "node_modules/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz", + "integrity": "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -5348,9 +5333,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", - "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.0.tgz", + "integrity": "sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==", "dev": true, "license": "MIT", "dependencies": { @@ -5626,9 +5611,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.187", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.187.tgz", - "integrity": "sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==", + "version": "1.5.202", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.202.tgz", + "integrity": "sha512-NxbYjRmiHcHXV1Ws3fWUW+SLb62isauajk45LUJ/HgIOkUA7jLZu/X2Iif+X9FBNK8QkF9Zb4Q2mcwXCcY30mg==", "dev": true, "license": "ISC" }, @@ -5837,9 +5822,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", - "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5850,32 +5835,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.6", - "@esbuild/android-arm": "0.25.6", - "@esbuild/android-arm64": "0.25.6", - "@esbuild/android-x64": "0.25.6", - "@esbuild/darwin-arm64": "0.25.6", - "@esbuild/darwin-x64": "0.25.6", - "@esbuild/freebsd-arm64": "0.25.6", - "@esbuild/freebsd-x64": "0.25.6", - "@esbuild/linux-arm": "0.25.6", - "@esbuild/linux-arm64": "0.25.6", - "@esbuild/linux-ia32": "0.25.6", - "@esbuild/linux-loong64": "0.25.6", - "@esbuild/linux-mips64el": "0.25.6", - "@esbuild/linux-ppc64": "0.25.6", - "@esbuild/linux-riscv64": "0.25.6", - "@esbuild/linux-s390x": "0.25.6", - "@esbuild/linux-x64": "0.25.6", - "@esbuild/netbsd-arm64": "0.25.6", - "@esbuild/netbsd-x64": "0.25.6", - "@esbuild/openbsd-arm64": "0.25.6", - "@esbuild/openbsd-x64": "0.25.6", - "@esbuild/openharmony-arm64": "0.25.6", - "@esbuild/sunos-x64": "0.25.6", - "@esbuild/win32-arm64": "0.25.6", - "@esbuild/win32-ia32": "0.25.6", - "@esbuild/win32-x64": "0.25.6" + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "node_modules/escalade": { @@ -5908,20 +5893,20 @@ } }, "node_modules/eslint": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", - "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.31.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -6547,11 +6532,14 @@ } }, "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -7778,9 +7766,9 @@ } }, "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", "license": "BSD-3-Clause" }, "node_modules/js-tokens": { @@ -7944,13 +7932,6 @@ "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash._baseiteratee": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash._baseiteratee/-/lodash._baseiteratee-4.7.0.tgz", @@ -8041,9 +8022,9 @@ } }, "node_modules/loupe": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", - "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz", + "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==", "dev": true, "license": "MIT" }, @@ -8234,9 +8215,9 @@ "license": "MIT" }, "node_modules/msw": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.10.4.tgz", - "integrity": "sha512-6R1or/qyele7q3RyPwNuvc0IxO8L8/Aim6Sz5ncXEgcWUNxSKE+udriTOWHtpMwmfkLYlacA2y7TIx4cL5lgHA==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.10.5.tgz", + "integrity": "sha512-0EsQCrCI1HbhpBWd89DvmxY6plmvrM96b0sCIztnvcNHQbXn5vqwm1KlXslo6u4wN9LFGLC1WFjjgljcQhe40A==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -8308,9 +8289,9 @@ } }, "node_modules/napi-postinstall": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz", - "integrity": "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", + "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", "dev": true, "license": "MIT", "bin": { @@ -8356,9 +8337,9 @@ "license": "MIT" }, "node_modules/nwsapi": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", "dev": true, "license": "MIT" }, @@ -9125,9 +9106,9 @@ } }, "node_modules/rollup": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", - "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9141,26 +9122,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", "fsevents": "~2.3.2" } }, @@ -9290,9 +9271,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", + "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10219,9 +10200,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10233,16 +10214,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.37.0.tgz", - "integrity": "sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==", + "version": "8.39.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.1.tgz", + "integrity": "sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.37.0", - "@typescript-eslint/parser": "8.37.0", - "@typescript-eslint/typescript-estree": "8.37.0", - "@typescript-eslint/utils": "8.37.0" + "@typescript-eslint/eslint-plugin": "8.39.1", + "@typescript-eslint/parser": "8.39.1", + "@typescript-eslint/typescript-estree": "8.39.1", + "@typescript-eslint/utils": "8.39.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10253,7 +10234,7 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/unbox-primitive": { @@ -10276,9 +10257,9 @@ } }, "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "dev": true, "license": "MIT" }, @@ -10432,17 +10413,17 @@ } }, "node_modules/vite": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.5.tgz", - "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.2.tgz", + "integrity": "sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", - "rollup": "^4.40.0", + "rollup": "^4.43.0", "tinyglobby": "^0.2.14" }, "bin": {