@set2333/upload-script-helpers
Version:
Helper library for upload scripts
3 lines (2 loc) • 4.79 kB
JavaScript
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("fs");require("path");const F=require("./index-4082283f.cjs");require("tls");require("net");require("events");require("util");require("buffer");require("stream");require("string_decoder");require("crypto");require("url");require("http");require("https");require("zlib");require("dns");require("os");require("child_process");let u=0;const t={START_BOUNDARY:u++,HEADER_FIELD_START:u++,HEADER_FIELD:u++,HEADER_VALUE_START:u++,HEADER_VALUE:u++,HEADER_VALUE_ALMOST_DONE:u++,HEADERS_ALMOST_DONE:u++,PART_DATA_START:u++,PART_DATA:u++,END:u++};let k=1;const T={PART_BOUNDARY:k,LAST_BOUNDARY:k*=2},O=10,m=13,U=32,g=45,w=58,q=97,B=122,V=R=>R|32,_=()=>{};class Y{constructor(a){this.index=0,this.flags=0,this.onHeaderEnd=_,this.onHeaderField=_,this.onHeadersEnd=_,this.onHeaderValue=_,this.onPartBegin=_,this.onPartData=_,this.onPartEnd=_,this.boundaryChars={},a=`\r
--`+a;const r=new Uint8Array(a.length);for(let n=0;n<a.length;n++)r[n]=a.charCodeAt(n),this.boundaryChars[r[n]]=!0;this.boundary=r,this.lookbehind=new Uint8Array(this.boundary.length+8),this.state=t.START_BOUNDARY}write(a){let r=0;const n=a.length;let d=this.index,{lookbehind:A,boundary:E,boundaryChars:H,index:e,state:o,flags:l}=this;const b=this.boundary.length,p=b-1,y=a.length;let i,S;const h=c=>{this[c+"Mark"]=r},s=c=>{delete this[c+"Mark"]},D=(c,P,f,N)=>{(P===void 0||P!==f)&&this[c](N&&N.subarray(P,f))},L=(c,P)=>{const f=c+"Mark";f in this&&(P?(D(c,this[f],r,a),delete this[f]):(D(c,this[f],a.length,a),this[f]=0))};for(r=0;r<n;r++)switch(i=a[r],o){case t.START_BOUNDARY:if(e===E.length-2){if(i===g)l|=T.LAST_BOUNDARY;else if(i!==m)return;e++;break}else if(e-1===E.length-2){if(l&T.LAST_BOUNDARY&&i===g)o=t.END,l=0;else if(!(l&T.LAST_BOUNDARY)&&i===O)e=0,D("onPartBegin"),o=t.HEADER_FIELD_START;else return;break}i!==E[e+2]&&(e=-2),i===E[e+2]&&e++;break;case t.HEADER_FIELD_START:o=t.HEADER_FIELD,h("onHeaderField"),e=0;case t.HEADER_FIELD:if(i===m){s("onHeaderField"),o=t.HEADERS_ALMOST_DONE;break}if(e++,i===g)break;if(i===w){if(e===1)return;L("onHeaderField",!0),o=t.HEADER_VALUE_START;break}if(S=V(i),S<q||S>B)return;break;case t.HEADER_VALUE_START:if(i===U)break;h("onHeaderValue"),o=t.HEADER_VALUE;case t.HEADER_VALUE:i===m&&(L("onHeaderValue",!0),D("onHeaderEnd"),o=t.HEADER_VALUE_ALMOST_DONE);break;case t.HEADER_VALUE_ALMOST_DONE:if(i!==O)return;o=t.HEADER_FIELD_START;break;case t.HEADERS_ALMOST_DONE:if(i!==O)return;D("onHeadersEnd"),o=t.PART_DATA_START;break;case t.PART_DATA_START:o=t.PART_DATA,h("onPartData");case t.PART_DATA:if(d=e,e===0){for(r+=p;r<y&&!(a[r]in H);)r+=b;r-=p,i=a[r]}if(e<E.length)E[e]===i?(e===0&&L("onPartData",!0),e++):e=0;else if(e===E.length)e++,i===m?l|=T.PART_BOUNDARY:i===g?l|=T.LAST_BOUNDARY:e=0;else if(e-1===E.length)if(l&T.PART_BOUNDARY){if(e=0,i===O){l&=~T.PART_BOUNDARY,D("onPartEnd"),D("onPartBegin"),o=t.HEADER_FIELD_START;break}}else l&T.LAST_BOUNDARY&&i===g?(D("onPartEnd"),o=t.END,l=0):e=0;if(e>0)A[e-1]=i;else if(d>0){const c=new Uint8Array(A.buffer,A.byteOffset,A.byteLength);D("onPartData",0,d,c),d=0,h("onPartData"),r--}break;case t.END:break;default:throw new Error(`Unexpected state entered: ${o}`)}L("onHeaderField"),L("onHeaderValue"),L("onPartData"),this.index=e,this.state=o,this.flags=l}end(){if(this.state===t.HEADER_FIELD_START&&this.index===0||this.state===t.PART_DATA&&this.index===this.boundary.length)this.onPartEnd();else if(this.state!==t.END)throw new Error("MultipartParser.end(): stream ended unexpectedly")}}function x(R){const a=R.match(/\bfilename=("(.*?)"|([^()<>@,;:\\"/[\]?={}\s\t]+))($|;\s)/i);if(!a)return;const r=a[2]||a[3]||"";let n=r.slice(r.lastIndexOf("\\")+1);return n=n.replace(/%22/g,'"'),n=n.replace(/&#(\d{4});/g,(d,A)=>String.fromCharCode(A)),n}async function C(R,a){if(!/multipart/i.test(a))throw new TypeError("Failed to fetch");const r=a.match(/boundary=(?:"([^"]+)"|([^;]+))/i);if(!r)throw new TypeError("no or bad content-type header, no multipart boundary");const n=new Y(r[1]||r[2]);let d,A,E,H,e,o;const l=[],b=new F.FormData,p=s=>{E+=h.decode(s,{stream:!0})},y=s=>{l.push(s)},i=()=>{const s=new F.File(l,o,{type:e});b.append(H,s)},S=()=>{b.append(H,E)},h=new TextDecoder("utf-8");h.decode(),n.onPartBegin=function(){n.onPartData=p,n.onPartEnd=S,d="",A="",E="",H="",e="",o=null,l.length=0},n.onHeaderField=function(s){d+=h.decode(s,{stream:!0})},n.onHeaderValue=function(s){A+=h.decode(s,{stream:!0})},n.onHeaderEnd=function(){if(A+=h.decode(),d=d.toLowerCase(),d==="content-disposition"){const s=A.match(/\bname=("([^"]*)"|([^()<>@,;:\\"/[\]?={}\s\t]+))/i);s&&(H=s[2]||s[3]||""),o=x(A),o&&(n.onPartData=y,n.onPartEnd=i)}else d==="content-type"&&(e=A);A="",d=""};for await(const s of R)n.write(s);return n.end(),b}exports.toFormData=C;
;