streams-lib.js 126 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962
  1. /*
  2. * To the extent possible under law, the authors have dedicated all copyright
  3. * and related and neighboring rights to this software to the public
  4. * domain worldwide. This software is distributed without any warranty.
  5. *
  6. * You should have received a copy of the CC0 Public Domain Dedication along
  7. * with this software. If not, see https://creativecommons.org/publicdomain/zero/1.0/.
  8. */
  9. (function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap
  10. /******/ // The module cache
  11. /******/ var installedModules = {};
  12. /******/
  13. /******/ // The require function
  14. /******/ function __webpack_require__(moduleId) {
  15. /******/
  16. /******/ // Check if module is in cache
  17. /******/ if(installedModules[moduleId])
  18. /******/ return installedModules[moduleId].exports;
  19. /******/
  20. /******/ // Create a new module (and put it into the cache)
  21. /******/ var module = installedModules[moduleId] = {
  22. /******/ i: moduleId,
  23. /******/ l: false,
  24. /******/ exports: {}
  25. /******/ };
  26. /******/
  27. /******/ // Execute the module function
  28. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  29. /******/
  30. /******/ // Flag the module as loaded
  31. /******/ module.l = true;
  32. /******/
  33. /******/ // Return the exports of the module
  34. /******/ return module.exports;
  35. /******/ }
  36. /******/
  37. /******/
  38. /******/ // expose the modules object (__webpack_modules__)
  39. /******/ __webpack_require__.m = modules;
  40. /******/
  41. /******/ // expose the module cache
  42. /******/ __webpack_require__.c = installedModules;
  43. /******/
  44. /******/ // identity function for calling harmony imports with the correct context
  45. /******/ __webpack_require__.i = function(value) { return value; };
  46. /******/
  47. /******/ // define getter function for harmony exports
  48. /******/ __webpack_require__.d = function(exports, name, getter) {
  49. /******/ if(!__webpack_require__.o(exports, name)) {
  50. /******/ Object.defineProperty(exports, name, {
  51. /******/ configurable: false,
  52. /******/ enumerable: true,
  53. /******/ get: getter
  54. /******/ });
  55. /******/ }
  56. /******/ };
  57. /******/
  58. /******/ // getDefaultExport function for compatibility with non-harmony modules
  59. /******/ __webpack_require__.n = function(module) {
  60. /******/ var getter = module && module.__esModule ?
  61. /******/ function getDefault() { return module['default']; } :
  62. /******/ function getModuleExports() { return module; };
  63. /******/ __webpack_require__.d(getter, 'a', getter);
  64. /******/ return getter;
  65. /******/ };
  66. /******/
  67. /******/ // Object.prototype.hasOwnProperty.call
  68. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  69. /******/
  70. /******/ // __webpack_public_path__
  71. /******/ __webpack_require__.p = "";
  72. /******/
  73. /******/ // Load entry module and return exports
  74. /******/ return __webpack_require__(__webpack_require__.s = 7);
  75. /******/ })
  76. /************************************************************************/
  77. /******/ ([
  78. /* 0 */
  79. /***/ (function(module, exports, __webpack_require__) {
  80. "use strict";
  81. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  82. var _require = __webpack_require__(1),
  83. assert = _require.assert;
  84. function IsPropertyKey(argument) {
  85. return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol';
  86. }
  87. exports.typeIsObject = function (x) {
  88. return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function';
  89. };
  90. exports.createDataProperty = function (o, p, v) {
  91. assert(exports.typeIsObject(o));
  92. Object.defineProperty(o, p, { value: v, writable: true, enumerable: true, configurable: true });
  93. };
  94. exports.createArrayFromList = function (elements) {
  95. // We use arrays to represent lists, so this is basically a no-op.
  96. // Do a slice though just in case we happen to depend on the unique-ness.
  97. return elements.slice();
  98. };
  99. exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) {
  100. new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
  101. };
  102. exports.CreateIterResultObject = function (value, done) {
  103. assert(typeof done === 'boolean');
  104. var obj = {};
  105. Object.defineProperty(obj, 'value', { value: value, enumerable: true, writable: true, configurable: true });
  106. Object.defineProperty(obj, 'done', { value: done, enumerable: true, writable: true, configurable: true });
  107. return obj;
  108. };
  109. exports.IsFiniteNonNegativeNumber = function (v) {
  110. if (Number.isNaN(v)) {
  111. return false;
  112. }
  113. if (v === Infinity) {
  114. return false;
  115. }
  116. if (v < 0) {
  117. return false;
  118. }
  119. return true;
  120. };
  121. function Call(F, V, args) {
  122. if (typeof F !== 'function') {
  123. throw new TypeError('Argument is not a function');
  124. }
  125. return Function.prototype.apply.call(F, V, args);
  126. }
  127. exports.InvokeOrNoop = function (O, P, args) {
  128. assert(O !== undefined);
  129. assert(IsPropertyKey(P));
  130. assert(Array.isArray(args));
  131. var method = O[P];
  132. if (method === undefined) {
  133. return undefined;
  134. }
  135. return Call(method, O, args);
  136. };
  137. exports.PromiseInvokeOrNoop = function (O, P, args) {
  138. assert(O !== undefined);
  139. assert(IsPropertyKey(P));
  140. assert(Array.isArray(args));
  141. try {
  142. return Promise.resolve(exports.InvokeOrNoop(O, P, args));
  143. } catch (returnValueE) {
  144. return Promise.reject(returnValueE);
  145. }
  146. };
  147. exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) {
  148. assert(O !== undefined);
  149. assert(IsPropertyKey(P));
  150. assert(Array.isArray(args));
  151. assert(Array.isArray(argsF));
  152. var method = void 0;
  153. try {
  154. method = O[P];
  155. } catch (methodE) {
  156. return Promise.reject(methodE);
  157. }
  158. if (method === undefined) {
  159. return F.apply(null, argsF);
  160. }
  161. try {
  162. return Promise.resolve(Call(method, O, args));
  163. } catch (e) {
  164. return Promise.reject(e);
  165. }
  166. };
  167. // Not implemented correctly
  168. exports.TransferArrayBuffer = function (O) {
  169. return O.slice();
  170. };
  171. exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) {
  172. highWaterMark = Number(highWaterMark);
  173. if (Number.isNaN(highWaterMark) || highWaterMark < 0) {
  174. throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN');
  175. }
  176. return highWaterMark;
  177. };
  178. exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) {
  179. if (size !== undefined && typeof size !== 'function') {
  180. throw new TypeError('size property of a queuing strategy must be a function');
  181. }
  182. highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark);
  183. return { size: size, highWaterMark: highWaterMark };
  184. };
  185. /***/ }),
  186. /* 1 */
  187. /***/ (function(module, exports, __webpack_require__) {
  188. "use strict";
  189. function rethrowAssertionErrorRejection(e) {
  190. // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors
  191. // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't
  192. // expect any errors, but assertion errors are always problematic.
  193. if (e && e.constructor === AssertionError) {
  194. setTimeout(function () {
  195. throw e;
  196. }, 0);
  197. }
  198. };
  199. function AssertionError(message) {
  200. this.name = 'AssertionError';
  201. this.message = message || '';
  202. this.stack = new Error().stack;
  203. }
  204. AssertionError.prototype = Object.create(Error.prototype);
  205. AssertionError.prototype.constructor = AssertionError;
  206. function assert(value, message) {
  207. if (!value) {
  208. throw new AssertionError(message);
  209. }
  210. }
  211. module.exports = {
  212. rethrowAssertionErrorRejection: rethrowAssertionErrorRejection,
  213. AssertionError: AssertionError,
  214. assert: assert
  215. };
  216. /***/ }),
  217. /* 2 */
  218. /***/ (function(module, exports, __webpack_require__) {
  219. "use strict";
  220. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  221. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  222. var _require = __webpack_require__(0),
  223. InvokeOrNoop = _require.InvokeOrNoop,
  224. PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
  225. ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
  226. typeIsObject = _require.typeIsObject;
  227. var _require2 = __webpack_require__(1),
  228. assert = _require2.assert,
  229. rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection;
  230. var _require3 = __webpack_require__(3),
  231. DequeueValue = _require3.DequeueValue,
  232. EnqueueValueWithSize = _require3.EnqueueValueWithSize,
  233. PeekQueueValue = _require3.PeekQueueValue,
  234. ResetQueue = _require3.ResetQueue;
  235. var WritableStream = function () {
  236. function WritableStream() {
  237. var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  238. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  239. size = _ref.size,
  240. _ref$highWaterMark = _ref.highWaterMark,
  241. highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark;
  242. _classCallCheck(this, WritableStream);
  243. this._state = 'writable';
  244. // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is
  245. // 'erroring' or 'errored'. May be set to an undefined value.
  246. this._storedError = undefined;
  247. this._writer = undefined;
  248. // Initialize to undefined first because the constructor of the controller checks this
  249. // variable to validate the caller.
  250. this._writableStreamController = undefined;
  251. // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data
  252. // producer without waiting for the queued writes to finish.
  253. this._writeRequests = [];
  254. // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents
  255. // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.
  256. this._inFlightWriteRequest = undefined;
  257. // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer
  258. // has been detached.
  259. this._closeRequest = undefined;
  260. // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it
  261. // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.
  262. this._inFlightCloseRequest = undefined;
  263. // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.
  264. this._pendingAbortRequest = undefined;
  265. // The backpressure signal set by the controller.
  266. this._backpressure = false;
  267. var type = underlyingSink.type;
  268. if (type !== undefined) {
  269. throw new RangeError('Invalid type is specified');
  270. }
  271. this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark);
  272. this._writableStreamController.__startSteps();
  273. }
  274. _createClass(WritableStream, [{
  275. key: 'abort',
  276. value: function abort(reason) {
  277. if (IsWritableStream(this) === false) {
  278. return Promise.reject(streamBrandCheckException('abort'));
  279. }
  280. if (IsWritableStreamLocked(this) === true) {
  281. return Promise.reject(new TypeError('Cannot abort a stream that already has a writer'));
  282. }
  283. return WritableStreamAbort(this, reason);
  284. }
  285. }, {
  286. key: 'getWriter',
  287. value: function getWriter() {
  288. if (IsWritableStream(this) === false) {
  289. throw streamBrandCheckException('getWriter');
  290. }
  291. return AcquireWritableStreamDefaultWriter(this);
  292. }
  293. }, {
  294. key: 'locked',
  295. get: function get() {
  296. if (IsWritableStream(this) === false) {
  297. throw streamBrandCheckException('locked');
  298. }
  299. return IsWritableStreamLocked(this);
  300. }
  301. }]);
  302. return WritableStream;
  303. }();
  304. module.exports = {
  305. AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter,
  306. IsWritableStream: IsWritableStream,
  307. IsWritableStreamLocked: IsWritableStreamLocked,
  308. WritableStream: WritableStream,
  309. WritableStreamAbort: WritableStreamAbort,
  310. WritableStreamDefaultControllerError: WritableStreamDefaultControllerError,
  311. WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation,
  312. WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease,
  313. WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite,
  314. WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight
  315. };
  316. // Abstract operations for the WritableStream.
  317. function AcquireWritableStreamDefaultWriter(stream) {
  318. return new WritableStreamDefaultWriter(stream);
  319. }
  320. function IsWritableStream(x) {
  321. if (!typeIsObject(x)) {
  322. return false;
  323. }
  324. if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {
  325. return false;
  326. }
  327. return true;
  328. }
  329. function IsWritableStreamLocked(stream) {
  330. assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams');
  331. if (stream._writer === undefined) {
  332. return false;
  333. }
  334. return true;
  335. }
  336. function WritableStreamAbort(stream, reason) {
  337. var state = stream._state;
  338. if (state === 'closed') {
  339. return Promise.resolve(undefined);
  340. }
  341. if (state === 'errored') {
  342. return Promise.reject(stream._storedError);
  343. }
  344. var error = new TypeError('Requested to abort');
  345. if (stream._pendingAbortRequest !== undefined) {
  346. return Promise.reject(error);
  347. }
  348. assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring');
  349. var wasAlreadyErroring = false;
  350. if (state === 'erroring') {
  351. wasAlreadyErroring = true;
  352. // reason will not be used, so don't keep a reference to it.
  353. reason = undefined;
  354. }
  355. var promise = new Promise(function (resolve, reject) {
  356. stream._pendingAbortRequest = {
  357. _resolve: resolve,
  358. _reject: reject,
  359. _reason: reason,
  360. _wasAlreadyErroring: wasAlreadyErroring
  361. };
  362. });
  363. if (wasAlreadyErroring === false) {
  364. WritableStreamStartErroring(stream, error);
  365. }
  366. return promise;
  367. }
  368. // WritableStream API exposed for controllers.
  369. function WritableStreamAddWriteRequest(stream) {
  370. assert(IsWritableStreamLocked(stream) === true);
  371. assert(stream._state === 'writable');
  372. var promise = new Promise(function (resolve, reject) {
  373. var writeRequest = {
  374. _resolve: resolve,
  375. _reject: reject
  376. };
  377. stream._writeRequests.push(writeRequest);
  378. });
  379. return promise;
  380. }
  381. function WritableStreamDealWithRejection(stream, error) {
  382. var state = stream._state;
  383. if (state === 'writable') {
  384. WritableStreamStartErroring(stream, error);
  385. return;
  386. }
  387. assert(state === 'erroring');
  388. WritableStreamFinishErroring(stream);
  389. }
  390. function WritableStreamStartErroring(stream, reason) {
  391. assert(stream._storedError === undefined, 'stream._storedError === undefined');
  392. assert(stream._state === 'writable', 'state must be writable');
  393. var controller = stream._writableStreamController;
  394. assert(controller !== undefined, 'controller must not be undefined');
  395. stream._state = 'erroring';
  396. stream._storedError = reason;
  397. var writer = stream._writer;
  398. if (writer !== undefined) {
  399. WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
  400. }
  401. if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) {
  402. WritableStreamFinishErroring(stream);
  403. }
  404. }
  405. function WritableStreamFinishErroring(stream) {
  406. assert(stream._state === 'erroring', 'stream._state === erroring');
  407. assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false');
  408. stream._state = 'errored';
  409. stream._writableStreamController.__errorSteps();
  410. var storedError = stream._storedError;
  411. for (var i = 0; i < stream._writeRequests.length; i++) {
  412. var writeRequest = stream._writeRequests[i];
  413. writeRequest._reject(storedError);
  414. }
  415. stream._writeRequests = [];
  416. if (stream._pendingAbortRequest === undefined) {
  417. WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
  418. return;
  419. }
  420. var abortRequest = stream._pendingAbortRequest;
  421. stream._pendingAbortRequest = undefined;
  422. if (abortRequest._wasAlreadyErroring === true) {
  423. abortRequest._reject(storedError);
  424. WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
  425. return;
  426. }
  427. var promise = stream._writableStreamController.__abortSteps(abortRequest._reason);
  428. promise.then(function () {
  429. abortRequest._resolve();
  430. WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
  431. }, function (reason) {
  432. abortRequest._reject(reason);
  433. WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
  434. });
  435. }
  436. function WritableStreamFinishInFlightWrite(stream) {
  437. assert(stream._inFlightWriteRequest !== undefined);
  438. stream._inFlightWriteRequest._resolve(undefined);
  439. stream._inFlightWriteRequest = undefined;
  440. }
  441. function WritableStreamFinishInFlightWriteWithError(stream, error) {
  442. assert(stream._inFlightWriteRequest !== undefined);
  443. stream._inFlightWriteRequest._reject(error);
  444. stream._inFlightWriteRequest = undefined;
  445. assert(stream._state === 'writable' || stream._state === 'erroring');
  446. WritableStreamDealWithRejection(stream, error);
  447. }
  448. function WritableStreamFinishInFlightClose(stream) {
  449. assert(stream._inFlightCloseRequest !== undefined);
  450. stream._inFlightCloseRequest._resolve(undefined);
  451. stream._inFlightCloseRequest = undefined;
  452. var state = stream._state;
  453. assert(state === 'writable' || state === 'erroring');
  454. if (state === 'erroring') {
  455. // The error was too late to do anything, so it is ignored.
  456. stream._storedError = undefined;
  457. if (stream._pendingAbortRequest !== undefined) {
  458. stream._pendingAbortRequest._resolve();
  459. stream._pendingAbortRequest = undefined;
  460. }
  461. }
  462. stream._state = 'closed';
  463. var writer = stream._writer;
  464. if (writer !== undefined) {
  465. defaultWriterClosedPromiseResolve(writer);
  466. }
  467. assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined');
  468. assert(stream._storedError === undefined, 'stream._storedError === undefined');
  469. }
  470. function WritableStreamFinishInFlightCloseWithError(stream, error) {
  471. assert(stream._inFlightCloseRequest !== undefined);
  472. stream._inFlightCloseRequest._reject(error);
  473. stream._inFlightCloseRequest = undefined;
  474. assert(stream._state === 'writable' || stream._state === 'erroring');
  475. // Never execute sink abort() after sink close().
  476. if (stream._pendingAbortRequest !== undefined) {
  477. stream._pendingAbortRequest._reject(error);
  478. stream._pendingAbortRequest = undefined;
  479. }
  480. WritableStreamDealWithRejection(stream, error);
  481. }
  482. // TODO(ricea): Fix alphabetical order.
  483. function WritableStreamCloseQueuedOrInFlight(stream) {
  484. if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {
  485. return false;
  486. }
  487. return true;
  488. }
  489. function WritableStreamHasOperationMarkedInFlight(stream) {
  490. if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {
  491. return false;
  492. }
  493. return true;
  494. }
  495. function WritableStreamMarkCloseRequestInFlight(stream) {
  496. assert(stream._inFlightCloseRequest === undefined);
  497. assert(stream._closeRequest !== undefined);
  498. stream._inFlightCloseRequest = stream._closeRequest;
  499. stream._closeRequest = undefined;
  500. }
  501. function WritableStreamMarkFirstWriteRequestInFlight(stream) {
  502. assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request');
  503. assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty');
  504. stream._inFlightWriteRequest = stream._writeRequests.shift();
  505. }
  506. function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
  507. assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`');
  508. if (stream._closeRequest !== undefined) {
  509. assert(stream._inFlightCloseRequest === undefined);
  510. stream._closeRequest._reject(stream._storedError);
  511. stream._closeRequest = undefined;
  512. }
  513. var writer = stream._writer;
  514. if (writer !== undefined) {
  515. defaultWriterClosedPromiseReject(writer, stream._storedError);
  516. writer._closedPromise.catch(function () {});
  517. }
  518. }
  519. function WritableStreamUpdateBackpressure(stream, backpressure) {
  520. assert(stream._state === 'writable');
  521. assert(WritableStreamCloseQueuedOrInFlight(stream) === false);
  522. var writer = stream._writer;
  523. if (writer !== undefined && backpressure !== stream._backpressure) {
  524. if (backpressure === true) {
  525. defaultWriterReadyPromiseReset(writer);
  526. } else {
  527. assert(backpressure === false);
  528. defaultWriterReadyPromiseResolve(writer);
  529. }
  530. }
  531. stream._backpressure = backpressure;
  532. }
  533. var WritableStreamDefaultWriter = function () {
  534. function WritableStreamDefaultWriter(stream) {
  535. _classCallCheck(this, WritableStreamDefaultWriter);
  536. if (IsWritableStream(stream) === false) {
  537. throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance');
  538. }
  539. if (IsWritableStreamLocked(stream) === true) {
  540. throw new TypeError('This stream has already been locked for exclusive writing by another writer');
  541. }
  542. this._ownerWritableStream = stream;
  543. stream._writer = this;
  544. var state = stream._state;
  545. if (state === 'writable') {
  546. if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) {
  547. defaultWriterReadyPromiseInitialize(this);
  548. } else {
  549. defaultWriterReadyPromiseInitializeAsResolved(this);
  550. }
  551. defaultWriterClosedPromiseInitialize(this);
  552. } else if (state === 'erroring') {
  553. defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);
  554. this._readyPromise.catch(function () {});
  555. defaultWriterClosedPromiseInitialize(this);
  556. } else if (state === 'closed') {
  557. defaultWriterReadyPromiseInitializeAsResolved(this);
  558. defaultWriterClosedPromiseInitializeAsResolved(this);
  559. } else {
  560. assert(state === 'errored', 'state must be errored');
  561. var storedError = stream._storedError;
  562. defaultWriterReadyPromiseInitializeAsRejected(this, storedError);
  563. this._readyPromise.catch(function () {});
  564. defaultWriterClosedPromiseInitializeAsRejected(this, storedError);
  565. this._closedPromise.catch(function () {});
  566. }
  567. }
  568. _createClass(WritableStreamDefaultWriter, [{
  569. key: 'abort',
  570. value: function abort(reason) {
  571. if (IsWritableStreamDefaultWriter(this) === false) {
  572. return Promise.reject(defaultWriterBrandCheckException('abort'));
  573. }
  574. if (this._ownerWritableStream === undefined) {
  575. return Promise.reject(defaultWriterLockException('abort'));
  576. }
  577. return WritableStreamDefaultWriterAbort(this, reason);
  578. }
  579. }, {
  580. key: 'close',
  581. value: function close() {
  582. if (IsWritableStreamDefaultWriter(this) === false) {
  583. return Promise.reject(defaultWriterBrandCheckException('close'));
  584. }
  585. var stream = this._ownerWritableStream;
  586. if (stream === undefined) {
  587. return Promise.reject(defaultWriterLockException('close'));
  588. }
  589. if (WritableStreamCloseQueuedOrInFlight(stream) === true) {
  590. return Promise.reject(new TypeError('cannot close an already-closing stream'));
  591. }
  592. return WritableStreamDefaultWriterClose(this);
  593. }
  594. }, {
  595. key: 'releaseLock',
  596. value: function releaseLock() {
  597. if (IsWritableStreamDefaultWriter(this) === false) {
  598. throw defaultWriterBrandCheckException('releaseLock');
  599. }
  600. var stream = this._ownerWritableStream;
  601. if (stream === undefined) {
  602. return;
  603. }
  604. assert(stream._writer !== undefined);
  605. WritableStreamDefaultWriterRelease(this);
  606. }
  607. }, {
  608. key: 'write',
  609. value: function write(chunk) {
  610. if (IsWritableStreamDefaultWriter(this) === false) {
  611. return Promise.reject(defaultWriterBrandCheckException('write'));
  612. }
  613. if (this._ownerWritableStream === undefined) {
  614. return Promise.reject(defaultWriterLockException('write to'));
  615. }
  616. return WritableStreamDefaultWriterWrite(this, chunk);
  617. }
  618. }, {
  619. key: 'closed',
  620. get: function get() {
  621. if (IsWritableStreamDefaultWriter(this) === false) {
  622. return Promise.reject(defaultWriterBrandCheckException('closed'));
  623. }
  624. return this._closedPromise;
  625. }
  626. }, {
  627. key: 'desiredSize',
  628. get: function get() {
  629. if (IsWritableStreamDefaultWriter(this) === false) {
  630. throw defaultWriterBrandCheckException('desiredSize');
  631. }
  632. if (this._ownerWritableStream === undefined) {
  633. throw defaultWriterLockException('desiredSize');
  634. }
  635. return WritableStreamDefaultWriterGetDesiredSize(this);
  636. }
  637. }, {
  638. key: 'ready',
  639. get: function get() {
  640. if (IsWritableStreamDefaultWriter(this) === false) {
  641. return Promise.reject(defaultWriterBrandCheckException('ready'));
  642. }
  643. return this._readyPromise;
  644. }
  645. }]);
  646. return WritableStreamDefaultWriter;
  647. }();
  648. // Abstract operations for the WritableStreamDefaultWriter.
  649. function IsWritableStreamDefaultWriter(x) {
  650. if (!typeIsObject(x)) {
  651. return false;
  652. }
  653. if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {
  654. return false;
  655. }
  656. return true;
  657. }
  658. // A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.
  659. function WritableStreamDefaultWriterAbort(writer, reason) {
  660. var stream = writer._ownerWritableStream;
  661. assert(stream !== undefined);
  662. return WritableStreamAbort(stream, reason);
  663. }
  664. function WritableStreamDefaultWriterClose(writer) {
  665. var stream = writer._ownerWritableStream;
  666. assert(stream !== undefined);
  667. var state = stream._state;
  668. if (state === 'closed' || state === 'errored') {
  669. return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed'));
  670. }
  671. assert(state === 'writable' || state === 'erroring');
  672. assert(WritableStreamCloseQueuedOrInFlight(stream) === false);
  673. var promise = new Promise(function (resolve, reject) {
  674. var closeRequest = {
  675. _resolve: resolve,
  676. _reject: reject
  677. };
  678. stream._closeRequest = closeRequest;
  679. });
  680. if (stream._backpressure === true && state === 'writable') {
  681. defaultWriterReadyPromiseResolve(writer);
  682. }
  683. WritableStreamDefaultControllerClose(stream._writableStreamController);
  684. return promise;
  685. }
  686. function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
  687. var stream = writer._ownerWritableStream;
  688. assert(stream !== undefined);
  689. var state = stream._state;
  690. if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {
  691. return Promise.resolve();
  692. }
  693. if (state === 'errored') {
  694. return Promise.reject(stream._storedError);
  695. }
  696. assert(state === 'writable' || state === 'erroring');
  697. return WritableStreamDefaultWriterClose(writer);
  698. }
  699. function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
  700. if (writer._closedPromiseState === 'pending') {
  701. defaultWriterClosedPromiseReject(writer, error);
  702. } else {
  703. defaultWriterClosedPromiseResetToRejected(writer, error);
  704. }
  705. writer._closedPromise.catch(function () {});
  706. }
  707. function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
  708. if (writer._readyPromiseState === 'pending') {
  709. defaultWriterReadyPromiseReject(writer, error);
  710. } else {
  711. defaultWriterReadyPromiseResetToRejected(writer, error);
  712. }
  713. writer._readyPromise.catch(function () {});
  714. }
  715. function WritableStreamDefaultWriterGetDesiredSize(writer) {
  716. var stream = writer._ownerWritableStream;
  717. var state = stream._state;
  718. if (state === 'errored' || state === 'erroring') {
  719. return null;
  720. }
  721. if (state === 'closed') {
  722. return 0;
  723. }
  724. return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
  725. }
  726. function WritableStreamDefaultWriterRelease(writer) {
  727. var stream = writer._ownerWritableStream;
  728. assert(stream !== undefined);
  729. assert(stream._writer === writer);
  730. var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness');
  731. WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
  732. // The state transitions to "errored" before the sink abort() method runs, but the writer.closed promise is not
  733. // rejected until afterwards. This means that simply testing state will not work.
  734. WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
  735. stream._writer = undefined;
  736. writer._ownerWritableStream = undefined;
  737. }
  738. function WritableStreamDefaultWriterWrite(writer, chunk) {
  739. var stream = writer._ownerWritableStream;
  740. assert(stream !== undefined);
  741. var controller = stream._writableStreamController;
  742. var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);
  743. if (stream !== writer._ownerWritableStream) {
  744. return Promise.reject(defaultWriterLockException('write to'));
  745. }
  746. var state = stream._state;
  747. if (state === 'errored') {
  748. return Promise.reject(stream._storedError);
  749. }
  750. if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {
  751. return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to'));
  752. }
  753. if (state === 'erroring') {
  754. return Promise.reject(stream._storedError);
  755. }
  756. assert(state === 'writable');
  757. var promise = WritableStreamAddWriteRequest(stream);
  758. WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);
  759. return promise;
  760. }
  761. var WritableStreamDefaultController = function () {
  762. function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) {
  763. _classCallCheck(this, WritableStreamDefaultController);
  764. if (IsWritableStream(stream) === false) {
  765. throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance');
  766. }
  767. if (stream._writableStreamController !== undefined) {
  768. throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor');
  769. }
  770. this._controlledWritableStream = stream;
  771. this._underlyingSink = underlyingSink;
  772. // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
  773. this._queue = undefined;
  774. this._queueTotalSize = undefined;
  775. ResetQueue(this);
  776. this._started = false;
  777. var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);
  778. this._strategySize = normalizedStrategy.size;
  779. this._strategyHWM = normalizedStrategy.highWaterMark;
  780. var backpressure = WritableStreamDefaultControllerGetBackpressure(this);
  781. WritableStreamUpdateBackpressure(stream, backpressure);
  782. }
  783. _createClass(WritableStreamDefaultController, [{
  784. key: 'error',
  785. value: function error(e) {
  786. if (IsWritableStreamDefaultController(this) === false) {
  787. throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');
  788. }
  789. var state = this._controlledWritableStream._state;
  790. if (state !== 'writable') {
  791. // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so
  792. // just treat it as a no-op.
  793. return;
  794. }
  795. WritableStreamDefaultControllerError(this, e);
  796. }
  797. }, {
  798. key: '__abortSteps',
  799. value: function __abortSteps(reason) {
  800. return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]);
  801. }
  802. }, {
  803. key: '__errorSteps',
  804. value: function __errorSteps() {
  805. ResetQueue(this);
  806. }
  807. }, {
  808. key: '__startSteps',
  809. value: function __startSteps() {
  810. var _this = this;
  811. var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]);
  812. var stream = this._controlledWritableStream;
  813. Promise.resolve(startResult).then(function () {
  814. assert(stream._state === 'writable' || stream._state === 'erroring');
  815. _this._started = true;
  816. WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this);
  817. }, function (r) {
  818. assert(stream._state === 'writable' || stream._state === 'erroring');
  819. _this._started = true;
  820. WritableStreamDealWithRejection(stream, r);
  821. }).catch(rethrowAssertionErrorRejection);
  822. }
  823. }]);
  824. return WritableStreamDefaultController;
  825. }();
  826. // Abstract operations implementing interface required by the WritableStream.
  827. function WritableStreamDefaultControllerClose(controller) {
  828. EnqueueValueWithSize(controller, 'close', 0);
  829. WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
  830. }
  831. function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {
  832. var strategySize = controller._strategySize;
  833. if (strategySize === undefined) {
  834. return 1;
  835. }
  836. try {
  837. return strategySize(chunk);
  838. } catch (chunkSizeE) {
  839. WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
  840. return 1;
  841. }
  842. }
  843. function WritableStreamDefaultControllerGetDesiredSize(controller) {
  844. return controller._strategyHWM - controller._queueTotalSize;
  845. }
  846. function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
  847. var writeRecord = { chunk: chunk };
  848. try {
  849. EnqueueValueWithSize(controller, writeRecord, chunkSize);
  850. } catch (enqueueE) {
  851. WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
  852. return;
  853. }
  854. var stream = controller._controlledWritableStream;
  855. if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') {
  856. var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
  857. WritableStreamUpdateBackpressure(stream, backpressure);
  858. }
  859. WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
  860. }
  861. // Abstract operations for the WritableStreamDefaultController.
  862. function IsWritableStreamDefaultController(x) {
  863. if (!typeIsObject(x)) {
  864. return false;
  865. }
  866. if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) {
  867. return false;
  868. }
  869. return true;
  870. }
  871. function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
  872. var stream = controller._controlledWritableStream;
  873. if (controller._started === false) {
  874. return;
  875. }
  876. if (stream._inFlightWriteRequest !== undefined) {
  877. return;
  878. }
  879. var state = stream._state;
  880. if (state === 'closed' || state === 'errored') {
  881. return;
  882. }
  883. if (state === 'erroring') {
  884. WritableStreamFinishErroring(stream);
  885. return;
  886. }
  887. if (controller._queue.length === 0) {
  888. return;
  889. }
  890. var writeRecord = PeekQueueValue(controller);
  891. if (writeRecord === 'close') {
  892. WritableStreamDefaultControllerProcessClose(controller);
  893. } else {
  894. WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk);
  895. }
  896. }
  897. function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {
  898. if (controller._controlledWritableStream._state === 'writable') {
  899. WritableStreamDefaultControllerError(controller, error);
  900. }
  901. }
  902. function WritableStreamDefaultControllerProcessClose(controller) {
  903. var stream = controller._controlledWritableStream;
  904. WritableStreamMarkCloseRequestInFlight(stream);
  905. DequeueValue(controller);
  906. assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued');
  907. var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []);
  908. sinkClosePromise.then(function () {
  909. WritableStreamFinishInFlightClose(stream);
  910. }, function (reason) {
  911. WritableStreamFinishInFlightCloseWithError(stream, reason);
  912. }).catch(rethrowAssertionErrorRejection);
  913. }
  914. function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
  915. var stream = controller._controlledWritableStream;
  916. WritableStreamMarkFirstWriteRequestInFlight(stream);
  917. var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]);
  918. sinkWritePromise.then(function () {
  919. WritableStreamFinishInFlightWrite(stream);
  920. var state = stream._state;
  921. assert(state === 'writable' || state === 'erroring');
  922. DequeueValue(controller);
  923. if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') {
  924. var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
  925. WritableStreamUpdateBackpressure(stream, backpressure);
  926. }
  927. WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
  928. }, function (reason) {
  929. WritableStreamFinishInFlightWriteWithError(stream, reason);
  930. }).catch(rethrowAssertionErrorRejection);
  931. }
  932. function WritableStreamDefaultControllerGetBackpressure(controller) {
  933. var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
  934. return desiredSize <= 0;
  935. }
  936. // A client of WritableStreamDefaultController may use these functions directly to bypass state check.
  937. function WritableStreamDefaultControllerError(controller, error) {
  938. var stream = controller._controlledWritableStream;
  939. assert(stream._state === 'writable');
  940. WritableStreamStartErroring(stream, error);
  941. }
  942. // Helper functions for the WritableStream.
  943. function streamBrandCheckException(name) {
  944. return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream');
  945. }
  946. // Helper functions for the WritableStreamDefaultWriter.
  947. function defaultWriterBrandCheckException(name) {
  948. return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter');
  949. }
  950. function defaultWriterLockException(name) {
  951. return new TypeError('Cannot ' + name + ' a stream using a released writer');
  952. }
  953. function defaultWriterClosedPromiseInitialize(writer) {
  954. writer._closedPromise = new Promise(function (resolve, reject) {
  955. writer._closedPromise_resolve = resolve;
  956. writer._closedPromise_reject = reject;
  957. writer._closedPromiseState = 'pending';
  958. });
  959. }
  960. function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
  961. writer._closedPromise = Promise.reject(reason);
  962. writer._closedPromise_resolve = undefined;
  963. writer._closedPromise_reject = undefined;
  964. writer._closedPromiseState = 'rejected';
  965. }
  966. function defaultWriterClosedPromiseInitializeAsResolved(writer) {
  967. writer._closedPromise = Promise.resolve(undefined);
  968. writer._closedPromise_resolve = undefined;
  969. writer._closedPromise_reject = undefined;
  970. writer._closedPromiseState = 'resolved';
  971. }
  972. function defaultWriterClosedPromiseReject(writer, reason) {
  973. assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined');
  974. assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined');
  975. assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending');
  976. writer._closedPromise_reject(reason);
  977. writer._closedPromise_resolve = undefined;
  978. writer._closedPromise_reject = undefined;
  979. writer._closedPromiseState = 'rejected';
  980. }
  981. function defaultWriterClosedPromiseResetToRejected(writer, reason) {
  982. assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined');
  983. assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined');
  984. assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending');
  985. writer._closedPromise = Promise.reject(reason);
  986. writer._closedPromiseState = 'rejected';
  987. }
  988. function defaultWriterClosedPromiseResolve(writer) {
  989. assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined');
  990. assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined');
  991. assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending');
  992. writer._closedPromise_resolve(undefined);
  993. writer._closedPromise_resolve = undefined;
  994. writer._closedPromise_reject = undefined;
  995. writer._closedPromiseState = 'resolved';
  996. }
  997. function defaultWriterReadyPromiseInitialize(writer) {
  998. writer._readyPromise = new Promise(function (resolve, reject) {
  999. writer._readyPromise_resolve = resolve;
  1000. writer._readyPromise_reject = reject;
  1001. });
  1002. writer._readyPromiseState = 'pending';
  1003. }
  1004. function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {
  1005. writer._readyPromise = Promise.reject(reason);
  1006. writer._readyPromise_resolve = undefined;
  1007. writer._readyPromise_reject = undefined;
  1008. writer._readyPromiseState = 'rejected';
  1009. }
  1010. function defaultWriterReadyPromiseInitializeAsResolved(writer) {
  1011. writer._readyPromise = Promise.resolve(undefined);
  1012. writer._readyPromise_resolve = undefined;
  1013. writer._readyPromise_reject = undefined;
  1014. writer._readyPromiseState = 'fulfilled';
  1015. }
  1016. function defaultWriterReadyPromiseReject(writer, reason) {
  1017. assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined');
  1018. assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined');
  1019. writer._readyPromise_reject(reason);
  1020. writer._readyPromise_resolve = undefined;
  1021. writer._readyPromise_reject = undefined;
  1022. writer._readyPromiseState = 'rejected';
  1023. }
  1024. function defaultWriterReadyPromiseReset(writer) {
  1025. assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined');
  1026. assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined');
  1027. writer._readyPromise = new Promise(function (resolve, reject) {
  1028. writer._readyPromise_resolve = resolve;
  1029. writer._readyPromise_reject = reject;
  1030. });
  1031. writer._readyPromiseState = 'pending';
  1032. }
  1033. function defaultWriterReadyPromiseResetToRejected(writer, reason) {
  1034. assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined');
  1035. assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined');
  1036. writer._readyPromise = Promise.reject(reason);
  1037. writer._readyPromiseState = 'rejected';
  1038. }
  1039. function defaultWriterReadyPromiseResolve(writer) {
  1040. assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined');
  1041. assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined');
  1042. writer._readyPromise_resolve(undefined);
  1043. writer._readyPromise_resolve = undefined;
  1044. writer._readyPromise_reject = undefined;
  1045. writer._readyPromiseState = 'fulfilled';
  1046. }
  1047. /***/ }),
  1048. /* 3 */
  1049. /***/ (function(module, exports, __webpack_require__) {
  1050. "use strict";
  1051. var _require = __webpack_require__(0),
  1052. IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber;
  1053. var _require2 = __webpack_require__(1),
  1054. assert = _require2.assert;
  1055. exports.DequeueValue = function (container) {
  1056. assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].');
  1057. assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.');
  1058. var pair = container._queue.shift();
  1059. container._queueTotalSize -= pair.size;
  1060. if (container._queueTotalSize < 0) {
  1061. container._queueTotalSize = 0;
  1062. }
  1063. return pair.value;
  1064. };
  1065. exports.EnqueueValueWithSize = function (container, value, size) {
  1066. assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].');
  1067. size = Number(size);
  1068. if (!IsFiniteNonNegativeNumber(size)) {
  1069. throw new RangeError('Size must be a finite, non-NaN, non-negative number.');
  1070. }
  1071. container._queue.push({ value: value, size: size });
  1072. container._queueTotalSize += size;
  1073. };
  1074. exports.PeekQueueValue = function (container) {
  1075. assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].');
  1076. assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.');
  1077. var pair = container._queue[0];
  1078. return pair.value;
  1079. };
  1080. exports.ResetQueue = function (container) {
  1081. assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].');
  1082. container._queue = [];
  1083. container._queueTotalSize = 0;
  1084. };
  1085. /***/ }),
  1086. /* 4 */
  1087. /***/ (function(module, exports, __webpack_require__) {
  1088. "use strict";
  1089. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  1090. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  1091. var _require = __webpack_require__(0),
  1092. ArrayBufferCopy = _require.ArrayBufferCopy,
  1093. CreateIterResultObject = _require.CreateIterResultObject,
  1094. IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber,
  1095. InvokeOrNoop = _require.InvokeOrNoop,
  1096. PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
  1097. TransferArrayBuffer = _require.TransferArrayBuffer,
  1098. ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
  1099. ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark;
  1100. var _require2 = __webpack_require__(0),
  1101. createArrayFromList = _require2.createArrayFromList,
  1102. createDataProperty = _require2.createDataProperty,
  1103. typeIsObject = _require2.typeIsObject;
  1104. var _require3 = __webpack_require__(1),
  1105. assert = _require3.assert,
  1106. rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection;
  1107. var _require4 = __webpack_require__(3),
  1108. DequeueValue = _require4.DequeueValue,
  1109. EnqueueValueWithSize = _require4.EnqueueValueWithSize,
  1110. ResetQueue = _require4.ResetQueue;
  1111. var _require5 = __webpack_require__(2),
  1112. AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter,
  1113. IsWritableStream = _require5.IsWritableStream,
  1114. IsWritableStreamLocked = _require5.IsWritableStreamLocked,
  1115. WritableStreamAbort = _require5.WritableStreamAbort,
  1116. WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation,
  1117. WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease,
  1118. WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite,
  1119. WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight;
  1120. var ReadableStream = function () {
  1121. function ReadableStream() {
  1122. var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  1123. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  1124. size = _ref.size,
  1125. highWaterMark = _ref.highWaterMark;
  1126. _classCallCheck(this, ReadableStream);
  1127. // Exposed to controllers.
  1128. this._state = 'readable';
  1129. this._reader = undefined;
  1130. this._storedError = undefined;
  1131. this._disturbed = false;
  1132. // Initialize to undefined first because the constructor of the controller checks this
  1133. // variable to validate the caller.
  1134. this._readableStreamController = undefined;
  1135. var type = underlyingSource.type;
  1136. var typeString = String(type);
  1137. if (typeString === 'bytes') {
  1138. if (highWaterMark === undefined) {
  1139. highWaterMark = 0;
  1140. }
  1141. this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark);
  1142. } else if (type === undefined) {
  1143. if (highWaterMark === undefined) {
  1144. highWaterMark = 1;
  1145. }
  1146. this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark);
  1147. } else {
  1148. throw new RangeError('Invalid type is specified');
  1149. }
  1150. }
  1151. _createClass(ReadableStream, [{
  1152. key: 'cancel',
  1153. value: function cancel(reason) {
  1154. if (IsReadableStream(this) === false) {
  1155. return Promise.reject(streamBrandCheckException('cancel'));
  1156. }
  1157. if (IsReadableStreamLocked(this) === true) {
  1158. return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader'));
  1159. }
  1160. return ReadableStreamCancel(this, reason);
  1161. }
  1162. }, {
  1163. key: 'getReader',
  1164. value: function getReader() {
  1165. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1166. mode = _ref2.mode;
  1167. if (IsReadableStream(this) === false) {
  1168. throw streamBrandCheckException('getReader');
  1169. }
  1170. if (mode === undefined) {
  1171. return AcquireReadableStreamDefaultReader(this);
  1172. }
  1173. mode = String(mode);
  1174. if (mode === 'byob') {
  1175. return AcquireReadableStreamBYOBReader(this);
  1176. }
  1177. throw new RangeError('Invalid mode is specified');
  1178. }
  1179. }, {
  1180. key: 'pipeThrough',
  1181. value: function pipeThrough(_ref3, options) {
  1182. var writable = _ref3.writable,
  1183. readable = _ref3.readable;
  1184. var promise = this.pipeTo(writable, options);
  1185. ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise);
  1186. return readable;
  1187. }
  1188. }, {
  1189. key: 'pipeTo',
  1190. value: function pipeTo(dest) {
  1191. var _this = this;
  1192. var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  1193. preventClose = _ref4.preventClose,
  1194. preventAbort = _ref4.preventAbort,
  1195. preventCancel = _ref4.preventCancel;
  1196. if (IsReadableStream(this) === false) {
  1197. return Promise.reject(streamBrandCheckException('pipeTo'));
  1198. }
  1199. if (IsWritableStream(dest) === false) {
  1200. return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream'));
  1201. }
  1202. preventClose = Boolean(preventClose);
  1203. preventAbort = Boolean(preventAbort);
  1204. preventCancel = Boolean(preventCancel);
  1205. if (IsReadableStreamLocked(this) === true) {
  1206. return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));
  1207. }
  1208. if (IsWritableStreamLocked(dest) === true) {
  1209. return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));
  1210. }
  1211. var reader = AcquireReadableStreamDefaultReader(this);
  1212. var writer = AcquireWritableStreamDefaultWriter(dest);
  1213. var shuttingDown = false;
  1214. // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.
  1215. var currentWrite = Promise.resolve();
  1216. return new Promise(function (resolve, reject) {
  1217. // Using reader and writer, read all chunks from this and write them to dest
  1218. // - Backpressure must be enforced
  1219. // - Shutdown must stop all activity
  1220. function pipeLoop() {
  1221. currentWrite = Promise.resolve();
  1222. if (shuttingDown === true) {
  1223. return Promise.resolve();
  1224. }
  1225. return writer._readyPromise.then(function () {
  1226. return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) {
  1227. var value = _ref5.value,
  1228. done = _ref5.done;
  1229. if (done === true) {
  1230. return;
  1231. }
  1232. currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {});
  1233. });
  1234. }).then(pipeLoop);
  1235. }
  1236. // Errors must be propagated forward
  1237. isOrBecomesErrored(_this, reader._closedPromise, function (storedError) {
  1238. if (preventAbort === false) {
  1239. shutdownWithAction(function () {
  1240. return WritableStreamAbort(dest, storedError);
  1241. }, true, storedError);
  1242. } else {
  1243. shutdown(true, storedError);
  1244. }
  1245. });
  1246. // Errors must be propagated backward
  1247. isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {
  1248. if (preventCancel === false) {
  1249. shutdownWithAction(function () {
  1250. return ReadableStreamCancel(_this, storedError);
  1251. }, true, storedError);
  1252. } else {
  1253. shutdown(true, storedError);
  1254. }
  1255. });
  1256. // Closing must be propagated forward
  1257. isOrBecomesClosed(_this, reader._closedPromise, function () {
  1258. if (preventClose === false) {
  1259. shutdownWithAction(function () {
  1260. return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);
  1261. });
  1262. } else {
  1263. shutdown();
  1264. }
  1265. });
  1266. // Closing must be propagated backward
  1267. if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') {
  1268. var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');
  1269. if (preventCancel === false) {
  1270. shutdownWithAction(function () {
  1271. return ReadableStreamCancel(_this, destClosed);
  1272. }, true, destClosed);
  1273. } else {
  1274. shutdown(true, destClosed);
  1275. }
  1276. }
  1277. pipeLoop().catch(function (err) {
  1278. currentWrite = Promise.resolve();
  1279. rethrowAssertionErrorRejection(err);
  1280. });
  1281. function waitForWritesToFinish() {
  1282. // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait
  1283. // for that too.
  1284. var oldCurrentWrite = currentWrite;
  1285. return currentWrite.then(function () {
  1286. return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined;
  1287. });
  1288. }
  1289. function isOrBecomesErrored(stream, promise, action) {
  1290. if (stream._state === 'errored') {
  1291. action(stream._storedError);
  1292. } else {
  1293. promise.catch(action).catch(rethrowAssertionErrorRejection);
  1294. }
  1295. }
  1296. function isOrBecomesClosed(stream, promise, action) {
  1297. if (stream._state === 'closed') {
  1298. action();
  1299. } else {
  1300. promise.then(action).catch(rethrowAssertionErrorRejection);
  1301. }
  1302. }
  1303. function shutdownWithAction(action, originalIsError, originalError) {
  1304. if (shuttingDown === true) {
  1305. return;
  1306. }
  1307. shuttingDown = true;
  1308. if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {
  1309. waitForWritesToFinish().then(doTheRest);
  1310. } else {
  1311. doTheRest();
  1312. }
  1313. function doTheRest() {
  1314. action().then(function () {
  1315. return finalize(originalIsError, originalError);
  1316. }, function (newError) {
  1317. return finalize(true, newError);
  1318. }).catch(rethrowAssertionErrorRejection);
  1319. }
  1320. }
  1321. function shutdown(isError, error) {
  1322. if (shuttingDown === true) {
  1323. return;
  1324. }
  1325. shuttingDown = true;
  1326. if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {
  1327. waitForWritesToFinish().then(function () {
  1328. return finalize(isError, error);
  1329. }).catch(rethrowAssertionErrorRejection);
  1330. } else {
  1331. finalize(isError, error);
  1332. }
  1333. }
  1334. function finalize(isError, error) {
  1335. WritableStreamDefaultWriterRelease(writer);
  1336. ReadableStreamReaderGenericRelease(reader);
  1337. if (isError) {
  1338. reject(error);
  1339. } else {
  1340. resolve(undefined);
  1341. }
  1342. }
  1343. });
  1344. }
  1345. }, {
  1346. key: 'tee',
  1347. value: function tee() {
  1348. if (IsReadableStream(this) === false) {
  1349. throw streamBrandCheckException('tee');
  1350. }
  1351. var branches = ReadableStreamTee(this, false);
  1352. return createArrayFromList(branches);
  1353. }
  1354. }, {
  1355. key: 'locked',
  1356. get: function get() {
  1357. if (IsReadableStream(this) === false) {
  1358. throw streamBrandCheckException('locked');
  1359. }
  1360. return IsReadableStreamLocked(this);
  1361. }
  1362. }]);
  1363. return ReadableStream;
  1364. }();
  1365. module.exports = {
  1366. ReadableStream: ReadableStream,
  1367. IsReadableStreamDisturbed: IsReadableStreamDisturbed,
  1368. ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose,
  1369. ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue,
  1370. ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError,
  1371. ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize
  1372. };
  1373. // Abstract operations for the ReadableStream.
  1374. function AcquireReadableStreamBYOBReader(stream) {
  1375. return new ReadableStreamBYOBReader(stream);
  1376. }
  1377. function AcquireReadableStreamDefaultReader(stream) {
  1378. return new ReadableStreamDefaultReader(stream);
  1379. }
  1380. function IsReadableStream(x) {
  1381. if (!typeIsObject(x)) {
  1382. return false;
  1383. }
  1384. if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {
  1385. return false;
  1386. }
  1387. return true;
  1388. }
  1389. function IsReadableStreamDisturbed(stream) {
  1390. assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams');
  1391. return stream._disturbed;
  1392. }
  1393. function IsReadableStreamLocked(stream) {
  1394. assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams');
  1395. if (stream._reader === undefined) {
  1396. return false;
  1397. }
  1398. return true;
  1399. }
  1400. function ReadableStreamTee(stream, cloneForBranch2) {
  1401. assert(IsReadableStream(stream) === true);
  1402. assert(typeof cloneForBranch2 === 'boolean');
  1403. var reader = AcquireReadableStreamDefaultReader(stream);
  1404. var teeState = {
  1405. closedOrErrored: false,
  1406. canceled1: false,
  1407. canceled2: false,
  1408. reason1: undefined,
  1409. reason2: undefined
  1410. };
  1411. teeState.promise = new Promise(function (resolve) {
  1412. teeState._resolve = resolve;
  1413. });
  1414. var pull = create_ReadableStreamTeePullFunction();
  1415. pull._reader = reader;
  1416. pull._teeState = teeState;
  1417. pull._cloneForBranch2 = cloneForBranch2;
  1418. var cancel1 = create_ReadableStreamTeeBranch1CancelFunction();
  1419. cancel1._stream = stream;
  1420. cancel1._teeState = teeState;
  1421. var cancel2 = create_ReadableStreamTeeBranch2CancelFunction();
  1422. cancel2._stream = stream;
  1423. cancel2._teeState = teeState;
  1424. var underlyingSource1 = Object.create(Object.prototype);
  1425. createDataProperty(underlyingSource1, 'pull', pull);
  1426. createDataProperty(underlyingSource1, 'cancel', cancel1);
  1427. var branch1Stream = new ReadableStream(underlyingSource1);
  1428. var underlyingSource2 = Object.create(Object.prototype);
  1429. createDataProperty(underlyingSource2, 'pull', pull);
  1430. createDataProperty(underlyingSource2, 'cancel', cancel2);
  1431. var branch2Stream = new ReadableStream(underlyingSource2);
  1432. pull._branch1 = branch1Stream._readableStreamController;
  1433. pull._branch2 = branch2Stream._readableStreamController;
  1434. reader._closedPromise.catch(function (r) {
  1435. if (teeState.closedOrErrored === true) {
  1436. return;
  1437. }
  1438. ReadableStreamDefaultControllerError(pull._branch1, r);
  1439. ReadableStreamDefaultControllerError(pull._branch2, r);
  1440. teeState.closedOrErrored = true;
  1441. });
  1442. return [branch1Stream, branch2Stream];
  1443. }
  1444. function create_ReadableStreamTeePullFunction() {
  1445. function f() {
  1446. var reader = f._reader,
  1447. branch1 = f._branch1,
  1448. branch2 = f._branch2,
  1449. teeState = f._teeState;
  1450. return ReadableStreamDefaultReaderRead(reader).then(function (result) {
  1451. assert(typeIsObject(result));
  1452. var value = result.value;
  1453. var done = result.done;
  1454. assert(typeof done === 'boolean');
  1455. if (done === true && teeState.closedOrErrored === false) {
  1456. if (teeState.canceled1 === false) {
  1457. ReadableStreamDefaultControllerClose(branch1);
  1458. }
  1459. if (teeState.canceled2 === false) {
  1460. ReadableStreamDefaultControllerClose(branch2);
  1461. }
  1462. teeState.closedOrErrored = true;
  1463. }
  1464. if (teeState.closedOrErrored === true) {
  1465. return;
  1466. }
  1467. var value1 = value;
  1468. var value2 = value;
  1469. // There is no way to access the cloning code right now in the reference implementation.
  1470. // If we add one then we'll need an implementation for serializable objects.
  1471. // if (teeState.canceled2 === false && cloneForBranch2 === true) {
  1472. // value2 = StructuredDeserialize(StructuredSerialize(value2));
  1473. // }
  1474. if (teeState.canceled1 === false) {
  1475. ReadableStreamDefaultControllerEnqueue(branch1, value1);
  1476. }
  1477. if (teeState.canceled2 === false) {
  1478. ReadableStreamDefaultControllerEnqueue(branch2, value2);
  1479. }
  1480. });
  1481. }
  1482. return f;
  1483. }
  1484. function create_ReadableStreamTeeBranch1CancelFunction() {
  1485. function f(reason) {
  1486. var stream = f._stream,
  1487. teeState = f._teeState;
  1488. teeState.canceled1 = true;
  1489. teeState.reason1 = reason;
  1490. if (teeState.canceled2 === true) {
  1491. var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);
  1492. var cancelResult = ReadableStreamCancel(stream, compositeReason);
  1493. teeState._resolve(cancelResult);
  1494. }
  1495. return teeState.promise;
  1496. }
  1497. return f;
  1498. }
  1499. function create_ReadableStreamTeeBranch2CancelFunction() {
  1500. function f(reason) {
  1501. var stream = f._stream,
  1502. teeState = f._teeState;
  1503. teeState.canceled2 = true;
  1504. teeState.reason2 = reason;
  1505. if (teeState.canceled1 === true) {
  1506. var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);
  1507. var cancelResult = ReadableStreamCancel(stream, compositeReason);
  1508. teeState._resolve(cancelResult);
  1509. }
  1510. return teeState.promise;
  1511. }
  1512. return f;
  1513. }
  1514. // ReadableStream API exposed for controllers.
  1515. function ReadableStreamAddReadIntoRequest(stream) {
  1516. assert(IsReadableStreamBYOBReader(stream._reader) === true);
  1517. assert(stream._state === 'readable' || stream._state === 'closed');
  1518. var promise = new Promise(function (resolve, reject) {
  1519. var readIntoRequest = {
  1520. _resolve: resolve,
  1521. _reject: reject
  1522. };
  1523. stream._reader._readIntoRequests.push(readIntoRequest);
  1524. });
  1525. return promise;
  1526. }
  1527. function ReadableStreamAddReadRequest(stream) {
  1528. assert(IsReadableStreamDefaultReader(stream._reader) === true);
  1529. assert(stream._state === 'readable');
  1530. var promise = new Promise(function (resolve, reject) {
  1531. var readRequest = {
  1532. _resolve: resolve,
  1533. _reject: reject
  1534. };
  1535. stream._reader._readRequests.push(readRequest);
  1536. });
  1537. return promise;
  1538. }
  1539. function ReadableStreamCancel(stream, reason) {
  1540. stream._disturbed = true;
  1541. if (stream._state === 'closed') {
  1542. return Promise.resolve(undefined);
  1543. }
  1544. if (stream._state === 'errored') {
  1545. return Promise.reject(stream._storedError);
  1546. }
  1547. ReadableStreamClose(stream);
  1548. var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason);
  1549. return sourceCancelPromise.then(function () {
  1550. return undefined;
  1551. });
  1552. }
  1553. function ReadableStreamClose(stream) {
  1554. assert(stream._state === 'readable');
  1555. stream._state = 'closed';
  1556. var reader = stream._reader;
  1557. if (reader === undefined) {
  1558. return undefined;
  1559. }
  1560. if (IsReadableStreamDefaultReader(reader) === true) {
  1561. for (var i = 0; i < reader._readRequests.length; i++) {
  1562. var _resolve = reader._readRequests[i]._resolve;
  1563. _resolve(CreateIterResultObject(undefined, true));
  1564. }
  1565. reader._readRequests = [];
  1566. }
  1567. defaultReaderClosedPromiseResolve(reader);
  1568. return undefined;
  1569. }
  1570. function ReadableStreamError(stream, e) {
  1571. assert(IsReadableStream(stream) === true, 'stream must be ReadableStream');
  1572. assert(stream._state === 'readable', 'state must be readable');
  1573. stream._state = 'errored';
  1574. stream._storedError = e;
  1575. var reader = stream._reader;
  1576. if (reader === undefined) {
  1577. return undefined;
  1578. }
  1579. if (IsReadableStreamDefaultReader(reader) === true) {
  1580. for (var i = 0; i < reader._readRequests.length; i++) {
  1581. var readRequest = reader._readRequests[i];
  1582. readRequest._reject(e);
  1583. }
  1584. reader._readRequests = [];
  1585. } else {
  1586. assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader');
  1587. for (var _i = 0; _i < reader._readIntoRequests.length; _i++) {
  1588. var readIntoRequest = reader._readIntoRequests[_i];
  1589. readIntoRequest._reject(e);
  1590. }
  1591. reader._readIntoRequests = [];
  1592. }
  1593. defaultReaderClosedPromiseReject(reader, e);
  1594. reader._closedPromise.catch(function () {});
  1595. }
  1596. function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
  1597. var reader = stream._reader;
  1598. assert(reader._readIntoRequests.length > 0);
  1599. var readIntoRequest = reader._readIntoRequests.shift();
  1600. readIntoRequest._resolve(CreateIterResultObject(chunk, done));
  1601. }
  1602. function ReadableStreamFulfillReadRequest(stream, chunk, done) {
  1603. var reader = stream._reader;
  1604. assert(reader._readRequests.length > 0);
  1605. var readRequest = reader._readRequests.shift();
  1606. readRequest._resolve(CreateIterResultObject(chunk, done));
  1607. }
  1608. function ReadableStreamGetNumReadIntoRequests(stream) {
  1609. return stream._reader._readIntoRequests.length;
  1610. }
  1611. function ReadableStreamGetNumReadRequests(stream) {
  1612. return stream._reader._readRequests.length;
  1613. }
  1614. function ReadableStreamHasBYOBReader(stream) {
  1615. var reader = stream._reader;
  1616. if (reader === undefined) {
  1617. return false;
  1618. }
  1619. if (IsReadableStreamBYOBReader(reader) === false) {
  1620. return false;
  1621. }
  1622. return true;
  1623. }
  1624. function ReadableStreamHasDefaultReader(stream) {
  1625. var reader = stream._reader;
  1626. if (reader === undefined) {
  1627. return false;
  1628. }
  1629. if (IsReadableStreamDefaultReader(reader) === false) {
  1630. return false;
  1631. }
  1632. return true;
  1633. }
  1634. // Readers
  1635. var ReadableStreamDefaultReader = function () {
  1636. function ReadableStreamDefaultReader(stream) {
  1637. _classCallCheck(this, ReadableStreamDefaultReader);
  1638. if (IsReadableStream(stream) === false) {
  1639. throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance');
  1640. }
  1641. if (IsReadableStreamLocked(stream) === true) {
  1642. throw new TypeError('This stream has already been locked for exclusive reading by another reader');
  1643. }
  1644. ReadableStreamReaderGenericInitialize(this, stream);
  1645. this._readRequests = [];
  1646. }
  1647. _createClass(ReadableStreamDefaultReader, [{
  1648. key: 'cancel',
  1649. value: function cancel(reason) {
  1650. if (IsReadableStreamDefaultReader(this) === false) {
  1651. return Promise.reject(defaultReaderBrandCheckException('cancel'));
  1652. }
  1653. if (this._ownerReadableStream === undefined) {
  1654. return Promise.reject(readerLockException('cancel'));
  1655. }
  1656. return ReadableStreamReaderGenericCancel(this, reason);
  1657. }
  1658. }, {
  1659. key: 'read',
  1660. value: function read() {
  1661. if (IsReadableStreamDefaultReader(this) === false) {
  1662. return Promise.reject(defaultReaderBrandCheckException('read'));
  1663. }
  1664. if (this._ownerReadableStream === undefined) {
  1665. return Promise.reject(readerLockException('read from'));
  1666. }
  1667. return ReadableStreamDefaultReaderRead(this);
  1668. }
  1669. }, {
  1670. key: 'releaseLock',
  1671. value: function releaseLock() {
  1672. if (IsReadableStreamDefaultReader(this) === false) {
  1673. throw defaultReaderBrandCheckException('releaseLock');
  1674. }
  1675. if (this._ownerReadableStream === undefined) {
  1676. return;
  1677. }
  1678. if (this._readRequests.length > 0) {
  1679. throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
  1680. }
  1681. ReadableStreamReaderGenericRelease(this);
  1682. }
  1683. }, {
  1684. key: 'closed',
  1685. get: function get() {
  1686. if (IsReadableStreamDefaultReader(this) === false) {
  1687. return Promise.reject(defaultReaderBrandCheckException('closed'));
  1688. }
  1689. return this._closedPromise;
  1690. }
  1691. }]);
  1692. return ReadableStreamDefaultReader;
  1693. }();
  1694. var ReadableStreamBYOBReader = function () {
  1695. function ReadableStreamBYOBReader(stream) {
  1696. _classCallCheck(this, ReadableStreamBYOBReader);
  1697. if (!IsReadableStream(stream)) {
  1698. throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source');
  1699. }
  1700. if (IsReadableByteStreamController(stream._readableStreamController) === false) {
  1701. throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source');
  1702. }
  1703. if (IsReadableStreamLocked(stream)) {
  1704. throw new TypeError('This stream has already been locked for exclusive reading by another reader');
  1705. }
  1706. ReadableStreamReaderGenericInitialize(this, stream);
  1707. this._readIntoRequests = [];
  1708. }
  1709. _createClass(ReadableStreamBYOBReader, [{
  1710. key: 'cancel',
  1711. value: function cancel(reason) {
  1712. if (!IsReadableStreamBYOBReader(this)) {
  1713. return Promise.reject(byobReaderBrandCheckException('cancel'));
  1714. }
  1715. if (this._ownerReadableStream === undefined) {
  1716. return Promise.reject(readerLockException('cancel'));
  1717. }
  1718. return ReadableStreamReaderGenericCancel(this, reason);
  1719. }
  1720. }, {
  1721. key: 'read',
  1722. value: function read(view) {
  1723. if (!IsReadableStreamBYOBReader(this)) {
  1724. return Promise.reject(byobReaderBrandCheckException('read'));
  1725. }
  1726. if (this._ownerReadableStream === undefined) {
  1727. return Promise.reject(readerLockException('read from'));
  1728. }
  1729. if (!ArrayBuffer.isView(view)) {
  1730. return Promise.reject(new TypeError('view must be an array buffer view'));
  1731. }
  1732. if (view.byteLength === 0) {
  1733. return Promise.reject(new TypeError('view must have non-zero byteLength'));
  1734. }
  1735. return ReadableStreamBYOBReaderRead(this, view);
  1736. }
  1737. }, {
  1738. key: 'releaseLock',
  1739. value: function releaseLock() {
  1740. if (!IsReadableStreamBYOBReader(this)) {
  1741. throw byobReaderBrandCheckException('releaseLock');
  1742. }
  1743. if (this._ownerReadableStream === undefined) {
  1744. return;
  1745. }
  1746. if (this._readIntoRequests.length > 0) {
  1747. throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
  1748. }
  1749. ReadableStreamReaderGenericRelease(this);
  1750. }
  1751. }, {
  1752. key: 'closed',
  1753. get: function get() {
  1754. if (!IsReadableStreamBYOBReader(this)) {
  1755. return Promise.reject(byobReaderBrandCheckException('closed'));
  1756. }
  1757. return this._closedPromise;
  1758. }
  1759. }]);
  1760. return ReadableStreamBYOBReader;
  1761. }();
  1762. // Abstract operations for the readers.
  1763. function IsReadableStreamBYOBReader(x) {
  1764. if (!typeIsObject(x)) {
  1765. return false;
  1766. }
  1767. if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {
  1768. return false;
  1769. }
  1770. return true;
  1771. }
  1772. function IsReadableStreamDefaultReader(x) {
  1773. if (!typeIsObject(x)) {
  1774. return false;
  1775. }
  1776. if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {
  1777. return false;
  1778. }
  1779. return true;
  1780. }
  1781. function ReadableStreamReaderGenericInitialize(reader, stream) {
  1782. reader._ownerReadableStream = stream;
  1783. stream._reader = reader;
  1784. if (stream._state === 'readable') {
  1785. defaultReaderClosedPromiseInitialize(reader);
  1786. } else if (stream._state === 'closed') {
  1787. defaultReaderClosedPromiseInitializeAsResolved(reader);
  1788. } else {
  1789. assert(stream._state === 'errored', 'state must be errored');
  1790. defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
  1791. reader._closedPromise.catch(function () {});
  1792. }
  1793. }
  1794. // A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state
  1795. // check.
  1796. function ReadableStreamReaderGenericCancel(reader, reason) {
  1797. var stream = reader._ownerReadableStream;
  1798. assert(stream !== undefined);
  1799. return ReadableStreamCancel(stream, reason);
  1800. }
  1801. function ReadableStreamReaderGenericRelease(reader) {
  1802. assert(reader._ownerReadableStream !== undefined);
  1803. assert(reader._ownerReadableStream._reader === reader);
  1804. if (reader._ownerReadableStream._state === 'readable') {
  1805. defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness'));
  1806. } else {
  1807. defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness'));
  1808. }
  1809. reader._closedPromise.catch(function () {});
  1810. reader._ownerReadableStream._reader = undefined;
  1811. reader._ownerReadableStream = undefined;
  1812. }
  1813. function ReadableStreamBYOBReaderRead(reader, view) {
  1814. var stream = reader._ownerReadableStream;
  1815. assert(stream !== undefined);
  1816. stream._disturbed = true;
  1817. if (stream._state === 'errored') {
  1818. return Promise.reject(stream._storedError);
  1819. }
  1820. // Controllers must implement this.
  1821. return ReadableByteStreamControllerPullInto(stream._readableStreamController, view);
  1822. }
  1823. function ReadableStreamDefaultReaderRead(reader) {
  1824. var stream = reader._ownerReadableStream;
  1825. assert(stream !== undefined);
  1826. stream._disturbed = true;
  1827. if (stream._state === 'closed') {
  1828. return Promise.resolve(CreateIterResultObject(undefined, true));
  1829. }
  1830. if (stream._state === 'errored') {
  1831. return Promise.reject(stream._storedError);
  1832. }
  1833. assert(stream._state === 'readable');
  1834. return stream._readableStreamController.__pullSteps();
  1835. }
  1836. // Controllers
  1837. var ReadableStreamDefaultController = function () {
  1838. function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) {
  1839. _classCallCheck(this, ReadableStreamDefaultController);
  1840. if (IsReadableStream(stream) === false) {
  1841. throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance');
  1842. }
  1843. if (stream._readableStreamController !== undefined) {
  1844. throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor');
  1845. }
  1846. this._controlledReadableStream = stream;
  1847. this._underlyingSource = underlyingSource;
  1848. // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
  1849. this._queue = undefined;
  1850. this._queueTotalSize = undefined;
  1851. ResetQueue(this);
  1852. this._started = false;
  1853. this._closeRequested = false;
  1854. this._pullAgain = false;
  1855. this._pulling = false;
  1856. var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);
  1857. this._strategySize = normalizedStrategy.size;
  1858. this._strategyHWM = normalizedStrategy.highWaterMark;
  1859. var controller = this;
  1860. var startResult = InvokeOrNoop(underlyingSource, 'start', [this]);
  1861. Promise.resolve(startResult).then(function () {
  1862. controller._started = true;
  1863. assert(controller._pulling === false);
  1864. assert(controller._pullAgain === false);
  1865. ReadableStreamDefaultControllerCallPullIfNeeded(controller);
  1866. }, function (r) {
  1867. ReadableStreamDefaultControllerErrorIfNeeded(controller, r);
  1868. }).catch(rethrowAssertionErrorRejection);
  1869. }
  1870. _createClass(ReadableStreamDefaultController, [{
  1871. key: 'close',
  1872. value: function close() {
  1873. if (IsReadableStreamDefaultController(this) === false) {
  1874. throw defaultControllerBrandCheckException('close');
  1875. }
  1876. if (this._closeRequested === true) {
  1877. throw new TypeError('The stream has already been closed; do not close it again!');
  1878. }
  1879. var state = this._controlledReadableStream._state;
  1880. if (state !== 'readable') {
  1881. throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');
  1882. }
  1883. ReadableStreamDefaultControllerClose(this);
  1884. }
  1885. }, {
  1886. key: 'enqueue',
  1887. value: function enqueue(chunk) {
  1888. if (IsReadableStreamDefaultController(this) === false) {
  1889. throw defaultControllerBrandCheckException('enqueue');
  1890. }
  1891. if (this._closeRequested === true) {
  1892. throw new TypeError('stream is closed or draining');
  1893. }
  1894. var state = this._controlledReadableStream._state;
  1895. if (state !== 'readable') {
  1896. throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');
  1897. }
  1898. return ReadableStreamDefaultControllerEnqueue(this, chunk);
  1899. }
  1900. }, {
  1901. key: 'error',
  1902. value: function error(e) {
  1903. if (IsReadableStreamDefaultController(this) === false) {
  1904. throw defaultControllerBrandCheckException('error');
  1905. }
  1906. var stream = this._controlledReadableStream;
  1907. if (stream._state !== 'readable') {
  1908. throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');
  1909. }
  1910. ReadableStreamDefaultControllerError(this, e);
  1911. }
  1912. }, {
  1913. key: '__cancelSteps',
  1914. value: function __cancelSteps(reason) {
  1915. ResetQueue(this);
  1916. return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]);
  1917. }
  1918. }, {
  1919. key: '__pullSteps',
  1920. value: function __pullSteps() {
  1921. var stream = this._controlledReadableStream;
  1922. if (this._queue.length > 0) {
  1923. var chunk = DequeueValue(this);
  1924. if (this._closeRequested === true && this._queue.length === 0) {
  1925. ReadableStreamClose(stream);
  1926. } else {
  1927. ReadableStreamDefaultControllerCallPullIfNeeded(this);
  1928. }
  1929. return Promise.resolve(CreateIterResultObject(chunk, false));
  1930. }
  1931. var pendingPromise = ReadableStreamAddReadRequest(stream);
  1932. ReadableStreamDefaultControllerCallPullIfNeeded(this);
  1933. return pendingPromise;
  1934. }
  1935. }, {
  1936. key: 'desiredSize',
  1937. get: function get() {
  1938. if (IsReadableStreamDefaultController(this) === false) {
  1939. throw defaultControllerBrandCheckException('desiredSize');
  1940. }
  1941. return ReadableStreamDefaultControllerGetDesiredSize(this);
  1942. }
  1943. }]);
  1944. return ReadableStreamDefaultController;
  1945. }();
  1946. // Abstract operations for the ReadableStreamDefaultController.
  1947. function IsReadableStreamDefaultController(x) {
  1948. if (!typeIsObject(x)) {
  1949. return false;
  1950. }
  1951. if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) {
  1952. return false;
  1953. }
  1954. return true;
  1955. }
  1956. function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
  1957. var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
  1958. if (shouldPull === false) {
  1959. return undefined;
  1960. }
  1961. if (controller._pulling === true) {
  1962. controller._pullAgain = true;
  1963. return undefined;
  1964. }
  1965. assert(controller._pullAgain === false);
  1966. controller._pulling = true;
  1967. var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]);
  1968. pullPromise.then(function () {
  1969. controller._pulling = false;
  1970. if (controller._pullAgain === true) {
  1971. controller._pullAgain = false;
  1972. return ReadableStreamDefaultControllerCallPullIfNeeded(controller);
  1973. }
  1974. return undefined;
  1975. }, function (e) {
  1976. ReadableStreamDefaultControllerErrorIfNeeded(controller, e);
  1977. }).catch(rethrowAssertionErrorRejection);
  1978. return undefined;
  1979. }
  1980. function ReadableStreamDefaultControllerShouldCallPull(controller) {
  1981. var stream = controller._controlledReadableStream;
  1982. if (stream._state === 'closed' || stream._state === 'errored') {
  1983. return false;
  1984. }
  1985. if (controller._closeRequested === true) {
  1986. return false;
  1987. }
  1988. if (controller._started === false) {
  1989. return false;
  1990. }
  1991. if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
  1992. return true;
  1993. }
  1994. var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
  1995. if (desiredSize > 0) {
  1996. return true;
  1997. }
  1998. return false;
  1999. }
  2000. // A client of ReadableStreamDefaultController may use these functions directly to bypass state check.
  2001. function ReadableStreamDefaultControllerClose(controller) {
  2002. var stream = controller._controlledReadableStream;
  2003. assert(controller._closeRequested === false);
  2004. assert(stream._state === 'readable');
  2005. controller._closeRequested = true;
  2006. if (controller._queue.length === 0) {
  2007. ReadableStreamClose(stream);
  2008. }
  2009. }
  2010. function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
  2011. var stream = controller._controlledReadableStream;
  2012. assert(controller._closeRequested === false);
  2013. assert(stream._state === 'readable');
  2014. if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
  2015. ReadableStreamFulfillReadRequest(stream, chunk, false);
  2016. } else {
  2017. var chunkSize = 1;
  2018. if (controller._strategySize !== undefined) {
  2019. var strategySize = controller._strategySize;
  2020. try {
  2021. chunkSize = strategySize(chunk);
  2022. } catch (chunkSizeE) {
  2023. ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
  2024. throw chunkSizeE;
  2025. }
  2026. }
  2027. try {
  2028. EnqueueValueWithSize(controller, chunk, chunkSize);
  2029. } catch (enqueueE) {
  2030. ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
  2031. throw enqueueE;
  2032. }
  2033. }
  2034. ReadableStreamDefaultControllerCallPullIfNeeded(controller);
  2035. return undefined;
  2036. }
  2037. function ReadableStreamDefaultControllerError(controller, e) {
  2038. var stream = controller._controlledReadableStream;
  2039. assert(stream._state === 'readable');
  2040. ResetQueue(controller);
  2041. ReadableStreamError(stream, e);
  2042. }
  2043. function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) {
  2044. if (controller._controlledReadableStream._state === 'readable') {
  2045. ReadableStreamDefaultControllerError(controller, e);
  2046. }
  2047. }
  2048. function ReadableStreamDefaultControllerGetDesiredSize(controller) {
  2049. var stream = controller._controlledReadableStream;
  2050. var state = stream._state;
  2051. if (state === 'errored') {
  2052. return null;
  2053. }
  2054. if (state === 'closed') {
  2055. return 0;
  2056. }
  2057. return controller._strategyHWM - controller._queueTotalSize;
  2058. }
  2059. var ReadableStreamBYOBRequest = function () {
  2060. function ReadableStreamBYOBRequest(controller, view) {
  2061. _classCallCheck(this, ReadableStreamBYOBRequest);
  2062. this._associatedReadableByteStreamController = controller;
  2063. this._view = view;
  2064. }
  2065. _createClass(ReadableStreamBYOBRequest, [{
  2066. key: 'respond',
  2067. value: function respond(bytesWritten) {
  2068. if (IsReadableStreamBYOBRequest(this) === false) {
  2069. throw byobRequestBrandCheckException('respond');
  2070. }
  2071. if (this._associatedReadableByteStreamController === undefined) {
  2072. throw new TypeError('This BYOB request has been invalidated');
  2073. }
  2074. ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
  2075. }
  2076. }, {
  2077. key: 'respondWithNewView',
  2078. value: function respondWithNewView(view) {
  2079. if (IsReadableStreamBYOBRequest(this) === false) {
  2080. throw byobRequestBrandCheckException('respond');
  2081. }
  2082. if (this._associatedReadableByteStreamController === undefined) {
  2083. throw new TypeError('This BYOB request has been invalidated');
  2084. }
  2085. if (!ArrayBuffer.isView(view)) {
  2086. throw new TypeError('You can only respond with array buffer views');
  2087. }
  2088. ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
  2089. }
  2090. }, {
  2091. key: 'view',
  2092. get: function get() {
  2093. return this._view;
  2094. }
  2095. }]);
  2096. return ReadableStreamBYOBRequest;
  2097. }();
  2098. var ReadableByteStreamController = function () {
  2099. function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) {
  2100. _classCallCheck(this, ReadableByteStreamController);
  2101. if (IsReadableStream(stream) === false) {
  2102. throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source');
  2103. }
  2104. if (stream._readableStreamController !== undefined) {
  2105. throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source');
  2106. }
  2107. this._controlledReadableStream = stream;
  2108. this._underlyingByteSource = underlyingByteSource;
  2109. this._pullAgain = false;
  2110. this._pulling = false;
  2111. ReadableByteStreamControllerClearPendingPullIntos(this);
  2112. // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
  2113. this._queue = this._queueTotalSize = undefined;
  2114. ResetQueue(this);
  2115. this._closeRequested = false;
  2116. this._started = false;
  2117. this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark);
  2118. var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
  2119. if (autoAllocateChunkSize !== undefined) {
  2120. if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) {
  2121. throw new RangeError('autoAllocateChunkSize must be a positive integer');
  2122. }
  2123. }
  2124. this._autoAllocateChunkSize = autoAllocateChunkSize;
  2125. this._pendingPullIntos = [];
  2126. var controller = this;
  2127. var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]);
  2128. Promise.resolve(startResult).then(function () {
  2129. controller._started = true;
  2130. assert(controller._pulling === false);
  2131. assert(controller._pullAgain === false);
  2132. ReadableByteStreamControllerCallPullIfNeeded(controller);
  2133. }, function (r) {
  2134. if (stream._state === 'readable') {
  2135. ReadableByteStreamControllerError(controller, r);
  2136. }
  2137. }).catch(rethrowAssertionErrorRejection);
  2138. }
  2139. _createClass(ReadableByteStreamController, [{
  2140. key: 'close',
  2141. value: function close() {
  2142. if (IsReadableByteStreamController(this) === false) {
  2143. throw byteStreamControllerBrandCheckException('close');
  2144. }
  2145. if (this._closeRequested === true) {
  2146. throw new TypeError('The stream has already been closed; do not close it again!');
  2147. }
  2148. var state = this._controlledReadableStream._state;
  2149. if (state !== 'readable') {
  2150. throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');
  2151. }
  2152. ReadableByteStreamControllerClose(this);
  2153. }
  2154. }, {
  2155. key: 'enqueue',
  2156. value: function enqueue(chunk) {
  2157. if (IsReadableByteStreamController(this) === false) {
  2158. throw byteStreamControllerBrandCheckException('enqueue');
  2159. }
  2160. if (this._closeRequested === true) {
  2161. throw new TypeError('stream is closed or draining');
  2162. }
  2163. var state = this._controlledReadableStream._state;
  2164. if (state !== 'readable') {
  2165. throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');
  2166. }
  2167. if (!ArrayBuffer.isView(chunk)) {
  2168. throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController');
  2169. }
  2170. ReadableByteStreamControllerEnqueue(this, chunk);
  2171. }
  2172. }, {
  2173. key: 'error',
  2174. value: function error(e) {
  2175. if (IsReadableByteStreamController(this) === false) {
  2176. throw byteStreamControllerBrandCheckException('error');
  2177. }
  2178. var stream = this._controlledReadableStream;
  2179. if (stream._state !== 'readable') {
  2180. throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');
  2181. }
  2182. ReadableByteStreamControllerError(this, e);
  2183. }
  2184. }, {
  2185. key: '__cancelSteps',
  2186. value: function __cancelSteps(reason) {
  2187. if (this._pendingPullIntos.length > 0) {
  2188. var firstDescriptor = this._pendingPullIntos[0];
  2189. firstDescriptor.bytesFilled = 0;
  2190. }
  2191. ResetQueue(this);
  2192. return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]);
  2193. }
  2194. }, {
  2195. key: '__pullSteps',
  2196. value: function __pullSteps() {
  2197. var stream = this._controlledReadableStream;
  2198. assert(ReadableStreamHasDefaultReader(stream) === true);
  2199. if (this._queueTotalSize > 0) {
  2200. assert(ReadableStreamGetNumReadRequests(stream) === 0);
  2201. var entry = this._queue.shift();
  2202. this._queueTotalSize -= entry.byteLength;
  2203. ReadableByteStreamControllerHandleQueueDrain(this);
  2204. var view = void 0;
  2205. try {
  2206. view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
  2207. } catch (viewE) {
  2208. return Promise.reject(viewE);
  2209. }
  2210. return Promise.resolve(CreateIterResultObject(view, false));
  2211. }
  2212. var autoAllocateChunkSize = this._autoAllocateChunkSize;
  2213. if (autoAllocateChunkSize !== undefined) {
  2214. var buffer = void 0;
  2215. try {
  2216. buffer = new ArrayBuffer(autoAllocateChunkSize);
  2217. } catch (bufferE) {
  2218. return Promise.reject(bufferE);
  2219. }
  2220. var pullIntoDescriptor = {
  2221. buffer: buffer,
  2222. byteOffset: 0,
  2223. byteLength: autoAllocateChunkSize,
  2224. bytesFilled: 0,
  2225. elementSize: 1,
  2226. ctor: Uint8Array,
  2227. readerType: 'default'
  2228. };
  2229. this._pendingPullIntos.push(pullIntoDescriptor);
  2230. }
  2231. var promise = ReadableStreamAddReadRequest(stream);
  2232. ReadableByteStreamControllerCallPullIfNeeded(this);
  2233. return promise;
  2234. }
  2235. }, {
  2236. key: 'byobRequest',
  2237. get: function get() {
  2238. if (IsReadableByteStreamController(this) === false) {
  2239. throw byteStreamControllerBrandCheckException('byobRequest');
  2240. }
  2241. if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) {
  2242. var firstDescriptor = this._pendingPullIntos[0];
  2243. var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
  2244. this._byobRequest = new ReadableStreamBYOBRequest(this, view);
  2245. }
  2246. return this._byobRequest;
  2247. }
  2248. }, {
  2249. key: 'desiredSize',
  2250. get: function get() {
  2251. if (IsReadableByteStreamController(this) === false) {
  2252. throw byteStreamControllerBrandCheckException('desiredSize');
  2253. }
  2254. return ReadableByteStreamControllerGetDesiredSize(this);
  2255. }
  2256. }]);
  2257. return ReadableByteStreamController;
  2258. }();
  2259. // Abstract operations for the ReadableByteStreamController.
  2260. function IsReadableByteStreamController(x) {
  2261. if (!typeIsObject(x)) {
  2262. return false;
  2263. }
  2264. if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) {
  2265. return false;
  2266. }
  2267. return true;
  2268. }
  2269. function IsReadableStreamBYOBRequest(x) {
  2270. if (!typeIsObject(x)) {
  2271. return false;
  2272. }
  2273. if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {
  2274. return false;
  2275. }
  2276. return true;
  2277. }
  2278. function ReadableByteStreamControllerCallPullIfNeeded(controller) {
  2279. var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
  2280. if (shouldPull === false) {
  2281. return undefined;
  2282. }
  2283. if (controller._pulling === true) {
  2284. controller._pullAgain = true;
  2285. return undefined;
  2286. }
  2287. assert(controller._pullAgain === false);
  2288. controller._pulling = true;
  2289. // TODO: Test controller argument
  2290. var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]);
  2291. pullPromise.then(function () {
  2292. controller._pulling = false;
  2293. if (controller._pullAgain === true) {
  2294. controller._pullAgain = false;
  2295. ReadableByteStreamControllerCallPullIfNeeded(controller);
  2296. }
  2297. }, function (e) {
  2298. if (controller._controlledReadableStream._state === 'readable') {
  2299. ReadableByteStreamControllerError(controller, e);
  2300. }
  2301. }).catch(rethrowAssertionErrorRejection);
  2302. return undefined;
  2303. }
  2304. function ReadableByteStreamControllerClearPendingPullIntos(controller) {
  2305. ReadableByteStreamControllerInvalidateBYOBRequest(controller);
  2306. controller._pendingPullIntos = [];
  2307. }
  2308. function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
  2309. assert(stream._state !== 'errored', 'state must not be errored');
  2310. var done = false;
  2311. if (stream._state === 'closed') {
  2312. assert(pullIntoDescriptor.bytesFilled === 0);
  2313. done = true;
  2314. }
  2315. var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
  2316. if (pullIntoDescriptor.readerType === 'default') {
  2317. ReadableStreamFulfillReadRequest(stream, filledView, done);
  2318. } else {
  2319. assert(pullIntoDescriptor.readerType === 'byob');
  2320. ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
  2321. }
  2322. }
  2323. function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
  2324. var bytesFilled = pullIntoDescriptor.bytesFilled;
  2325. var elementSize = pullIntoDescriptor.elementSize;
  2326. assert(bytesFilled <= pullIntoDescriptor.byteLength);
  2327. assert(bytesFilled % elementSize === 0);
  2328. return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
  2329. }
  2330. function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
  2331. controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength });
  2332. controller._queueTotalSize += byteLength;
  2333. }
  2334. function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
  2335. var elementSize = pullIntoDescriptor.elementSize;
  2336. var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;
  2337. var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
  2338. var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
  2339. var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;
  2340. var totalBytesToCopyRemaining = maxBytesToCopy;
  2341. var ready = false;
  2342. if (maxAlignedBytes > currentAlignedBytes) {
  2343. totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
  2344. ready = true;
  2345. }
  2346. var queue = controller._queue;
  2347. while (totalBytesToCopyRemaining > 0) {
  2348. var headOfQueue = queue[0];
  2349. var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
  2350. var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
  2351. ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
  2352. if (headOfQueue.byteLength === bytesToCopy) {
  2353. queue.shift();
  2354. } else {
  2355. headOfQueue.byteOffset += bytesToCopy;
  2356. headOfQueue.byteLength -= bytesToCopy;
  2357. }
  2358. controller._queueTotalSize -= bytesToCopy;
  2359. ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
  2360. totalBytesToCopyRemaining -= bytesToCopy;
  2361. }
  2362. if (ready === false) {
  2363. assert(controller._queueTotalSize === 0, 'queue must be empty');
  2364. assert(pullIntoDescriptor.bytesFilled > 0);
  2365. assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);
  2366. }
  2367. return ready;
  2368. }
  2369. function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
  2370. assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor);
  2371. ReadableByteStreamControllerInvalidateBYOBRequest(controller);
  2372. pullIntoDescriptor.bytesFilled += size;
  2373. }
  2374. function ReadableByteStreamControllerHandleQueueDrain(controller) {
  2375. assert(controller._controlledReadableStream._state === 'readable');
  2376. if (controller._queueTotalSize === 0 && controller._closeRequested === true) {
  2377. ReadableStreamClose(controller._controlledReadableStream);
  2378. } else {
  2379. ReadableByteStreamControllerCallPullIfNeeded(controller);
  2380. }
  2381. }
  2382. function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
  2383. if (controller._byobRequest === undefined) {
  2384. return;
  2385. }
  2386. controller._byobRequest._associatedReadableByteStreamController = undefined;
  2387. controller._byobRequest._view = undefined;
  2388. controller._byobRequest = undefined;
  2389. }
  2390. function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
  2391. assert(controller._closeRequested === false);
  2392. while (controller._pendingPullIntos.length > 0) {
  2393. if (controller._queueTotalSize === 0) {
  2394. return;
  2395. }
  2396. var pullIntoDescriptor = controller._pendingPullIntos[0];
  2397. if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {
  2398. ReadableByteStreamControllerShiftPendingPullInto(controller);
  2399. ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);
  2400. }
  2401. }
  2402. }
  2403. function ReadableByteStreamControllerPullInto(controller, view) {
  2404. var stream = controller._controlledReadableStream;
  2405. var elementSize = 1;
  2406. if (view.constructor !== DataView) {
  2407. elementSize = view.constructor.BYTES_PER_ELEMENT;
  2408. }
  2409. var ctor = view.constructor;
  2410. var pullIntoDescriptor = {
  2411. buffer: view.buffer,
  2412. byteOffset: view.byteOffset,
  2413. byteLength: view.byteLength,
  2414. bytesFilled: 0,
  2415. elementSize: elementSize,
  2416. ctor: ctor,
  2417. readerType: 'byob'
  2418. };
  2419. if (controller._pendingPullIntos.length > 0) {
  2420. pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);
  2421. controller._pendingPullIntos.push(pullIntoDescriptor);
  2422. // No ReadableByteStreamControllerCallPullIfNeeded() call since:
  2423. // - No change happens on desiredSize
  2424. // - The source has already been notified of that there's at least 1 pending read(view)
  2425. return ReadableStreamAddReadIntoRequest(stream);
  2426. }
  2427. if (stream._state === 'closed') {
  2428. var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
  2429. return Promise.resolve(CreateIterResultObject(emptyView, true));
  2430. }
  2431. if (controller._queueTotalSize > 0) {
  2432. if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {
  2433. var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
  2434. ReadableByteStreamControllerHandleQueueDrain(controller);
  2435. return Promise.resolve(CreateIterResultObject(filledView, false));
  2436. }
  2437. if (controller._closeRequested === true) {
  2438. var e = new TypeError('Insufficient bytes to fill elements in the given buffer');
  2439. ReadableByteStreamControllerError(controller, e);
  2440. return Promise.reject(e);
  2441. }
  2442. }
  2443. pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);
  2444. controller._pendingPullIntos.push(pullIntoDescriptor);
  2445. var promise = ReadableStreamAddReadIntoRequest(stream);
  2446. ReadableByteStreamControllerCallPullIfNeeded(controller);
  2447. return promise;
  2448. }
  2449. function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
  2450. firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);
  2451. assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0');
  2452. var stream = controller._controlledReadableStream;
  2453. if (ReadableStreamHasBYOBReader(stream) === true) {
  2454. while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
  2455. var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
  2456. ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
  2457. }
  2458. }
  2459. }
  2460. function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
  2461. if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {
  2462. throw new RangeError('bytesWritten out of range');
  2463. }
  2464. ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
  2465. if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {
  2466. // TODO: Figure out whether we should detach the buffer or not here.
  2467. return;
  2468. }
  2469. ReadableByteStreamControllerShiftPendingPullInto(controller);
  2470. var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
  2471. if (remainderSize > 0) {
  2472. var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
  2473. var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);
  2474. ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);
  2475. }
  2476. pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);
  2477. pullIntoDescriptor.bytesFilled -= remainderSize;
  2478. ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);
  2479. ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
  2480. }
  2481. function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
  2482. var firstDescriptor = controller._pendingPullIntos[0];
  2483. var stream = controller._controlledReadableStream;
  2484. if (stream._state === 'closed') {
  2485. if (bytesWritten !== 0) {
  2486. throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');
  2487. }
  2488. ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);
  2489. } else {
  2490. assert(stream._state === 'readable');
  2491. ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
  2492. }
  2493. }
  2494. function ReadableByteStreamControllerShiftPendingPullInto(controller) {
  2495. var descriptor = controller._pendingPullIntos.shift();
  2496. ReadableByteStreamControllerInvalidateBYOBRequest(controller);
  2497. return descriptor;
  2498. }
  2499. function ReadableByteStreamControllerShouldCallPull(controller) {
  2500. var stream = controller._controlledReadableStream;
  2501. if (stream._state !== 'readable') {
  2502. return false;
  2503. }
  2504. if (controller._closeRequested === true) {
  2505. return false;
  2506. }
  2507. if (controller._started === false) {
  2508. return false;
  2509. }
  2510. if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
  2511. return true;
  2512. }
  2513. if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
  2514. return true;
  2515. }
  2516. if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) {
  2517. return true;
  2518. }
  2519. return false;
  2520. }
  2521. // A client of ReadableByteStreamController may use these functions directly to bypass state check.
  2522. function ReadableByteStreamControllerClose(controller) {
  2523. var stream = controller._controlledReadableStream;
  2524. assert(controller._closeRequested === false);
  2525. assert(stream._state === 'readable');
  2526. if (controller._queueTotalSize > 0) {
  2527. controller._closeRequested = true;
  2528. return;
  2529. }
  2530. if (controller._pendingPullIntos.length > 0) {
  2531. var firstPendingPullInto = controller._pendingPullIntos[0];
  2532. if (firstPendingPullInto.bytesFilled > 0) {
  2533. var e = new TypeError('Insufficient bytes to fill elements in the given buffer');
  2534. ReadableByteStreamControllerError(controller, e);
  2535. throw e;
  2536. }
  2537. }
  2538. ReadableStreamClose(stream);
  2539. }
  2540. function ReadableByteStreamControllerEnqueue(controller, chunk) {
  2541. var stream = controller._controlledReadableStream;
  2542. assert(controller._closeRequested === false);
  2543. assert(stream._state === 'readable');
  2544. var buffer = chunk.buffer;
  2545. var byteOffset = chunk.byteOffset;
  2546. var byteLength = chunk.byteLength;
  2547. var transferredBuffer = TransferArrayBuffer(buffer);
  2548. if (ReadableStreamHasDefaultReader(stream) === true) {
  2549. if (ReadableStreamGetNumReadRequests(stream) === 0) {
  2550. ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
  2551. } else {
  2552. assert(controller._queue.length === 0);
  2553. var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
  2554. ReadableStreamFulfillReadRequest(stream, transferredView, false);
  2555. }
  2556. } else if (ReadableStreamHasBYOBReader(stream) === true) {
  2557. // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.
  2558. ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
  2559. ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
  2560. } else {
  2561. assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked');
  2562. ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
  2563. }
  2564. }
  2565. function ReadableByteStreamControllerError(controller, e) {
  2566. var stream = controller._controlledReadableStream;
  2567. assert(stream._state === 'readable');
  2568. ReadableByteStreamControllerClearPendingPullIntos(controller);
  2569. ResetQueue(controller);
  2570. ReadableStreamError(stream, e);
  2571. }
  2572. function ReadableByteStreamControllerGetDesiredSize(controller) {
  2573. var stream = controller._controlledReadableStream;
  2574. var state = stream._state;
  2575. if (state === 'errored') {
  2576. return null;
  2577. }
  2578. if (state === 'closed') {
  2579. return 0;
  2580. }
  2581. return controller._strategyHWM - controller._queueTotalSize;
  2582. }
  2583. function ReadableByteStreamControllerRespond(controller, bytesWritten) {
  2584. bytesWritten = Number(bytesWritten);
  2585. if (IsFiniteNonNegativeNumber(bytesWritten) === false) {
  2586. throw new RangeError('bytesWritten must be a finite');
  2587. }
  2588. assert(controller._pendingPullIntos.length > 0);
  2589. ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
  2590. }
  2591. function ReadableByteStreamControllerRespondWithNewView(controller, view) {
  2592. assert(controller._pendingPullIntos.length > 0);
  2593. var firstDescriptor = controller._pendingPullIntos[0];
  2594. if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
  2595. throw new RangeError('The region specified by view does not match byobRequest');
  2596. }
  2597. if (firstDescriptor.byteLength !== view.byteLength) {
  2598. throw new RangeError('The buffer of view has different capacity than byobRequest');
  2599. }
  2600. firstDescriptor.buffer = view.buffer;
  2601. ReadableByteStreamControllerRespondInternal(controller, view.byteLength);
  2602. }
  2603. // Helper functions for the ReadableStream.
  2604. function streamBrandCheckException(name) {
  2605. return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream');
  2606. }
  2607. // Helper functions for the readers.
  2608. function readerLockException(name) {
  2609. return new TypeError('Cannot ' + name + ' a stream using a released reader');
  2610. }
  2611. // Helper functions for the ReadableStreamDefaultReader.
  2612. function defaultReaderBrandCheckException(name) {
  2613. return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader');
  2614. }
  2615. function defaultReaderClosedPromiseInitialize(reader) {
  2616. reader._closedPromise = new Promise(function (resolve, reject) {
  2617. reader._closedPromise_resolve = resolve;
  2618. reader._closedPromise_reject = reject;
  2619. });
  2620. }
  2621. function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
  2622. reader._closedPromise = Promise.reject(reason);
  2623. reader._closedPromise_resolve = undefined;
  2624. reader._closedPromise_reject = undefined;
  2625. }
  2626. function defaultReaderClosedPromiseInitializeAsResolved(reader) {
  2627. reader._closedPromise = Promise.resolve(undefined);
  2628. reader._closedPromise_resolve = undefined;
  2629. reader._closedPromise_reject = undefined;
  2630. }
  2631. function defaultReaderClosedPromiseReject(reader, reason) {
  2632. assert(reader._closedPromise_resolve !== undefined);
  2633. assert(reader._closedPromise_reject !== undefined);
  2634. reader._closedPromise_reject(reason);
  2635. reader._closedPromise_resolve = undefined;
  2636. reader._closedPromise_reject = undefined;
  2637. }
  2638. function defaultReaderClosedPromiseResetToRejected(reader, reason) {
  2639. assert(reader._closedPromise_resolve === undefined);
  2640. assert(reader._closedPromise_reject === undefined);
  2641. reader._closedPromise = Promise.reject(reason);
  2642. }
  2643. function defaultReaderClosedPromiseResolve(reader) {
  2644. assert(reader._closedPromise_resolve !== undefined);
  2645. assert(reader._closedPromise_reject !== undefined);
  2646. reader._closedPromise_resolve(undefined);
  2647. reader._closedPromise_resolve = undefined;
  2648. reader._closedPromise_reject = undefined;
  2649. }
  2650. // Helper functions for the ReadableStreamDefaultReader.
  2651. function byobReaderBrandCheckException(name) {
  2652. return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader');
  2653. }
  2654. // Helper functions for the ReadableStreamDefaultController.
  2655. function defaultControllerBrandCheckException(name) {
  2656. return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController');
  2657. }
  2658. // Helper functions for the ReadableStreamBYOBRequest.
  2659. function byobRequestBrandCheckException(name) {
  2660. return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest');
  2661. }
  2662. // Helper functions for the ReadableByteStreamController.
  2663. function byteStreamControllerBrandCheckException(name) {
  2664. return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController');
  2665. }
  2666. // Helper function for ReadableStream pipeThrough
  2667. function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) {
  2668. try {
  2669. // This relies on the brand-check that is enforced by Promise.prototype.then(). As with the rest of the reference
  2670. // implementation, it doesn't attempt to do the right thing if someone has modified the global environment.
  2671. Promise.prototype.then.call(promise, undefined, function () {});
  2672. } catch (e) {
  2673. // The brand check failed, therefore the internal slot is not present and there's nothing further to do.
  2674. }
  2675. }
  2676. /***/ }),
  2677. /* 5 */
  2678. /***/ (function(module, exports, __webpack_require__) {
  2679. "use strict";
  2680. var transformStream = __webpack_require__(6);
  2681. var readableStream = __webpack_require__(4);
  2682. var writableStream = __webpack_require__(2);
  2683. exports.TransformStream = transformStream.TransformStream;
  2684. exports.ReadableStream = readableStream.ReadableStream;
  2685. exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed;
  2686. exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose;
  2687. exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue;
  2688. exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError;
  2689. exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize;
  2690. exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter;
  2691. exports.IsWritableStream = writableStream.IsWritableStream;
  2692. exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked;
  2693. exports.WritableStream = writableStream.WritableStream;
  2694. exports.WritableStreamAbort = writableStream.WritableStreamAbort;
  2695. exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError;
  2696. exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation;
  2697. exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease;
  2698. exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite;
  2699. /***/ }),
  2700. /* 6 */
  2701. /***/ (function(module, exports, __webpack_require__) {
  2702. "use strict";
  2703. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  2704. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  2705. var _require = __webpack_require__(1),
  2706. assert = _require.assert;
  2707. var _require2 = __webpack_require__(0),
  2708. InvokeOrNoop = _require2.InvokeOrNoop,
  2709. PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback,
  2710. PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop,
  2711. typeIsObject = _require2.typeIsObject;
  2712. var _require3 = __webpack_require__(4),
  2713. ReadableStream = _require3.ReadableStream,
  2714. ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose,
  2715. ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue,
  2716. ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError,
  2717. ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize;
  2718. var _require4 = __webpack_require__(2),
  2719. WritableStream = _require4.WritableStream,
  2720. WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError;
  2721. // Methods on the transform stream controller object
  2722. function TransformStreamCloseReadable(transformStream) {
  2723. // console.log('TransformStreamCloseReadable()');
  2724. if (transformStream._errored === true) {
  2725. throw new TypeError('TransformStream is already errored');
  2726. }
  2727. if (transformStream._readableClosed === true) {
  2728. throw new TypeError('Readable side is already closed');
  2729. }
  2730. TransformStreamCloseReadableInternal(transformStream);
  2731. }
  2732. function TransformStreamEnqueueToReadable(transformStream, chunk) {
  2733. // console.log('TransformStreamEnqueueToReadable()');
  2734. if (transformStream._errored === true) {
  2735. throw new TypeError('TransformStream is already errored');
  2736. }
  2737. if (transformStream._readableClosed === true) {
  2738. throw new TypeError('Readable side is already closed');
  2739. }
  2740. // We throttle transformer.transform invocation based on the backpressure of the ReadableStream, but we still
  2741. // accept TransformStreamEnqueueToReadable() calls.
  2742. var controller = transformStream._readableController;
  2743. try {
  2744. ReadableStreamDefaultControllerEnqueue(controller, chunk);
  2745. } catch (e) {
  2746. // This happens when readableStrategy.size() throws.
  2747. // The ReadableStream has already errored itself.
  2748. transformStream._readableClosed = true;
  2749. TransformStreamErrorIfNeeded(transformStream, e);
  2750. throw transformStream._storedError;
  2751. }
  2752. var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
  2753. var maybeBackpressure = desiredSize <= 0;
  2754. if (maybeBackpressure === true && transformStream._backpressure === false) {
  2755. // This allows pull() again. When desiredSize is 0, it's possible that a pull() will happen immediately (but
  2756. // asynchronously) after this because of pending read()s and set _backpressure back to false.
  2757. //
  2758. // If pull() could be called from inside enqueue(), then this logic would be wrong. This cannot happen
  2759. // because there is always a promise pending from start() or pull() when _backpressure is false.
  2760. TransformStreamSetBackpressure(transformStream, true);
  2761. }
  2762. }
  2763. function TransformStreamError(transformStream, e) {
  2764. if (transformStream._errored === true) {
  2765. throw new TypeError('TransformStream is already errored');
  2766. }
  2767. TransformStreamErrorInternal(transformStream, e);
  2768. }
  2769. // Abstract operations.
  2770. function TransformStreamCloseReadableInternal(transformStream) {
  2771. assert(transformStream._errored === false);
  2772. assert(transformStream._readableClosed === false);
  2773. try {
  2774. ReadableStreamDefaultControllerClose(transformStream._readableController);
  2775. } catch (e) {
  2776. assert(false);
  2777. }
  2778. transformStream._readableClosed = true;
  2779. }
  2780. function TransformStreamErrorIfNeeded(transformStream, e) {
  2781. if (transformStream._errored === false) {
  2782. TransformStreamErrorInternal(transformStream, e);
  2783. }
  2784. }
  2785. function TransformStreamErrorInternal(transformStream, e) {
  2786. // console.log('TransformStreamErrorInternal()');
  2787. assert(transformStream._errored === false);
  2788. transformStream._errored = true;
  2789. transformStream._storedError = e;
  2790. if (transformStream._writableDone === false) {
  2791. WritableStreamDefaultControllerError(transformStream._writableController, e);
  2792. }
  2793. if (transformStream._readableClosed === false) {
  2794. ReadableStreamDefaultControllerError(transformStream._readableController, e);
  2795. }
  2796. }
  2797. // Used for preventing the next write() call on TransformStreamSink until there
  2798. // is no longer backpressure.
  2799. function TransformStreamReadableReadyPromise(transformStream) {
  2800. assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
  2801. if (transformStream._backpressure === false) {
  2802. return Promise.resolve();
  2803. }
  2804. assert(transformStream._backpressure === true, '_backpressure should have been initialized');
  2805. return transformStream._backpressureChangePromise;
  2806. }
  2807. function TransformStreamSetBackpressure(transformStream, backpressure) {
  2808. // console.log(`TransformStreamSetBackpressure(${backpressure})`);
  2809. // Passes also when called during construction.
  2810. assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed');
  2811. if (transformStream._backpressureChangePromise !== undefined) {
  2812. // The fulfillment value is just for a sanity check.
  2813. transformStream._backpressureChangePromise_resolve(backpressure);
  2814. }
  2815. transformStream._backpressureChangePromise = new Promise(function (resolve) {
  2816. transformStream._backpressureChangePromise_resolve = resolve;
  2817. });
  2818. transformStream._backpressureChangePromise.then(function (resolution) {
  2819. assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed');
  2820. });
  2821. transformStream._backpressure = backpressure;
  2822. }
  2823. function TransformStreamDefaultTransform(chunk, transformStreamController) {
  2824. var transformStream = transformStreamController._controlledTransformStream;
  2825. TransformStreamEnqueueToReadable(transformStream, chunk);
  2826. return Promise.resolve();
  2827. }
  2828. function TransformStreamTransform(transformStream, chunk) {
  2829. // console.log('TransformStreamTransform()');
  2830. assert(transformStream._errored === false);
  2831. assert(transformStream._transforming === false);
  2832. assert(transformStream._backpressure === false);
  2833. transformStream._transforming = true;
  2834. var transformer = transformStream._transformer;
  2835. var controller = transformStream._transformStreamController;
  2836. var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]);
  2837. return transformPromise.then(function () {
  2838. transformStream._transforming = false;
  2839. return TransformStreamReadableReadyPromise(transformStream);
  2840. }, function (e) {
  2841. TransformStreamErrorIfNeeded(transformStream, e);
  2842. return Promise.reject(e);
  2843. });
  2844. }
  2845. function IsTransformStreamDefaultController(x) {
  2846. if (!typeIsObject(x)) {
  2847. return false;
  2848. }
  2849. if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {
  2850. return false;
  2851. }
  2852. return true;
  2853. }
  2854. function IsTransformStream(x) {
  2855. if (!typeIsObject(x)) {
  2856. return false;
  2857. }
  2858. if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {
  2859. return false;
  2860. }
  2861. return true;
  2862. }
  2863. var TransformStreamSink = function () {
  2864. function TransformStreamSink(transformStream, startPromise) {
  2865. _classCallCheck(this, TransformStreamSink);
  2866. this._transformStream = transformStream;
  2867. this._startPromise = startPromise;
  2868. }
  2869. _createClass(TransformStreamSink, [{
  2870. key: 'start',
  2871. value: function start(c) {
  2872. var transformStream = this._transformStream;
  2873. transformStream._writableController = c;
  2874. return this._startPromise.then(function () {
  2875. return TransformStreamReadableReadyPromise(transformStream);
  2876. });
  2877. }
  2878. }, {
  2879. key: 'write',
  2880. value: function write(chunk) {
  2881. // console.log('TransformStreamSink.write()');
  2882. var transformStream = this._transformStream;
  2883. return TransformStreamTransform(transformStream, chunk);
  2884. }
  2885. }, {
  2886. key: 'abort',
  2887. value: function abort() {
  2888. var transformStream = this._transformStream;
  2889. transformStream._writableDone = true;
  2890. TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted'));
  2891. }
  2892. }, {
  2893. key: 'close',
  2894. value: function close() {
  2895. // console.log('TransformStreamSink.close()');
  2896. var transformStream = this._transformStream;
  2897. assert(transformStream._transforming === false);
  2898. transformStream._writableDone = true;
  2899. var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]);
  2900. // Return a promise that is fulfilled with undefined on success.
  2901. return flushPromise.then(function () {
  2902. if (transformStream._errored === true) {
  2903. return Promise.reject(transformStream._storedError);
  2904. }
  2905. if (transformStream._readableClosed === false) {
  2906. TransformStreamCloseReadableInternal(transformStream);
  2907. }
  2908. return Promise.resolve();
  2909. }).catch(function (r) {
  2910. TransformStreamErrorIfNeeded(transformStream, r);
  2911. return Promise.reject(transformStream._storedError);
  2912. });
  2913. }
  2914. }]);
  2915. return TransformStreamSink;
  2916. }();
  2917. var TransformStreamSource = function () {
  2918. function TransformStreamSource(transformStream, startPromise) {
  2919. _classCallCheck(this, TransformStreamSource);
  2920. this._transformStream = transformStream;
  2921. this._startPromise = startPromise;
  2922. }
  2923. _createClass(TransformStreamSource, [{
  2924. key: 'start',
  2925. value: function start(c) {
  2926. var transformStream = this._transformStream;
  2927. transformStream._readableController = c;
  2928. return this._startPromise.then(function () {
  2929. // Prevent the first pull() call until there is backpressure.
  2930. assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
  2931. if (transformStream._backpressure === true) {
  2932. return Promise.resolve();
  2933. }
  2934. assert(transformStream._backpressure === false, '_backpressure should have been initialized');
  2935. return transformStream._backpressureChangePromise;
  2936. });
  2937. }
  2938. }, {
  2939. key: 'pull',
  2940. value: function pull() {
  2941. // console.log('TransformStreamSource.pull()');
  2942. var transformStream = this._transformStream;
  2943. // Invariant. Enforced by the promises returned by start() and pull().
  2944. assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false');
  2945. assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
  2946. TransformStreamSetBackpressure(transformStream, false);
  2947. // Prevent the next pull() call until there is backpressure.
  2948. return transformStream._backpressureChangePromise;
  2949. }
  2950. }, {
  2951. key: 'cancel',
  2952. value: function cancel() {
  2953. var transformStream = this._transformStream;
  2954. transformStream._readableClosed = true;
  2955. TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled'));
  2956. }
  2957. }]);
  2958. return TransformStreamSource;
  2959. }();
  2960. var TransformStreamDefaultController = function () {
  2961. function TransformStreamDefaultController(transformStream) {
  2962. _classCallCheck(this, TransformStreamDefaultController);
  2963. if (IsTransformStream(transformStream) === false) {
  2964. throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance');
  2965. }
  2966. if (transformStream._transformStreamController !== undefined) {
  2967. throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor');
  2968. }
  2969. this._controlledTransformStream = transformStream;
  2970. }
  2971. _createClass(TransformStreamDefaultController, [{
  2972. key: 'enqueue',
  2973. value: function enqueue(chunk) {
  2974. if (IsTransformStreamDefaultController(this) === false) {
  2975. throw defaultControllerBrandCheckException('enqueue');
  2976. }
  2977. TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk);
  2978. }
  2979. }, {
  2980. key: 'close',
  2981. value: function close() {
  2982. if (IsTransformStreamDefaultController(this) === false) {
  2983. throw defaultControllerBrandCheckException('close');
  2984. }
  2985. TransformStreamCloseReadable(this._controlledTransformStream);
  2986. }
  2987. }, {
  2988. key: 'error',
  2989. value: function error(reason) {
  2990. if (IsTransformStreamDefaultController(this) === false) {
  2991. throw defaultControllerBrandCheckException('error');
  2992. }
  2993. TransformStreamError(this._controlledTransformStream, reason);
  2994. }
  2995. }, {
  2996. key: 'desiredSize',
  2997. get: function get() {
  2998. if (IsTransformStreamDefaultController(this) === false) {
  2999. throw defaultControllerBrandCheckException('desiredSize');
  3000. }
  3001. var transformStream = this._controlledTransformStream;
  3002. var readableController = transformStream._readableController;
  3003. return ReadableStreamDefaultControllerGetDesiredSize(readableController);
  3004. }
  3005. }]);
  3006. return TransformStreamDefaultController;
  3007. }();
  3008. var TransformStream = function () {
  3009. function TransformStream() {
  3010. var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  3011. _classCallCheck(this, TransformStream);
  3012. this._transformer = transformer;
  3013. var readableStrategy = transformer.readableStrategy,
  3014. writableStrategy = transformer.writableStrategy;
  3015. this._transforming = false;
  3016. this._errored = false;
  3017. this._storedError = undefined;
  3018. this._writableController = undefined;
  3019. this._readableController = undefined;
  3020. this._transformStreamController = undefined;
  3021. this._writableDone = false;
  3022. this._readableClosed = false;
  3023. this._backpressure = undefined;
  3024. this._backpressureChangePromise = undefined;
  3025. this._backpressureChangePromise_resolve = undefined;
  3026. this._transformStreamController = new TransformStreamDefaultController(this);
  3027. var startPromise_resolve = void 0;
  3028. var startPromise = new Promise(function (resolve) {
  3029. startPromise_resolve = resolve;
  3030. });
  3031. var source = new TransformStreamSource(this, startPromise);
  3032. this._readable = new ReadableStream(source, readableStrategy);
  3033. var sink = new TransformStreamSink(this, startPromise);
  3034. this._writable = new WritableStream(sink, writableStrategy);
  3035. assert(this._writableController !== undefined);
  3036. assert(this._readableController !== undefined);
  3037. var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController);
  3038. // Set _backpressure based on desiredSize. As there is no read() at this point, we can just interpret
  3039. // desiredSize being non-positive as backpressure.
  3040. TransformStreamSetBackpressure(this, desiredSize <= 0);
  3041. var transformStream = this;
  3042. var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]);
  3043. startPromise_resolve(startResult);
  3044. startPromise.catch(function (e) {
  3045. // The underlyingSink and underlyingSource will error the readable and writable ends on their own.
  3046. if (transformStream._errored === false) {
  3047. transformStream._errored = true;
  3048. transformStream._storedError = e;
  3049. }
  3050. });
  3051. }
  3052. _createClass(TransformStream, [{
  3053. key: 'readable',
  3054. get: function get() {
  3055. if (IsTransformStream(this) === false) {
  3056. throw streamBrandCheckException('readable');
  3057. }
  3058. return this._readable;
  3059. }
  3060. }, {
  3061. key: 'writable',
  3062. get: function get() {
  3063. if (IsTransformStream(this) === false) {
  3064. throw streamBrandCheckException('writable');
  3065. }
  3066. return this._writable;
  3067. }
  3068. }]);
  3069. return TransformStream;
  3070. }();
  3071. module.exports = { TransformStream: TransformStream };
  3072. // Helper functions for the TransformStreamDefaultController.
  3073. function defaultControllerBrandCheckException(name) {
  3074. return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController');
  3075. }
  3076. // Helper functions for the TransformStream.
  3077. function streamBrandCheckException(name) {
  3078. return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream');
  3079. }
  3080. /***/ }),
  3081. /* 7 */
  3082. /***/ (function(module, exports, __webpack_require__) {
  3083. module.exports = __webpack_require__(5);
  3084. /***/ })
  3085. /******/ ])));