strong-tie/inbound-calls
0
1/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */2 3import C from 'fetch-blob'4import F from 'fetch-blob/file.js'5 6var {toStringTag:t,iterator:i,hasInstance:h}=Symbol,7r=Math.random,8m='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),9f=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new F([b],c,b):b]:[a,b+'']),10e=(c,f)=>(f?c:c.replace(/\r?\n|\r/g,'\r\n')).replace(/\n/g,'%0A').replace(/\r/g,'%0D').replace(/"/g,'%22'),11x=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}}12 13export const File = F14 15/** @type {typeof globalThis.FormData} */16export const FormData = class FormData {17#d=[];18constructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}19get [t]() {return 'FormData'}20[i](){return this.entries()}21static [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}22append(...a){x('append',arguments,2);this.#d.push(f(...a))}23delete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a)}24get(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}25getAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}26has(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}27forEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this)}28set(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)});c&&b.push(a);this.#d=b}29*entries(){yield*this.#d}30*keys(){for(var[a]of this)yield a}31*values(){for(var[,a]of this)yield a}}32 33/** @param {FormData} F */34export function formDataToBlob (F,B=C){35var b=`${r()}${r()}`.replace(/\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\r\nContent-Disposition: form-data; name="`36F.forEach((v,n)=>typeof v=='string'37?c.push(p+e(n)+`"\r\n\r\n${v.replace(/\r(?!\n)|(?<!\r)\n/g, '\r\n')}\r\n`)38:c.push(p+e(n)+`"; filename="${e(v.name, 1)}"\r\nContent-Type: ${v.type||"application/octet-stream"}\r\n\r\n`, v, '\r\n'))39c.push(`--${b}--`)40return new B(c,{type:"multipart/form-data; boundary="+b})}41 