it-multipart
Version:
Async iterable http multipart message parser
5 lines (4 loc) • 4.13 kB
JavaScript
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.ItMultipart = factory()}(typeof self !== 'undefined' ? self : this, function () {
"use strict";var ItMultipart=(()=>{var j=Object.create;var c=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var q=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),B=(t,e)=>{for(var r in e)c(t,r,{get:e[r],enumerable:!0})},v=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of I(e))!T.call(t,u)&&u!==r&&c(t,u,{get:()=>e[u],enumerable:!(n=A(e,u))||n.enumerable});return t};var D=(t,e,r)=>(r=t!=null?j(R(t)):{},v(e||!t||!t.__esModule?c(r,"default",{value:t,enumerable:!0}):r,t)),O=t=>v(c({},"__esModule",{value:!0}),t);var z=q(()=>{});var V={};B(V,{default:()=>k});var L=D(z(),1);function p(){let t={};return t.promise=new Promise((e,r)=>{t.resolve=e,t.reject=r}),t}var b=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},a=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new b(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let r=this.head;this.head=r.next=new b(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let r=this.tail.next;this.tail.next=null,this.tail=r,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var w=class extends Error{type;code;constructor(e,r){super(e??"The operation was aborted"),this.type="aborted",this.code=r??"ABORT_ERR"}};function x(t={}){return U(r=>{let n=r.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},t)}function U(t,e){e=e??{};let r=e.onEnd,n=new a,u,s,f,m=p(),N=async()=>{try{return n.isEmpty()?f?{done:!0}:await new Promise((i,o)=>{s=d=>{s=null,n.push(d);try{i(t(n))}catch(h){o(h)}return u}}):t(n)}finally{n.isEmpty()&&queueMicrotask(()=>{m.resolve(),m=p()})}},E=i=>s!=null?s(i):(n.push(i),u),M=i=>(n=new a,s!=null?s({error:i}):(n.push({error:i}),u)),g=i=>{if(f)return u;if(e?.objectMode!==!0&&i?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return E({done:!1,value:i})},y=i=>f?u:(f=!0,i!=null?M(i):E({done:!0})),P=()=>(n=new a,y(),{done:!0}),S=i=>(y(i),{done:!0});if(u={[Symbol.asyncIterator](){return this},next:N,return:P,throw:S,push:g,end:y,get readableLength(){return n.size},onEmpty:async i=>{let o=i?.signal;if(o?.throwIfAborted(),n.isEmpty())return;let d,h;o!=null&&(d=new Promise((C,_)=>{h=()=>{_(new w)},o.addEventListener("abort",h)}));try{await Promise.race([m.promise,d])}finally{h!=null&&o!=null&&o?.removeEventListener("abort",h)}}},r==null)return u;let l=u;return u={[Symbol.asyncIterator](){return this},next(){return l.next()},throw(i){return l.throw(i),r!=null&&(r(i),r=void 0),{done:!0}},return(){return l.return(),r!=null&&(r(),r=void 0),{done:!0}},push:g,end(i){return l.end(i),r!=null&&(r(i),r=void 0),u},get readableLength(){return l.readableLength},onEmpty:i=>l.onEmpty(i)},u}async function*k(t){let e=x({objectMode:!0});if(t==null){e.end(new Error("request missing")),yield*e;return}let r=(0,L.default)({keepExtensions:!0});r.parse(t,n=>{e.end(n)}),r.onPart=n=>{let u=x();n.on("data",s=>{u.push(s)}),n.on("end",()=>{u.end()}),n.on("error",s=>{u.end(s)}),e.push({headers:n.headers,body:u})},yield*e}return O(V);})();
return ItMultipart}));
//# sourceMappingURL=index.min.js.map