parse.js.html 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <title>Code coverage report for tar/lib/parse.js</title>
  5. <meta charset="utf-8" />
  6. <link rel="stylesheet" href="../../prettify.css" />
  7. <link rel="stylesheet" href="../../base.css" />
  8. <meta name="viewport" content="width=device-width, initial-scale=1">
  9. <style type='text/css'>
  10. .coverage-summary .sorter {
  11. background-image: url(../../sort-arrow-sprite.png);
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div class='wrapper'>
  17. <div class='pad1'>
  18. <h1>
  19. <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> parse.js
  20. </h1>
  21. <div class='clearfix'>
  22. <div class='fl pad1y space-right2'>
  23. <span class="strong">100% </span>
  24. <span class="quiet">Statements</span>
  25. <span class='fraction'>242/242</span>
  26. </div>
  27. <div class='fl pad1y space-right2'>
  28. <span class="strong">100% </span>
  29. <span class="quiet">Branches</span>
  30. <span class='fraction'>155/155</span>
  31. </div>
  32. <div class='fl pad1y space-right2'>
  33. <span class="strong">100% </span>
  34. <span class="quiet">Functions</span>
  35. <span class='fraction'>24/24</span>
  36. </div>
  37. <div class='fl pad1y space-right2'>
  38. <span class="strong">100% </span>
  39. <span class="quiet">Lines</span>
  40. <span class='fraction'>236/236</span>
  41. </div>
  42. </div>
  43. </div>
  44. <div class='status-line high'></div>
  45. <pre><table class="coverage">
  46. <tr><td class="line-count quiet">1
  47. 2
  48. 3
  49. 4
  50. 5
  51. 6
  52. 7
  53. 8
  54. 9
  55. 10
  56. 11
  57. 12
  58. 13
  59. 14
  60. 15
  61. 16
  62. 17
  63. 18
  64. 19
  65. 20
  66. 21
  67. 22
  68. 23
  69. 24
  70. 25
  71. 26
  72. 27
  73. 28
  74. 29
  75. 30
  76. 31
  77. 32
  78. 33
  79. 34
  80. 35
  81. 36
  82. 37
  83. 38
  84. 39
  85. 40
  86. 41
  87. 42
  88. 43
  89. 44
  90. 45
  91. 46
  92. 47
  93. 48
  94. 49
  95. 50
  96. 51
  97. 52
  98. 53
  99. 54
  100. 55
  101. 56
  102. 57
  103. 58
  104. 59
  105. 60
  106. 61
  107. 62
  108. 63
  109. 64
  110. 65
  111. 66
  112. 67
  113. 68
  114. 69
  115. 70
  116. 71
  117. 72
  118. 73
  119. 74
  120. 75
  121. 76
  122. 77
  123. 78
  124. 79
  125. 80
  126. 81
  127. 82
  128. 83
  129. 84
  130. 85
  131. 86
  132. 87
  133. 88
  134. 89
  135. 90
  136. 91
  137. 92
  138. 93
  139. 94
  140. 95
  141. 96
  142. 97
  143. 98
  144. 99
  145. 100
  146. 101
  147. 102
  148. 103
  149. 104
  150. 105
  151. 106
  152. 107
  153. 108
  154. 109
  155. 110
  156. 111
  157. 112
  158. 113
  159. 114
  160. 115
  161. 116
  162. 117
  163. 118
  164. 119
  165. 120
  166. 121
  167. 122
  168. 123
  169. 124
  170. 125
  171. 126
  172. 127
  173. 128
  174. 129
  175. 130
  176. 131
  177. 132
  178. 133
  179. 134
  180. 135
  181. 136
  182. 137
  183. 138
  184. 139
  185. 140
  186. 141
  187. 142
  188. 143
  189. 144
  190. 145
  191. 146
  192. 147
  193. 148
  194. 149
  195. 150
  196. 151
  197. 152
  198. 153
  199. 154
  200. 155
  201. 156
  202. 157
  203. 158
  204. 159
  205. 160
  206. 161
  207. 162
  208. 163
  209. 164
  210. 165
  211. 166
  212. 167
  213. 168
  214. 169
  215. 170
  216. 171
  217. 172
  218. 173
  219. 174
  220. 175
  221. 176
  222. 177
  223. 178
  224. 179
  225. 180
  226. 181
  227. 182
  228. 183
  229. 184
  230. 185
  231. 186
  232. 187
  233. 188
  234. 189
  235. 190
  236. 191
  237. 192
  238. 193
  239. 194
  240. 195
  241. 196
  242. 197
  243. 198
  244. 199
  245. 200
  246. 201
  247. 202
  248. 203
  249. 204
  250. 205
  251. 206
  252. 207
  253. 208
  254. 209
  255. 210
  256. 211
  257. 212
  258. 213
  259. 214
  260. 215
  261. 216
  262. 217
  263. 218
  264. 219
  265. 220
  266. 221
  267. 222
  268. 223
  269. 224
  270. 225
  271. 226
  272. 227
  273. 228
  274. 229
  275. 230
  276. 231
  277. 232
  278. 233
  279. 234
  280. 235
  281. 236
  282. 237
  283. 238
  284. 239
  285. 240
  286. 241
  287. 242
  288. 243
  289. 244
  290. 245
  291. 246
  292. 247
  293. 248
  294. 249
  295. 250
  296. 251
  297. 252
  298. 253
  299. 254
  300. 255
  301. 256
  302. 257
  303. 258
  304. 259
  305. 260
  306. 261
  307. 262
  308. 263
  309. 264
  310. 265
  311. 266
  312. 267
  313. 268
  314. 269
  315. 270
  316. 271
  317. 272
  318. 273
  319. 274
  320. 275
  321. 276
  322. 277
  323. 278
  324. 279
  325. 280
  326. 281
  327. 282
  328. 283
  329. 284
  330. 285
  331. 286
  332. 287
  333. 288
  334. 289
  335. 290
  336. 291
  337. 292
  338. 293
  339. 294
  340. 295
  341. 296
  342. 297
  343. 298
  344. 299
  345. 300
  346. 301
  347. 302
  348. 303
  349. 304
  350. 305
  351. 306
  352. 307
  353. 308
  354. 309
  355. 310
  356. 311
  357. 312
  358. 313
  359. 314
  360. 315
  361. 316
  362. 317
  363. 318
  364. 319
  365. 320
  366. 321
  367. 322
  368. 323
  369. 324
  370. 325
  371. 326
  372. 327
  373. 328
  374. 329
  375. 330
  376. 331
  377. 332
  378. 333
  379. 334
  380. 335
  381. 336
  382. 337
  383. 338
  384. 339
  385. 340
  386. 341
  387. 342
  388. 343
  389. 344
  390. 345
  391. 346
  392. 347
  393. 348
  394. 349
  395. 350
  396. 351
  397. 352
  398. 353
  399. 354
  400. 355
  401. 356
  402. 357
  403. 358
  404. 359
  405. 360
  406. 361
  407. 362
  408. 363
  409. 364
  410. 365
  411. 366
  412. 367
  413. 368
  414. 369
  415. 370
  416. 371
  417. 372
  418. 373
  419. 374
  420. 375
  421. 376
  422. 377
  423. 378
  424. 379
  425. 380
  426. 381
  427. 382
  428. 383
  429. 384
  430. 385
  431. 386
  432. 387
  433. 388
  434. 389
  435. 390
  436. 391
  437. 392
  438. 393
  439. 394
  440. 395
  441. 396
  442. 397
  443. 398
  444. 399
  445. 400
  446. 401
  447. 402
  448. 403
  449. 404
  450. 405
  451. 406
  452. 407
  453. 408
  454. 409
  455. 410
  456. 411
  457. 412
  458. 413
  459. 414
  460. 415
  461. 416</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
  462. <span class="cline-any cline-neutral">&nbsp;</span>
  463. <span class="cline-any cline-neutral">&nbsp;</span>
  464. <span class="cline-any cline-neutral">&nbsp;</span>
  465. <span class="cline-any cline-neutral">&nbsp;</span>
  466. <span class="cline-any cline-neutral">&nbsp;</span>
  467. <span class="cline-any cline-neutral">&nbsp;</span>
  468. <span class="cline-any cline-neutral">&nbsp;</span>
  469. <span class="cline-any cline-neutral">&nbsp;</span>
  470. <span class="cline-any cline-neutral">&nbsp;</span>
  471. <span class="cline-any cline-neutral">&nbsp;</span>
  472. <span class="cline-any cline-neutral">&nbsp;</span>
  473. <span class="cline-any cline-neutral">&nbsp;</span>
  474. <span class="cline-any cline-neutral">&nbsp;</span>
  475. <span class="cline-any cline-neutral">&nbsp;</span>
  476. <span class="cline-any cline-neutral">&nbsp;</span>
  477. <span class="cline-any cline-neutral">&nbsp;</span>
  478. <span class="cline-any cline-neutral">&nbsp;</span>
  479. <span class="cline-any cline-neutral">&nbsp;</span>
  480. <span class="cline-any cline-neutral">&nbsp;</span>
  481. <span class="cline-any cline-neutral">&nbsp;</span>
  482. <span class="cline-any cline-neutral">&nbsp;</span>
  483. <span class="cline-any cline-yes">9x</span>
  484. <span class="cline-any cline-yes">9x</span>
  485. <span class="cline-any cline-yes">9x</span>
  486. <span class="cline-any cline-yes">9x</span>
  487. <span class="cline-any cline-yes">9x</span>
  488. <span class="cline-any cline-yes">9x</span>
  489. <span class="cline-any cline-yes">9x</span>
  490. <span class="cline-any cline-yes">9x</span>
  491. <span class="cline-any cline-yes">9x</span>
  492. <span class="cline-any cline-neutral">&nbsp;</span>
  493. <span class="cline-any cline-yes">9x</span>
  494. <span class="cline-any cline-yes">9x</span>
  495. <span class="cline-any cline-yes">9x</span>
  496. <span class="cline-any cline-yes">9x</span>
  497. <span class="cline-any cline-yes">9x</span>
  498. <span class="cline-any cline-yes">9x</span>
  499. <span class="cline-any cline-yes">9x</span>
  500. <span class="cline-any cline-yes">9x</span>
  501. <span class="cline-any cline-yes">9x</span>
  502. <span class="cline-any cline-yes">9x</span>
  503. <span class="cline-any cline-yes">9x</span>
  504. <span class="cline-any cline-yes">9x</span>
  505. <span class="cline-any cline-yes">9x</span>
  506. <span class="cline-any cline-yes">9x</span>
  507. <span class="cline-any cline-yes">9x</span>
  508. <span class="cline-any cline-yes">9x</span>
  509. <span class="cline-any cline-yes">9x</span>
  510. <span class="cline-any cline-yes">9x</span>
  511. <span class="cline-any cline-yes">9x</span>
  512. <span class="cline-any cline-yes">9x</span>
  513. <span class="cline-any cline-yes">9x</span>
  514. <span class="cline-any cline-yes">9x</span>
  515. <span class="cline-any cline-yes">9x</span>
  516. <span class="cline-any cline-yes">9x</span>
  517. <span class="cline-any cline-yes">9x</span>
  518. <span class="cline-any cline-yes">9x</span>
  519. <span class="cline-any cline-yes">9x</span>
  520. <span class="cline-any cline-neutral">&nbsp;</span>
  521. <span class="cline-any cline-yes">2032x</span>
  522. <span class="cline-any cline-neutral">&nbsp;</span>
  523. <span class="cline-any cline-yes">9x</span>
  524. <span class="cline-any cline-neutral">&nbsp;</span>
  525. <span class="cline-any cline-yes">742x</span>
  526. <span class="cline-any cline-yes">742x</span>
  527. <span class="cline-any cline-neutral">&nbsp;</span>
  528. <span class="cline-any cline-yes">742x</span>
  529. <span class="cline-any cline-yes">134x</span>
  530. <span class="cline-any cline-neutral">&nbsp;</span>
  531. <span class="cline-any cline-yes">608x</span>
  532. <span class="cline-any cline-yes">589x</span>
  533. <span class="cline-any cline-yes">589x</span>
  534. <span class="cline-any cline-yes">589x</span>
  535. <span class="cline-any cline-yes">589x</span>
  536. <span class="cline-any cline-neutral">&nbsp;</span>
  537. <span class="cline-any cline-neutral">&nbsp;</span>
  538. <span class="cline-any cline-yes">742x</span>
  539. <span class="cline-any cline-yes">742x</span>
  540. <span class="cline-any cline-yes">742x</span>
  541. <span class="cline-any cline-neutral">&nbsp;</span>
  542. <span class="cline-any cline-neutral">&nbsp;</span>
  543. <span class="cline-any cline-yes">742x</span>
  544. <span class="cline-any cline-yes">742x</span>
  545. <span class="cline-any cline-neutral">&nbsp;</span>
  546. <span class="cline-any cline-yes">742x</span>
  547. <span class="cline-any cline-yes">742x</span>
  548. <span class="cline-any cline-yes">742x</span>
  549. <span class="cline-any cline-yes">742x</span>
  550. <span class="cline-any cline-yes">742x</span>
  551. <span class="cline-any cline-yes">742x</span>
  552. <span class="cline-any cline-yes">742x</span>
  553. <span class="cline-any cline-yes">742x</span>
  554. <span class="cline-any cline-yes">742x</span>
  555. <span class="cline-any cline-yes">742x</span>
  556. <span class="cline-any cline-yes">742x</span>
  557. <span class="cline-any cline-yes">742x</span>
  558. <span class="cline-any cline-yes">36x</span>
  559. <span class="cline-any cline-yes">742x</span>
  560. <span class="cline-any cline-yes">34x</span>
  561. <span class="cline-any cline-neutral">&nbsp;</span>
  562. <span class="cline-any cline-neutral">&nbsp;</span>
  563. <span class="cline-any cline-neutral">&nbsp;</span>
  564. <span class="cline-any cline-yes">6101x</span>
  565. <span class="cline-any cline-neutral">&nbsp;</span>
  566. <span class="cline-any cline-yes">6101x</span>
  567. <span class="cline-any cline-yes">1834x</span>
  568. <span class="cline-any cline-yes">4267x</span>
  569. <span class="cline-any cline-yes">160x</span>
  570. <span class="cline-any cline-yes">4107x</span>
  571. <span class="cline-any cline-yes">40x</span>
  572. <span class="cline-any cline-neutral">&nbsp;</span>
  573. <span class="cline-any cline-yes">4067x</span>
  574. <span class="cline-any cline-yes">4067x</span>
  575. <span class="cline-any cline-yes">40x</span>
  576. <span class="cline-any cline-yes">4027x</span>
  577. <span class="cline-any cline-yes">40x</span>
  578. <span class="cline-any cline-neutral">&nbsp;</span>
  579. <span class="cline-any cline-yes">3987x</span>
  580. <span class="cline-any cline-neutral">&nbsp;</span>
  581. <span class="cline-any cline-yes">3987x</span>
  582. <span class="cline-any cline-yes">759x</span>
  583. <span class="cline-any cline-yes">260x</span>
  584. <span class="cline-any cline-yes">260x</span>
  585. <span class="cline-any cline-yes">260x</span>
  586. <span class="cline-any cline-yes">499x</span>
  587. <span class="cline-any cline-yes">455x</span>
  588. <span class="cline-any cline-yes">475x</span>
  589. <span class="cline-any cline-yes">455x</span>
  590. <span class="cline-any cline-neutral">&nbsp;</span>
  591. <span class="cline-any cline-neutral">&nbsp;</span>
  592. <span class="cline-any cline-neutral">&nbsp;</span>
  593. <span class="cline-any cline-yes">3228x</span>
  594. <span class="cline-any cline-yes">3228x</span>
  595. <span class="cline-any cline-yes">3228x</span>
  596. <span class="cline-any cline-yes">1070x</span>
  597. <span class="cline-any cline-yes">1070x</span>
  598. <span class="cline-any cline-neutral">&nbsp;</span>
  599. <span class="cline-any cline-yes">2158x</span>
  600. <span class="cline-any cline-yes">1028x</span>
  601. <span class="cline-any cline-neutral">&nbsp;</span>
  602. <span class="cline-any cline-yes">1130x</span>
  603. <span class="cline-any cline-yes">1130x</span>
  604. <span class="cline-any cline-neutral">&nbsp;</span>
  605. <span class="cline-any cline-neutral">&nbsp;</span>
  606. <span class="cline-any cline-yes">2158x</span>
  607. <span class="cline-any cline-yes">1675x</span>
  608. <span class="cline-any cline-yes">1675x</span>
  609. <span class="cline-any cline-neutral">&nbsp;</span>
  610. <span class="cline-any cline-yes">483x</span>
  611. <span class="cline-any cline-neutral">&nbsp;</span>
  612. <span class="cline-any cline-neutral">&nbsp;</span>
  613. <span class="cline-any cline-neutral">&nbsp;</span>
  614. <span class="cline-any cline-neutral">&nbsp;</span>
  615. <span class="cline-any cline-neutral">&nbsp;</span>
  616. <span class="cline-any cline-neutral">&nbsp;</span>
  617. <span class="cline-any cline-neutral">&nbsp;</span>
  618. <span class="cline-any cline-yes">4299x</span>
  619. <span class="cline-any cline-neutral">&nbsp;</span>
  620. <span class="cline-any cline-yes">4299x</span>
  621. <span class="cline-any cline-yes">1653x</span>
  622. <span class="cline-any cline-yes">1653x</span>
  623. <span class="cline-any cline-yes">2646x</span>
  624. <span class="cline-any cline-yes">490x</span>
  625. <span class="cline-any cline-neutral">&nbsp;</span>
  626. <span class="cline-any cline-yes">2156x</span>
  627. <span class="cline-any cline-yes">2156x</span>
  628. <span class="cline-any cline-yes">2150x</span>
  629. <span class="cline-any cline-yes">1288x</span>
  630. <span class="cline-any cline-yes">1288x</span>
  631. <span class="cline-any cline-neutral">&nbsp;</span>
  632. <span class="cline-any cline-neutral">&nbsp;</span>
  633. <span class="cline-any cline-neutral">&nbsp;</span>
  634. <span class="cline-any cline-yes">4293x</span>
  635. <span class="cline-any cline-neutral">&nbsp;</span>
  636. <span class="cline-any cline-neutral">&nbsp;</span>
  637. <span class="cline-any cline-neutral">&nbsp;</span>
  638. <span class="cline-any cline-yes">2947x</span>
  639. <span class="cline-any cline-neutral">&nbsp;</span>
  640. <span class="cline-any cline-yes">2941x</span>
  641. <span class="cline-any cline-neutral">&nbsp;</span>
  642. <span class="cline-any cline-neutral">&nbsp;</span>
  643. <span class="cline-any cline-neutral">&nbsp;</span>
  644. <span class="cline-any cline-neutral">&nbsp;</span>
  645. <span class="cline-any cline-neutral">&nbsp;</span>
  646. <span class="cline-any cline-neutral">&nbsp;</span>
  647. <span class="cline-any cline-neutral">&nbsp;</span>
  648. <span class="cline-any cline-yes">2478x</span>
  649. <span class="cline-any cline-yes">2478x</span>
  650. <span class="cline-any cline-yes">2478x</span>
  651. <span class="cline-any cline-yes">2468x</span>
  652. <span class="cline-any cline-yes">516x</span>
  653. <span class="cline-any cline-neutral">&nbsp;</span>
  654. <span class="cline-any cline-yes">10x</span>
  655. <span class="cline-any cline-neutral">&nbsp;</span>
  656. <span class="cline-any cline-neutral">&nbsp;</span>
  657. <span class="cline-any cline-neutral">&nbsp;</span>
  658. <span class="cline-any cline-neutral">&nbsp;</span>
  659. <span class="cline-any cline-neutral">&nbsp;</span>
  660. <span class="cline-any cline-yes">2194x</span>
  661. <span class="cline-any cline-yes">2194x</span>
  662. <span class="cline-any cline-yes">2194x</span>
  663. <span class="cline-any cline-neutral">&nbsp;</span>
  664. <span class="cline-any cline-neutral">&nbsp;</span>
  665. <span class="cline-any cline-yes">2194x</span>
  666. <span class="cline-any cline-neutral">&nbsp;</span>
  667. <span class="cline-any cline-yes">2194x</span>
  668. <span class="cline-any cline-yes">2121x</span>
  669. <span class="cline-any cline-yes">2121x</span>
  670. <span class="cline-any cline-yes">2121x</span>
  671. <span class="cline-any cline-neutral">&nbsp;</span>
  672. <span class="cline-any cline-neutral">&nbsp;</span>
  673. <span class="cline-any cline-yes">2194x</span>
  674. <span class="cline-any cline-neutral">&nbsp;</span>
  675. <span class="cline-any cline-neutral">&nbsp;</span>
  676. <span class="cline-any cline-neutral">&nbsp;</span>
  677. <span class="cline-any cline-yes">475x</span>
  678. <span class="cline-any cline-yes">475x</span>
  679. <span class="cline-any cline-neutral">&nbsp;</span>
  680. <span class="cline-any cline-neutral">&nbsp;</span>
  681. <span class="cline-any cline-yes">475x</span>
  682. <span class="cline-any cline-yes">455x</span>
  683. <span class="cline-any cline-neutral">&nbsp;</span>
  684. <span class="cline-any cline-yes">475x</span>
  685. <span class="cline-any cline-neutral">&nbsp;</span>
  686. <span class="cline-any cline-neutral">&nbsp;</span>
  687. <span class="cline-any cline-neutral">&nbsp;</span>
  688. <span class="cline-any cline-yes">4328x</span>
  689. <span class="cline-any cline-yes">3815x</span>
  690. <span class="cline-any cline-neutral">&nbsp;</span>
  691. <span class="cline-any cline-yes">513x</span>
  692. <span class="cline-any cline-neutral">&nbsp;</span>
  693. <span class="cline-any cline-neutral">&nbsp;</span>
  694. <span class="cline-any cline-neutral">&nbsp;</span>
  695. <span class="cline-any cline-yes">455x</span>
  696. <span class="cline-any cline-yes">455x</span>
  697. <span class="cline-any cline-neutral">&nbsp;</span>
  698. <span class="cline-any cline-neutral">&nbsp;</span>
  699. <span class="cline-any cline-yes">351x</span>
  700. <span class="cline-any cline-yes">351x</span>
  701. <span class="cline-any cline-neutral">&nbsp;</span>
  702. <span class="cline-any cline-neutral">&nbsp;</span>
  703. <span class="cline-any cline-yes">44x</span>
  704. <span class="cline-any cline-yes">44x</span>
  705. <span class="cline-any cline-neutral">&nbsp;</span>
  706. <span class="cline-any cline-neutral">&nbsp;</span>
  707. <span class="cline-any cline-neutral">&nbsp;</span>
  708. <span class="cline-any cline-yes">40x</span>
  709. <span class="cline-any cline-yes">40x</span>
  710. <span class="cline-any cline-yes">40x</span>
  711. <span class="cline-any cline-neutral">&nbsp;</span>
  712. <span class="cline-any cline-neutral">&nbsp;</span>
  713. <span class="cline-any cline-yes">20x</span>
  714. <span class="cline-any cline-yes">20x</span>
  715. <span class="cline-any cline-yes">20x</span>
  716. <span class="cline-any cline-neutral">&nbsp;</span>
  717. <span class="cline-any cline-neutral">&nbsp;</span>
  718. <span class="cline-any cline-neutral">&nbsp;</span>
  719. <span class="cline-any cline-neutral">&nbsp;</span>
  720. <span class="cline-any cline-neutral">&nbsp;</span>
  721. <span class="cline-any cline-neutral">&nbsp;</span>
  722. <span class="cline-any cline-neutral">&nbsp;</span>
  723. <span class="cline-any cline-yes">2x</span>
  724. <span class="cline-any cline-yes">2x</span>
  725. <span class="cline-any cline-yes">2x</span>
  726. <span class="cline-any cline-neutral">&nbsp;</span>
  727. <span class="cline-any cline-neutral">&nbsp;</span>
  728. <span class="cline-any cline-neutral">&nbsp;</span>
  729. <span class="cline-any cline-yes">669590x</span>
  730. <span class="cline-any cline-yes">1x</span>
  731. <span class="cline-any cline-neutral">&nbsp;</span>
  732. <span class="cline-any cline-neutral">&nbsp;</span>
  733. <span class="cline-any cline-yes">669589x</span>
  734. <span class="cline-any cline-yes">944x</span>
  735. <span class="cline-any cline-yes">224x</span>
  736. <span class="cline-any cline-yes">224x</span>
  737. <span class="cline-any cline-neutral">&nbsp;</span>
  738. <span class="cline-any cline-yes">944x</span>
  739. <span class="cline-any cline-yes">224x</span>
  740. <span class="cline-any cline-yes">224x</span>
  741. <span class="cline-any cline-neutral">&nbsp;</span>
  742. <span class="cline-any cline-yes">720x</span>
  743. <span class="cline-any cline-yes">947x</span>
  744. <span class="cline-any cline-yes">493x</span>
  745. <span class="cline-any cline-neutral">&nbsp;</span>
  746. <span class="cline-any cline-yes">720x</span>
  747. <span class="cline-any cline-yes">227x</span>
  748. <span class="cline-any cline-yes">227x</span>
  749. <span class="cline-any cline-yes">227x</span>
  750. <span class="cline-any cline-yes">20164x</span>
  751. <span class="cline-any cline-yes">227x</span>
  752. <span class="cline-any cline-yes">2x</span>
  753. <span class="cline-any cline-yes">227x</span>
  754. <span class="cline-any cline-yes">226x</span>
  755. <span class="cline-any cline-yes">226x</span>
  756. <span class="cline-any cline-neutral">&nbsp;</span>
  757. <span class="cline-any cline-yes">227x</span>
  758. <span class="cline-any cline-neutral">&nbsp;</span>
  759. <span class="cline-any cline-neutral">&nbsp;</span>
  760. <span class="cline-any cline-neutral">&nbsp;</span>
  761. <span class="cline-any cline-yes">669138x</span>
  762. <span class="cline-any cline-yes">669138x</span>
  763. <span class="cline-any cline-yes">33586x</span>
  764. <span class="cline-any cline-neutral">&nbsp;</span>
  765. <span class="cline-any cline-yes">635552x</span>
  766. <span class="cline-any cline-yes">669132x</span>
  767. <span class="cline-any cline-neutral">&nbsp;</span>
  768. <span class="cline-any cline-neutral">&nbsp;</span>
  769. <span class="cline-any cline-neutral">&nbsp;</span>
  770. <span class="cline-any cline-yes">669132x</span>
  771. <span class="cline-any cline-neutral">&nbsp;</span>
  772. <span class="cline-any cline-neutral">&nbsp;</span>
  773. <span class="cline-any cline-neutral">&nbsp;</span>
  774. <span class="cline-any cline-neutral">&nbsp;</span>
  775. <span class="cline-any cline-yes">669132x</span>
  776. <span class="cline-any cline-yes">63x</span>
  777. <span class="cline-any cline-neutral">&nbsp;</span>
  778. <span class="cline-any cline-yes">669132x</span>
  779. <span class="cline-any cline-neutral">&nbsp;</span>
  780. <span class="cline-any cline-neutral">&nbsp;</span>
  781. <span class="cline-any cline-neutral">&nbsp;</span>
  782. <span class="cline-any cline-yes">652869x</span>
  783. <span class="cline-any cline-yes">652866x</span>
  784. <span class="cline-any cline-neutral">&nbsp;</span>
  785. <span class="cline-any cline-neutral">&nbsp;</span>
  786. <span class="cline-any cline-neutral">&nbsp;</span>
  787. <span class="cline-any cline-yes">3449x</span>
  788. <span class="cline-any cline-yes">709x</span>
  789. <span class="cline-any cline-yes">709x</span>
  790. <span class="cline-any cline-yes">709x</span>
  791. <span class="cline-any cline-yes">2x</span>
  792. <span class="cline-any cline-yes">2x</span>
  793. <span class="cline-any cline-neutral">&nbsp;</span>
  794. <span class="cline-any cline-yes">2x</span>
  795. <span class="cline-any cline-yes">1x</span>
  796. <span class="cline-any cline-yes">2x</span>
  797. <span class="cline-any cline-neutral">&nbsp;</span>
  798. <span class="cline-any cline-yes">709x</span>
  799. <span class="cline-any cline-neutral">&nbsp;</span>
  800. <span class="cline-any cline-neutral">&nbsp;</span>
  801. <span class="cline-any cline-neutral">&nbsp;</span>
  802. <span class="cline-any cline-neutral">&nbsp;</span>
  803. <span class="cline-any cline-yes">655942x</span>
  804. <span class="cline-any cline-yes">10x</span>
  805. <span class="cline-any cline-yes">655932x</span>
  806. <span class="cline-any cline-yes">381x</span>
  807. <span class="cline-any cline-neutral">&nbsp;</span>
  808. <span class="cline-any cline-yes">655551x</span>
  809. <span class="cline-any cline-yes">655551x</span>
  810. <span class="cline-any cline-yes">652859x</span>
  811. <span class="cline-any cline-yes">652859x</span>
  812. <span class="cline-any cline-yes">652859x</span>
  813. <span class="cline-any cline-yes">652859x</span>
  814. <span class="cline-any cline-neutral">&nbsp;</span>
  815. <span class="cline-any cline-yes">2692x</span>
  816. <span class="cline-any cline-neutral">&nbsp;</span>
  817. <span class="cline-any cline-neutral">&nbsp;</span>
  818. <span class="cline-any cline-yes">655545x</span>
  819. <span class="cline-any cline-yes">2x</span>
  820. <span class="cline-any cline-yes">2x</span>
  821. <span class="cline-any cline-yes">2x</span>
  822. <span class="cline-any cline-neutral">&nbsp;</span>
  823. <span class="cline-any cline-yes">655545x</span>
  824. <span class="cline-any cline-neutral">&nbsp;</span>
  825. <span class="cline-any cline-neutral">&nbsp;</span>
  826. <span class="cline-any cline-yes">655936x</span>
  827. <span class="cline-any cline-yes">3068x</span>
  828. <span class="cline-any cline-neutral">&nbsp;</span>
  829. <span class="cline-any cline-neutral">&nbsp;</span>
  830. <span class="cline-any cline-neutral">&nbsp;</span>
  831. <span class="cline-any cline-neutral">&nbsp;</span>
  832. <span class="cline-any cline-neutral">&nbsp;</span>
  833. <span class="cline-any cline-yes">655553x</span>
  834. <span class="cline-any cline-yes">655553x</span>
  835. <span class="cline-any cline-yes">655553x</span>
  836. <span class="cline-any cline-yes">8295x</span>
  837. <span class="cline-any cline-neutral">&nbsp;</span>
  838. <span class="cline-any cline-yes">6101x</span>
  839. <span class="cline-any cline-yes">6095x</span>
  840. <span class="cline-any cline-yes">6095x</span>
  841. <span class="cline-any cline-neutral">&nbsp;</span>
  842. <span class="cline-any cline-neutral">&nbsp;</span>
  843. <span class="cline-any cline-neutral">&nbsp;</span>
  844. <span class="cline-any cline-yes">1719x</span>
  845. <span class="cline-any cline-yes">1719x</span>
  846. <span class="cline-any cline-neutral">&nbsp;</span>
  847. <span class="cline-any cline-neutral">&nbsp;</span>
  848. <span class="cline-any cline-yes">475x</span>
  849. <span class="cline-any cline-yes">475x</span>
  850. <span class="cline-any cline-neutral">&nbsp;</span>
  851. <span class="cline-any cline-neutral">&nbsp;</span>
  852. <span class="cline-any cline-neutral">&nbsp;</span>
  853. <span class="cline-any cline-neutral">&nbsp;</span>
  854. <span class="cline-any cline-neutral">&nbsp;</span>
  855. <span class="cline-any cline-neutral">&nbsp;</span>
  856. <span class="cline-any cline-neutral">&nbsp;</span>
  857. <span class="cline-any cline-yes">655547x</span>
  858. <span class="cline-any cline-yes">652863x</span>
  859. <span class="cline-any cline-yes">1x</span>
  860. <span class="cline-any cline-neutral">&nbsp;</span>
  861. <span class="cline-any cline-yes">652862x</span>
  862. <span class="cline-any cline-neutral">&nbsp;</span>
  863. <span class="cline-any cline-neutral">&nbsp;</span>
  864. <span class="cline-any cline-neutral">&nbsp;</span>
  865. <span class="cline-any cline-neutral">&nbsp;</span>
  866. <span class="cline-any cline-yes">718x</span>
  867. <span class="cline-any cline-yes">717x</span>
  868. <span class="cline-any cline-yes">113x</span>
  869. <span class="cline-any cline-neutral">&nbsp;</span>
  870. <span class="cline-any cline-yes">604x</span>
  871. <span class="cline-any cline-yes">604x</span>
  872. <span class="cline-any cline-neutral">&nbsp;</span>
  873. <span class="cline-any cline-neutral">&nbsp;</span>
  874. <span class="cline-any cline-neutral">&nbsp;</span>
  875. <span class="cline-any cline-neutral">&nbsp;</span>
  876. <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
  877. &nbsp;
  878. // this[BUFFER] is the remainder of a chunk if we're waiting for
  879. // the full 512 bytes of a header to come in. We will Buffer.concat()
  880. // it to the next write(), which is a mem copy, but a small one.
  881. //
  882. // this[QUEUE] is a Yallist of entries that haven't been emitted
  883. // yet this can only get filled up if the user keeps write()ing after
  884. // a write() returns false, or does a write() with more than one entry
  885. //
  886. // We don't buffer chunks, we always parse them and either create an
  887. // entry, or push it into the active entry. The ReadEntry class knows
  888. // to throw data away if .ignore=true
  889. //
  890. // Shift entry off the buffer when it emits 'end', and emit 'entry' for
  891. // the next one in the list.
  892. //
  893. // At any time, we're pushing body chunks into the entry at WRITEENTRY,
  894. // and waiting for 'end' on the entry at READENTRY
  895. //
  896. // ignored entries get .resume() called on them straight away
  897. &nbsp;
  898. const warner = require('./warn-mixin.js')
  899. const path = require('path')
  900. const Header = require('./header.js')
  901. const EE = require('events')
  902. const Yallist = require('yallist')
  903. const maxMetaEntrySize = 1024 * 1024
  904. const Entry = require('./read-entry.js')
  905. const Pax = require('./pax.js')
  906. const zlib = require('minizlib')
  907. &nbsp;
  908. const gzipHeader = new Buffer([0x1f, 0x8b])
  909. const STATE = Symbol('state')
  910. const WRITEENTRY = Symbol('writeEntry')
  911. const READENTRY = Symbol('readEntry')
  912. const NEXTENTRY = Symbol('nextEntry')
  913. const PROCESSENTRY = Symbol('processEntry')
  914. const EX = Symbol('extendedHeader')
  915. const GEX = Symbol('globalExtendedHeader')
  916. const META = Symbol('meta')
  917. const EMITMETA = Symbol('emitMeta')
  918. const BUFFER = Symbol('buffer')
  919. const QUEUE = Symbol('queue')
  920. const ENDED = Symbol('ended')
  921. const EMITTEDEND = Symbol('emittedEnd')
  922. const EMIT = Symbol('emit')
  923. const UNZIP = Symbol('unzip')
  924. const CONSUMECHUNK = Symbol('consumeChunk')
  925. const CONSUMECHUNKSUB = Symbol('consumeChunkSub')
  926. const CONSUMEBODY = Symbol('consumeBody')
  927. const CONSUMEMETA = Symbol('consumeMeta')
  928. const CONSUMEHEADER = Symbol('consumeHeader')
  929. const CONSUMING = Symbol('consuming')
  930. const BUFFERCONCAT = Symbol('bufferConcat')
  931. const MAYBEEND = Symbol('maybeEnd')
  932. const WRITING = Symbol('writing')
  933. const ABORTED = Symbol('aborted')
  934. const DONE = Symbol('onDone')
  935. &nbsp;
  936. const noop = _ =&gt; true
  937. &nbsp;
  938. module.exports = warner(class Parser extends EE {
  939. constructor (opt) {
  940. opt = opt || {}
  941. super(opt)
  942. &nbsp;
  943. if (opt.ondone)
  944. this.on(DONE, opt.ondone)
  945. else
  946. this.on(DONE, _ =&gt; {
  947. this.emit('prefinish')
  948. this.emit('finish')
  949. this.emit('end')
  950. this.emit('close')
  951. })
  952. &nbsp;
  953. this.strict = !!opt.strict
  954. this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize
  955. this.filter = typeof opt.filter === 'function' ? opt.filter : noop
  956. &nbsp;
  957. // have to set this so that streams are ok piping into it
  958. this.writable = true
  959. this.readable = false
  960. &nbsp;
  961. this[QUEUE] = new Yallist()
  962. this[BUFFER] = null
  963. this[READENTRY] = null
  964. this[WRITEENTRY] = null
  965. this[STATE] = 'begin'
  966. this[META] = ''
  967. this[EX] = null
  968. this[GEX] = null
  969. this[ENDED] = false
  970. this[UNZIP] = null
  971. this[ABORTED] = false
  972. if (typeof opt.onwarn === 'function')
  973. this.on('warn', opt.onwarn)
  974. if (typeof opt.onentry === 'function')
  975. this.on('entry', opt.onentry)
  976. }
  977. &nbsp;
  978. [CONSUMEHEADER] (chunk, position) {
  979. const header = new Header(chunk, position)
  980. &nbsp;
  981. if (header.nullBlock)
  982. this[EMIT]('nullBlock')
  983. else if (!header.cksumValid)
  984. this.warn('invalid entry', header)
  985. else if (!header.path)
  986. this.warn('invalid: path is required', header)
  987. else {
  988. const type = header.type
  989. if (/^(Symbolic)?Link$/.test(type) &amp;&amp; !header.linkpath)
  990. this.warn('invalid: linkpath required', header)
  991. else if (!/^(Symbolic)?Link$/.test(type) &amp;&amp; header.linkpath)
  992. this.warn('invalid: linkpath forbidden', header)
  993. else {
  994. const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX])
  995. &nbsp;
  996. if (entry.meta) {
  997. if (entry.size &gt; this.maxMetaEntrySize) {
  998. entry.ignore = true
  999. this[EMIT]('ignoredEntry', entry)
  1000. this[STATE] = 'ignore'
  1001. } else if (entry.size &gt; 0) {
  1002. this[META] = ''
  1003. entry.on('data', c =&gt; this[META] += c)
  1004. this[STATE] = 'meta'
  1005. }
  1006. } else {
  1007. &nbsp;
  1008. this[EX] = null
  1009. entry.ignore = entry.ignore || !this.filter(entry.path, entry)
  1010. if (entry.ignore) {
  1011. this[EMIT]('ignoredEntry', entry)
  1012. this[STATE] = entry.remain ? 'ignore' : 'begin'
  1013. } else {
  1014. if (entry.remain)
  1015. this[STATE] = 'body'
  1016. else {
  1017. this[STATE] = 'begin'
  1018. entry.end()
  1019. }
  1020. &nbsp;
  1021. if (!this[READENTRY]) {
  1022. this[QUEUE].push(entry)
  1023. this[NEXTENTRY]()
  1024. } else
  1025. this[QUEUE].push(entry)
  1026. }
  1027. }
  1028. }
  1029. }
  1030. }
  1031. &nbsp;
  1032. [PROCESSENTRY] (entry) {
  1033. let go = true
  1034. &nbsp;
  1035. if (!entry) {
  1036. this[READENTRY] = null
  1037. go = false
  1038. } else if (Array.isArray(entry))
  1039. this.emit.apply(this, entry)
  1040. else {
  1041. this[READENTRY] = entry
  1042. this.emit('entry', entry)
  1043. if (!entry.emittedEnd) {
  1044. entry.on('end', _ =&gt; this[NEXTENTRY]())
  1045. go = false
  1046. }
  1047. }
  1048. &nbsp;
  1049. return go
  1050. }
  1051. &nbsp;
  1052. [NEXTENTRY] () {
  1053. do {} while (this[PROCESSENTRY](this[QUEUE].shift()))
  1054. &nbsp;
  1055. if (!this[QUEUE].length) {
  1056. // At this point, there's nothing in the queue, but we may have an
  1057. // entry which is being consumed (readEntry).
  1058. // If we don't, then we definitely can handle more data.
  1059. // If we do, and either it's flowing, or it has never had any data
  1060. // written to it, then it needs more.
  1061. // The only other possibility is that it has returned false from a
  1062. // write() call, so we wait for the next drain to continue.
  1063. const re = this[READENTRY]
  1064. const drainNow = !re || re.flowing || re.size === re.remain
  1065. if (drainNow) {
  1066. if (!this[WRITING])
  1067. this.emit('drain')
  1068. } else
  1069. re.once('drain', _ =&gt; this.emit('drain'))
  1070. }
  1071. }
  1072. &nbsp;
  1073. [CONSUMEBODY] (chunk, position) {
  1074. // write up to but no more than writeEntry.blockRemain
  1075. const entry = this[WRITEENTRY]
  1076. const br = entry.blockRemain
  1077. const c = (br &gt;= chunk.length &amp;&amp; position === 0) ? chunk
  1078. : chunk.slice(position, position + br)
  1079. &nbsp;
  1080. entry.write(c)
  1081. &nbsp;
  1082. if (!entry.blockRemain) {
  1083. this[STATE] = 'begin'
  1084. this[WRITEENTRY] = null
  1085. entry.end()
  1086. }
  1087. &nbsp;
  1088. return c.length
  1089. }
  1090. &nbsp;
  1091. [CONSUMEMETA] (chunk, position) {
  1092. const entry = this[WRITEENTRY]
  1093. const ret = this[CONSUMEBODY](chunk, position)
  1094. &nbsp;
  1095. // if we finished, then the entry is reset
  1096. if (!this[WRITEENTRY])
  1097. this[EMITMETA](entry)
  1098. &nbsp;
  1099. return ret
  1100. }
  1101. &nbsp;
  1102. [EMIT] (ev, data, extra) {
  1103. if (!this[QUEUE].length &amp;&amp; !this[READENTRY])
  1104. this.emit(ev, data, extra)
  1105. else
  1106. this[QUEUE].push([ev, data, extra])
  1107. }
  1108. &nbsp;
  1109. [EMITMETA] (entry) {
  1110. this[EMIT]('meta', this[META])
  1111. switch (entry.type) {
  1112. case 'ExtendedHeader':
  1113. case 'OldExtendedHeader':
  1114. this[EX] = Pax.parse(this[META], this[EX], false)
  1115. break
  1116. &nbsp;
  1117. case 'GlobalExtendedHeader':
  1118. this[GEX] = Pax.parse(this[META], this[GEX], true)
  1119. break
  1120. &nbsp;
  1121. case 'NextFileHasLongPath':
  1122. case 'OldGnuLongPath':
  1123. this[EX] = this[EX] || Object.create(null)
  1124. this[EX].path = this[META].replace(/\0.*/, '')
  1125. break
  1126. &nbsp;
  1127. case 'NextFileHasLongLinkpath':
  1128. this[EX] = this[EX] || Object.create(null)
  1129. this[EX].linkpath = this[META].replace(/\0.*/, '')
  1130. break
  1131. &nbsp;
  1132. /* istanbul ignore next */
  1133. default: throw new Error('unknown meta: ' + entry.type)
  1134. }
  1135. }
  1136. &nbsp;
  1137. abort (msg, error) {
  1138. this[ABORTED] = true
  1139. this.warn(msg, error)
  1140. this.emit('abort')
  1141. }
  1142. &nbsp;
  1143. write (chunk) {
  1144. if (this[ABORTED])
  1145. return
  1146. &nbsp;
  1147. // first write, might be gzipped
  1148. if (this[UNZIP] === null &amp;&amp; chunk) {
  1149. if (this[BUFFER]) {
  1150. chunk = Buffer.concat([this[BUFFER], chunk])
  1151. this[BUFFER] = null
  1152. }
  1153. if (chunk.length &lt; gzipHeader.length) {
  1154. this[BUFFER] = chunk
  1155. return true
  1156. }
  1157. for (let i = 0; this[UNZIP] === null &amp;&amp; i &lt; gzipHeader.length; i++) {
  1158. if (chunk[i] !== gzipHeader[i])
  1159. this[UNZIP] = false
  1160. }
  1161. if (this[UNZIP] === null) {
  1162. const ended = this[ENDED]
  1163. this[ENDED] = false
  1164. this[UNZIP] = new zlib.Unzip()
  1165. this[UNZIP].on('data', chunk =&gt; this[CONSUMECHUNK](chunk))
  1166. this[UNZIP].on('error', er =&gt;
  1167. this.abort('zlib error: ' + er.message, er))
  1168. this[UNZIP].on('end', _ =&gt; {
  1169. this[ENDED] = true
  1170. this[CONSUMECHUNK]()
  1171. })
  1172. return ended ? this[UNZIP].end(chunk) : this[UNZIP].write(chunk)
  1173. }
  1174. }
  1175. &nbsp;
  1176. this[WRITING] = true
  1177. if (this[UNZIP])
  1178. this[UNZIP].write(chunk)
  1179. else
  1180. this[CONSUMECHUNK](chunk)
  1181. this[WRITING] = false
  1182. &nbsp;
  1183. // return false if there's a queue, or if the current entry isn't flowing
  1184. const ret =
  1185. this[QUEUE].length ? false :
  1186. this[READENTRY] ? this[READENTRY].flowing :
  1187. true
  1188. &nbsp;
  1189. // if we have no queue, then that means a clogged READENTRY
  1190. if (!ret &amp;&amp; !this[QUEUE].length)
  1191. this[READENTRY].once('drain', _ =&gt; this.emit('drain'))
  1192. &nbsp;
  1193. return ret
  1194. }
  1195. &nbsp;
  1196. [BUFFERCONCAT] (c) {
  1197. if (c &amp;&amp; !this[ABORTED])
  1198. this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c
  1199. }
  1200. &nbsp;
  1201. [MAYBEEND] () {
  1202. if (this[ENDED] &amp;&amp; !this[EMITTEDEND] &amp;&amp; !this[ABORTED]) {
  1203. this[EMITTEDEND] = true
  1204. const entry = this[WRITEENTRY]
  1205. if (entry &amp;&amp; entry.blockRemain) {
  1206. const have = this[BUFFER] ? this[BUFFER].length : 0
  1207. this.warn('Truncated input (needed ' + entry.blockRemain +
  1208. ' more bytes, only ' + have + ' available)', entry)
  1209. if (this[BUFFER])
  1210. entry.write(this[BUFFER])
  1211. entry.end()
  1212. }
  1213. this[EMIT](DONE)
  1214. }
  1215. }
  1216. &nbsp;
  1217. [CONSUMECHUNK] (chunk) {
  1218. if (this[CONSUMING]) {
  1219. this[BUFFERCONCAT](chunk)
  1220. } else if (!chunk &amp;&amp; !this[BUFFER]) {
  1221. this[MAYBEEND]()
  1222. } else {
  1223. this[CONSUMING] = true
  1224. if (this[BUFFER]) {
  1225. this[BUFFERCONCAT](chunk)
  1226. const c = this[BUFFER]
  1227. this[BUFFER] = null
  1228. this[CONSUMECHUNKSUB](c)
  1229. } else {
  1230. this[CONSUMECHUNKSUB](chunk)
  1231. }
  1232. &nbsp;
  1233. while (this[BUFFER] &amp;&amp; this[BUFFER].length &gt;= 512 &amp;&amp; !this[ABORTED]) {
  1234. const c = this[BUFFER]
  1235. this[BUFFER] = null
  1236. this[CONSUMECHUNKSUB](c)
  1237. }
  1238. this[CONSUMING] = false
  1239. }
  1240. &nbsp;
  1241. if (!this[BUFFER] || this[ENDED])
  1242. this[MAYBEEND]()
  1243. }
  1244. &nbsp;
  1245. [CONSUMECHUNKSUB] (chunk) {
  1246. // we know that we are in CONSUMING mode, so anything written goes into
  1247. // the buffer. Advance the position and put any remainder in the buffer.
  1248. let position = 0
  1249. let length = chunk.length
  1250. while (position + 512 &lt;= length &amp;&amp; !this[ABORTED]) {
  1251. switch (this[STATE]) {
  1252. case 'begin':
  1253. this[CONSUMEHEADER](chunk, position)
  1254. position += 512
  1255. break
  1256. &nbsp;
  1257. case 'ignore':
  1258. case 'body':
  1259. position += this[CONSUMEBODY](chunk, position)
  1260. break
  1261. &nbsp;
  1262. case 'meta':
  1263. position += this[CONSUMEMETA](chunk, position)
  1264. break
  1265. &nbsp;
  1266. /* istanbul ignore next */
  1267. default:
  1268. throw new Error('invalid state: ' + this[STATE])
  1269. }
  1270. }
  1271. &nbsp;
  1272. if (position &lt; length) {
  1273. if (this[BUFFER])
  1274. this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]])
  1275. else
  1276. this[BUFFER] = chunk.slice(position)
  1277. }
  1278. }
  1279. &nbsp;
  1280. end (chunk) {
  1281. if (!this[ABORTED]) {
  1282. if (this[UNZIP])
  1283. this[UNZIP].end(chunk)
  1284. else {
  1285. this[ENDED] = true
  1286. this.write(chunk)
  1287. }
  1288. }
  1289. }
  1290. })
  1291. &nbsp;</pre></td></tr>
  1292. </table></pre>
  1293. <div class='push'></div><!-- for sticky footer -->
  1294. </div><!-- /wrapper -->
  1295. <div class='footer quiet pad2 space-top1 center small'>
  1296. Code coverage
  1297. generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
  1298. </div>
  1299. </div>
  1300. <script src="../../prettify.js"></script>
  1301. <script>
  1302. window.onload = function () {
  1303. if (typeof prettyPrint === 'function') {
  1304. prettyPrint();
  1305. }
  1306. };
  1307. </script>
  1308. <script src="../../sorter.js"></script>
  1309. </body>
  1310. </html>