unpack.js.html 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <title>Code coverage report for tar/lib/unpack.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> unpack.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'>254/254</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'>194/194</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'>44/44</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'>247/247</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
  462. 417
  463. 418
  464. 419
  465. 420
  466. 421
  467. 422
  468. 423
  469. 424
  470. 425
  471. 426
  472. 427
  473. 428
  474. 429
  475. 430
  476. 431
  477. 432
  478. 433
  479. 434
  480. 435
  481. 436
  482. 437
  483. 438
  484. 439
  485. 440
  486. 441
  487. 442
  488. 443
  489. 444
  490. 445
  491. 446
  492. 447
  493. 448
  494. 449
  495. 450
  496. 451
  497. 452
  498. 453
  499. 454
  500. 455
  501. 456
  502. 457
  503. 458
  504. 459
  505. 460
  506. 461
  507. 462
  508. 463
  509. 464
  510. 465
  511. 466
  512. 467
  513. 468
  514. 469
  515. 470
  516. 471
  517. 472
  518. 473
  519. 474
  520. 475
  521. 476
  522. 477
  523. 478
  524. 479
  525. 480
  526. 481
  527. 482
  528. 483
  529. 484
  530. 485
  531. 486
  532. 487
  533. 488
  534. 489
  535. 490
  536. 491
  537. 492
  538. 493
  539. 494
  540. 495
  541. 496
  542. 497
  543. 498
  544. 499
  545. 500
  546. 501
  547. 502
  548. 503
  549. 504
  550. 505
  551. 506
  552. 507
  553. 508
  554. 509
  555. 510
  556. 511
  557. 512
  558. 513
  559. 514</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
  560. <span class="cline-any cline-neutral">&nbsp;</span>
  561. <span class="cline-any cline-yes">3x</span>
  562. <span class="cline-any cline-yes">3x</span>
  563. <span class="cline-any cline-yes">3x</span>
  564. <span class="cline-any cline-yes">3x</span>
  565. <span class="cline-any cline-yes">3x</span>
  566. <span class="cline-any cline-yes">3x</span>
  567. <span class="cline-any cline-yes">3x</span>
  568. <span class="cline-any cline-yes">3x</span>
  569. <span class="cline-any cline-yes">3x</span>
  570. <span class="cline-any cline-neutral">&nbsp;</span>
  571. <span class="cline-any cline-yes">3x</span>
  572. <span class="cline-any cline-yes">3x</span>
  573. <span class="cline-any cline-yes">3x</span>
  574. <span class="cline-any cline-yes">3x</span>
  575. <span class="cline-any cline-yes">3x</span>
  576. <span class="cline-any cline-yes">3x</span>
  577. <span class="cline-any cline-yes">3x</span>
  578. <span class="cline-any cline-yes">3x</span>
  579. <span class="cline-any cline-yes">3x</span>
  580. <span class="cline-any cline-yes">3x</span>
  581. <span class="cline-any cline-yes">3x</span>
  582. <span class="cline-any cline-yes">3x</span>
  583. <span class="cline-any cline-yes">3x</span>
  584. <span class="cline-any cline-yes">3x</span>
  585. <span class="cline-any cline-yes">3x</span>
  586. <span class="cline-any cline-yes">3x</span>
  587. <span class="cline-any cline-yes">3x</span>
  588. <span class="cline-any cline-yes">3x</span>
  589. <span class="cline-any cline-yes">3x</span>
  590. <span class="cline-any cline-yes">3x</span>
  591. <span class="cline-any cline-yes">3x</span>
  592. <span class="cline-any cline-yes">3x</span>
  593. <span class="cline-any cline-neutral">&nbsp;</span>
  594. <span class="cline-any cline-neutral">&nbsp;</span>
  595. <span class="cline-any cline-yes">3x</span>
  596. <span class="cline-any cline-yes">60x</span>
  597. <span class="cline-any cline-neutral">&nbsp;</span>
  598. <span class="cline-any cline-neutral">&nbsp;</span>
  599. <span class="cline-any cline-neutral">&nbsp;</span>
  600. <span class="cline-any cline-neutral">&nbsp;</span>
  601. <span class="cline-any cline-neutral">&nbsp;</span>
  602. <span class="cline-any cline-yes">134x</span>
  603. <span class="cline-any cline-yes">4x</span>
  604. <span class="cline-any cline-neutral">&nbsp;</span>
  605. <span class="cline-any cline-yes">134x</span>
  606. <span class="cline-any cline-yes">109x</span>
  607. <span class="cline-any cline-yes">109x</span>
  608. <span class="cline-any cline-neutral">&nbsp;</span>
  609. <span class="cline-any cline-neutral">&nbsp;</span>
  610. <span class="cline-any cline-yes">134x</span>
  611. <span class="cline-any cline-neutral">&nbsp;</span>
  612. <span class="cline-any cline-yes">134x</span>
  613. <span class="cline-any cline-yes">134x</span>
  614. <span class="cline-any cline-neutral">&nbsp;</span>
  615. <span class="cline-any cline-yes">134x</span>
  616. <span class="cline-any cline-yes">134x</span>
  617. <span class="cline-any cline-neutral">&nbsp;</span>
  618. <span class="cline-any cline-yes">134x</span>
  619. <span class="cline-any cline-neutral">&nbsp;</span>
  620. <span class="cline-any cline-yes">134x</span>
  621. <span class="cline-any cline-neutral">&nbsp;</span>
  622. <span class="cline-any cline-yes">9x</span>
  623. <span class="cline-any cline-yes">2x</span>
  624. <span class="cline-any cline-yes">7x</span>
  625. <span class="cline-any cline-yes">1x</span>
  626. <span class="cline-any cline-neutral">&nbsp;</span>
  627. <span class="cline-any cline-yes">6x</span>
  628. <span class="cline-any cline-yes">6x</span>
  629. <span class="cline-any cline-yes">6x</span>
  630. <span class="cline-any cline-neutral">&nbsp;</span>
  631. <span class="cline-any cline-yes">125x</span>
  632. <span class="cline-any cline-yes">125x</span>
  633. <span class="cline-any cline-yes">125x</span>
  634. <span class="cline-any cline-neutral">&nbsp;</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-yes">131x</span>
  638. <span class="cline-any cline-yes">119x</span>
  639. <span class="cline-any cline-neutral">&nbsp;</span>
  640. <span class="cline-any cline-yes">12x</span>
  641. <span class="cline-any cline-neutral">&nbsp;</span>
  642. <span class="cline-any cline-yes">131x</span>
  643. <span class="cline-any cline-neutral">&nbsp;</span>
  644. <span class="cline-any cline-yes">131x</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">131x</span>
  649. <span class="cline-any cline-neutral">&nbsp;</span>
  650. <span class="cline-any cline-neutral">&nbsp;</span>
  651. <span class="cline-any cline-yes">131x</span>
  652. <span class="cline-any cline-neutral">&nbsp;</span>
  653. <span class="cline-any cline-neutral">&nbsp;</span>
  654. <span class="cline-any cline-yes">131x</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-yes">131x</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-neutral">&nbsp;</span>
  661. <span class="cline-any cline-neutral">&nbsp;</span>
  662. <span class="cline-any cline-yes">131x</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-neutral">&nbsp;</span>
  666. <span class="cline-any cline-yes">131x</span>
  667. <span class="cline-any cline-neutral">&nbsp;</span>
  668. <span class="cline-any cline-yes">131x</span>
  669. <span class="cline-any cline-yes">131x</span>
  670. <span class="cline-any cline-yes">131x</span>
  671. <span class="cline-any cline-yes">131x</span>
  672. <span class="cline-any cline-neutral">&nbsp;</span>
  673. <span class="cline-any cline-yes">131x</span>
  674. <span class="cline-any cline-yes">131x</span>
  675. <span class="cline-any cline-yes">571x</span>
  676. <span class="cline-any cline-neutral">&nbsp;</span>
  677. <span class="cline-any cline-neutral">&nbsp;</span>
  678. <span class="cline-any cline-neutral">&nbsp;</span>
  679. <span class="cline-any cline-yes">473x</span>
  680. <span class="cline-any cline-yes">98x</span>
  681. <span class="cline-any cline-yes">98x</span>
  682. <span class="cline-any cline-yes">98x</span>
  683. <span class="cline-any cline-yes">98x</span>
  684. <span class="cline-any cline-neutral">&nbsp;</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">571x</span>
  689. <span class="cline-any cline-yes">144x</span>
  690. <span class="cline-any cline-yes">144x</span>
  691. <span class="cline-any cline-yes">9x</span>
  692. <span class="cline-any cline-yes">135x</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">562x</span>
  696. <span class="cline-any cline-yes">545x</span>
  697. <span class="cline-any cline-yes">545x</span>
  698. <span class="cline-any cline-yes">2x</span>
  699. <span class="cline-any cline-yes">2x</span>
  700. <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
  704. <span class="cline-any cline-yes">543x</span>
  705. <span class="cline-any cline-yes">2x</span>
  706. <span class="cline-any cline-yes">2x</span>
  707. <span class="cline-any cline-yes">2x</span>
  708. <span class="cline-any cline-neutral">&nbsp;</span>
  709. <span class="cline-any cline-neutral">&nbsp;</span>
  710. <span class="cline-any cline-neutral">&nbsp;</span>
  711. <span class="cline-any cline-neutral">&nbsp;</span>
  712. <span class="cline-any cline-yes">560x</span>
  713. <span class="cline-any cline-yes">3x</span>
  714. <span class="cline-any cline-yes">3x</span>
  715. <span class="cline-any cline-neutral">&nbsp;</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-yes">560x</span>
  719. <span class="cline-any cline-yes">2x</span>
  720. <span class="cline-any cline-neutral">&nbsp;</span>
  721. <span class="cline-any cline-yes">558x</span>
  722. <span class="cline-any cline-neutral">&nbsp;</span>
  723. <span class="cline-any cline-yes">560x</span>
  724. <span class="cline-any cline-neutral">&nbsp;</span>
  725. <span class="cline-any cline-neutral">&nbsp;</span>
  726. <span class="cline-any cline-neutral">&nbsp;</span>
  727. <span class="cline-any cline-yes">571x</span>
  728. <span class="cline-any cline-yes">11x</span>
  729. <span class="cline-any cline-neutral">&nbsp;</span>
  730. <span class="cline-any cline-yes">560x</span>
  731. <span class="cline-any cline-neutral">&nbsp;</span>
  732. <span class="cline-any cline-yes">560x</span>
  733. <span class="cline-any cline-neutral">&nbsp;</span>
  734. <span class="cline-any cline-neutral">&nbsp;</span>
  735. <span class="cline-any cline-yes">179x</span>
  736. <span class="cline-any cline-yes">140x</span>
  737. <span class="cline-any cline-neutral">&nbsp;</span>
  738. <span class="cline-any cline-neutral">&nbsp;</span>
  739. <span class="cline-any cline-neutral">&nbsp;</span>
  740. <span class="cline-any cline-neutral">&nbsp;</span>
  741. <span class="cline-any cline-neutral">&nbsp;</span>
  742. <span class="cline-any cline-neutral">&nbsp;</span>
  743. <span class="cline-any cline-yes">554x</span>
  744. <span class="cline-any cline-neutral">&nbsp;</span>
  745. <span class="cline-any cline-neutral">&nbsp;</span>
  746. <span class="cline-any cline-neutral">&nbsp;</span>
  747. <span class="cline-any cline-neutral">&nbsp;</span>
  748. <span class="cline-any cline-yes">6x</span>
  749. <span class="cline-any cline-neutral">&nbsp;</span>
  750. <span class="cline-any cline-neutral">&nbsp;</span>
  751. <span class="cline-any cline-neutral">&nbsp;</span>
  752. <span class="cline-any cline-neutral">&nbsp;</span>
  753. <span class="cline-any cline-neutral">&nbsp;</span>
  754. <span class="cline-any cline-neutral">&nbsp;</span>
  755. <span class="cline-any cline-neutral">&nbsp;</span>
  756. <span class="cline-any cline-yes">39x</span>
  757. <span class="cline-any cline-yes">12x</span>
  758. <span class="cline-any cline-neutral">&nbsp;</span>
  759. <span class="cline-any cline-yes">27x</span>
  760. <span class="cline-any cline-yes">27x</span>
  761. <span class="cline-any cline-yes">27x</span>
  762. <span class="cline-any cline-neutral">&nbsp;</span>
  763. <span class="cline-any cline-neutral">&nbsp;</span>
  764. <span class="cline-any cline-neutral">&nbsp;</span>
  765. <span class="cline-any cline-neutral">&nbsp;</span>
  766. <span class="cline-any cline-yes">451x</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
  776. <span class="cline-any cline-neutral">&nbsp;</span>
  777. <span class="cline-any cline-neutral">&nbsp;</span>
  778. <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
  783. <span class="cline-any cline-yes">473x</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-neutral">&nbsp;</span>
  788. <span class="cline-any cline-neutral">&nbsp;</span>
  789. <span class="cline-any cline-neutral">&nbsp;</span>
  790. <span class="cline-any cline-neutral">&nbsp;</span>
  791. <span class="cline-any cline-neutral">&nbsp;</span>
  792. <span class="cline-any cline-yes">30x</span>
  793. <span class="cline-any cline-neutral">&nbsp;</span>
  794. <span class="cline-any cline-neutral">&nbsp;</span>
  795. <span class="cline-any cline-neutral">&nbsp;</span>
  796. <span class="cline-any cline-yes">30x</span>
  797. <span class="cline-any cline-neutral">&nbsp;</span>
  798. <span class="cline-any cline-neutral">&nbsp;</span>
  799. <span class="cline-any cline-neutral">&nbsp;</span>
  800. <span class="cline-any cline-yes">221x</span>
  801. <span class="cline-any cline-yes">221x</span>
  802. <span class="cline-any cline-neutral">&nbsp;</span>
  803. <span class="cline-any cline-neutral">&nbsp;</span>
  804. <span class="cline-any cline-neutral">&nbsp;</span>
  805. <span class="cline-any cline-yes">221x</span>
  806. <span class="cline-any cline-neutral">&nbsp;</span>
  807. <span class="cline-any cline-yes">221x</span>
  808. <span class="cline-any cline-yes">221x</span>
  809. <span class="cline-any cline-yes">421x</span>
  810. <span class="cline-any cline-yes">1x</span>
  811. <span class="cline-any cline-yes">1x</span>
  812. <span class="cline-any cline-neutral">&nbsp;</span>
  813. <span class="cline-any cline-neutral">&nbsp;</span>
  814. <span class="cline-any cline-yes">421x</span>
  815. <span class="cline-any cline-yes">219x</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">221x</span>
  819. <span class="cline-any cline-yes">219x</span>
  820. <span class="cline-any cline-yes">192x</span>
  821. <span class="cline-any cline-yes">192x</span>
  822. <span class="cline-any cline-neutral">&nbsp;</span>
  823. <span class="cline-any cline-neutral">&nbsp;</span>
  824. <span class="cline-any cline-yes">219x</span>
  825. <span class="cline-any cline-yes">10x</span>
  826. <span class="cline-any cline-yes">10x</span>
  827. <span class="cline-any cline-neutral">&nbsp;</span>
  828. <span class="cline-any cline-neutral">&nbsp;</span>
  829. <span class="cline-any cline-yes">219x</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-yes">221x</span>
  833. <span class="cline-any cline-neutral">&nbsp;</span>
  834. <span class="cline-any cline-neutral">&nbsp;</span>
  835. <span class="cline-any cline-neutral">&nbsp;</span>
  836. <span class="cline-any cline-yes">97x</span>
  837. <span class="cline-any cline-yes">97x</span>
  838. <span class="cline-any cline-yes">97x</span>
  839. <span class="cline-any cline-yes">3x</span>
  840. <span class="cline-any cline-neutral">&nbsp;</span>
  841. <span class="cline-any cline-yes">94x</span>
  842. <span class="cline-any cline-yes">94x</span>
  843. <span class="cline-any cline-yes">171x</span>
  844. <span class="cline-any cline-yes">94x</span>
  845. <span class="cline-any cline-yes">94x</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-neutral">&nbsp;</span>
  849. <span class="cline-any cline-yes">94x</span>
  850. <span class="cline-any cline-yes">73x</span>
  851. <span class="cline-any cline-yes">73x</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-yes">94x</span>
  855. <span class="cline-any cline-yes">4x</span>
  856. <span class="cline-any cline-yes">4x</span>
  857. <span class="cline-any cline-neutral">&nbsp;</span>
  858. <span class="cline-any cline-neutral">&nbsp;</span>
  859. <span class="cline-any cline-yes">94x</span>
  860. <span class="cline-any cline-neutral">&nbsp;</span>
  861. <span class="cline-any cline-neutral">&nbsp;</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-yes">6x</span>
  865. <span class="cline-any cline-yes">6x</span>
  866. <span class="cline-any cline-neutral">&nbsp;</span>
  867. <span class="cline-any cline-neutral">&nbsp;</span>
  868. <span class="cline-any cline-neutral">&nbsp;</span>
  869. <span class="cline-any cline-yes">21x</span>
  870. <span class="cline-any cline-neutral">&nbsp;</span>
  871. <span class="cline-any cline-neutral">&nbsp;</span>
  872. <span class="cline-any cline-neutral">&nbsp;</span>
  873. <span class="cline-any cline-yes">19x</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>
  877. <span class="cline-any cline-yes">354x</span>
  878. <span class="cline-any cline-neutral">&nbsp;</span>
  879. <span class="cline-any cline-neutral">&nbsp;</span>
  880. <span class="cline-any cline-neutral">&nbsp;</span>
  881. <span class="cline-any cline-yes">364x</span>
  882. <span class="cline-any cline-yes">364x</span>
  883. <span class="cline-any cline-neutral">&nbsp;</span>
  884. <span class="cline-any cline-neutral">&nbsp;</span>
  885. <span class="cline-any cline-neutral">&nbsp;</span>
  886. <span class="cline-any cline-yes">4x</span>
  887. <span class="cline-any cline-yes">4x</span>
  888. <span class="cline-any cline-neutral">&nbsp;</span>
  889. <span class="cline-any cline-neutral">&nbsp;</span>
  890. <span class="cline-any cline-neutral">&nbsp;</span>
  891. <span class="cline-any cline-neutral">&nbsp;</span>
  892. <span class="cline-any cline-yes">354x</span>
  893. <span class="cline-any cline-yes">354x</span>
  894. <span class="cline-any cline-yes">354x</span>
  895. <span class="cline-any cline-yes">12x</span>
  896. <span class="cline-any cline-yes">342x</span>
  897. <span class="cline-any cline-yes">342x</span>
  898. <span class="cline-any cline-yes">2x</span>
  899. <span class="cline-any cline-yes">340x</span>
  900. <span class="cline-any cline-yes">318x</span>
  901. <span class="cline-any cline-yes">22x</span>
  902. <span class="cline-any cline-yes">16x</span>
  903. <span class="cline-any cline-yes">11x</span>
  904. <span class="cline-any cline-yes">9x</span>
  905. <span class="cline-any cline-neutral">&nbsp;</span>
  906. <span class="cline-any cline-yes">2x</span>
  907. <span class="cline-any cline-neutral">&nbsp;</span>
  908. <span class="cline-any cline-yes">5x</span>
  909. <span class="cline-any cline-neutral">&nbsp;</span>
  910. <span class="cline-any cline-yes">6x</span>
  911. <span class="cline-any cline-neutral">&nbsp;</span>
  912. <span class="cline-any cline-neutral">&nbsp;</span>
  913. <span class="cline-any cline-neutral">&nbsp;</span>
  914. <span class="cline-any cline-neutral">&nbsp;</span>
  915. <span class="cline-any cline-neutral">&nbsp;</span>
  916. <span class="cline-any cline-yes">528x</span>
  917. <span class="cline-any cline-yes">1x</span>
  918. <span class="cline-any cline-neutral">&nbsp;</span>
  919. <span class="cline-any cline-yes">527x</span>
  920. <span class="cline-any cline-neutral">&nbsp;</span>
  921. <span class="cline-any cline-neutral">&nbsp;</span>
  922. <span class="cline-any cline-neutral">&nbsp;</span>
  923. <span class="cline-any cline-yes">314x</span>
  924. <span class="cline-any cline-neutral">&nbsp;</span>
  925. <span class="cline-any cline-neutral">&nbsp;</span>
  926. <span class="cline-any cline-yes">19x</span>
  927. <span class="cline-any cline-neutral">&nbsp;</span>
  928. <span class="cline-any cline-neutral">&nbsp;</span>
  929. <span class="cline-any cline-yes">21x</span>
  930. <span class="cline-any cline-neutral">&nbsp;</span>
  931. <span class="cline-any cline-neutral">&nbsp;</span>
  932. <span class="cline-any cline-neutral">&nbsp;</span>
  933. <span class="cline-any cline-yes">173x</span>
  934. <span class="cline-any cline-neutral">&nbsp;</span>
  935. <span class="cline-any cline-neutral">&nbsp;</span>
  936. <span class="cline-any cline-neutral">&nbsp;</span>
  937. <span class="cline-any cline-neutral">&nbsp;</span>
  938. <span class="cline-any cline-neutral">&nbsp;</span>
  939. <span class="cline-any cline-yes">21x</span>
  940. <span class="cline-any cline-yes">21x</span>
  941. <span class="cline-any cline-yes">1x</span>
  942. <span class="cline-any cline-yes">20x</span>
  943. <span class="cline-any cline-yes">20x</span>
  944. <span class="cline-any cline-neutral">&nbsp;</span>
  945. <span class="cline-any cline-neutral">&nbsp;</span>
  946. <span class="cline-any cline-neutral">&nbsp;</span>
  947. <span class="cline-any cline-neutral">&nbsp;</span>
  948. <span class="cline-any cline-neutral">&nbsp;</span>
  949. <span class="cline-any cline-neutral">&nbsp;</span>
  950. <span class="cline-any cline-yes">59x</span>
  951. <span class="cline-any cline-neutral">&nbsp;</span>
  952. <span class="cline-any cline-neutral">&nbsp;</span>
  953. <span class="cline-any cline-neutral">&nbsp;</span>
  954. <span class="cline-any cline-yes">200x</span>
  955. <span class="cline-any cline-yes">200x</span>
  956. <span class="cline-any cline-yes">9x</span>
  957. <span class="cline-any cline-yes">191x</span>
  958. <span class="cline-any cline-yes">191x</span>
  959. <span class="cline-any cline-yes">17x</span>
  960. <span class="cline-any cline-yes">2x</span>
  961. <span class="cline-any cline-yes">15x</span>
  962. <span class="cline-any cline-yes">2x</span>
  963. <span class="cline-any cline-neutral">&nbsp;</span>
  964. <span class="cline-any cline-yes">13x</span>
  965. <span class="cline-any cline-yes">13x</span>
  966. <span class="cline-any cline-yes">6x</span>
  967. <span class="cline-any cline-yes">3x</span>
  968. <span class="cline-any cline-yes">2x</span>
  969. <span class="cline-any cline-neutral">&nbsp;</span>
  970. <span class="cline-any cline-yes">3x</span>
  971. <span class="cline-any cline-neutral">&nbsp;</span>
  972. <span class="cline-any cline-yes">7x</span>
  973. <span class="cline-any cline-yes">12x</span>
  974. <span class="cline-any cline-neutral">&nbsp;</span>
  975. <span class="cline-any cline-yes">1x</span>
  976. <span class="cline-any cline-neutral">&nbsp;</span>
  977. <span class="cline-any cline-neutral">&nbsp;</span>
  978. <span class="cline-any cline-neutral">&nbsp;</span>
  979. <span class="cline-any cline-yes">174x</span>
  980. <span class="cline-any cline-neutral">&nbsp;</span>
  981. <span class="cline-any cline-neutral">&nbsp;</span>
  982. <span class="cline-any cline-neutral">&nbsp;</span>
  983. <span class="cline-any cline-neutral">&nbsp;</span>
  984. <span class="cline-any cline-yes">93x</span>
  985. <span class="cline-any cline-neutral">&nbsp;</span>
  986. <span class="cline-any cline-yes">93x</span>
  987. <span class="cline-any cline-yes">6x</span>
  988. <span class="cline-any cline-yes">6x</span>
  989. <span class="cline-any cline-neutral">&nbsp;</span>
  990. <span class="cline-any cline-neutral">&nbsp;</span>
  991. <span class="cline-any cline-neutral">&nbsp;</span>
  992. <span class="cline-any cline-neutral">&nbsp;</span>
  993. <span class="cline-any cline-yes">93x</span>
  994. <span class="cline-any cline-yes">93x</span>
  995. <span class="cline-any cline-neutral">&nbsp;</span>
  996. <span class="cline-any cline-yes">1x</span>
  997. <span class="cline-any cline-neutral">&nbsp;</span>
  998. <span class="cline-any cline-neutral">&nbsp;</span>
  999. <span class="cline-any cline-yes">92x</span>
  1000. <span class="cline-any cline-yes">86x</span>
  1001. <span class="cline-any cline-yes">86x</span>
  1002. <span class="cline-any cline-neutral">&nbsp;</span>
  1003. <span class="cline-any cline-yes">1x</span>
  1004. <span class="cline-any cline-neutral">&nbsp;</span>
  1005. <span class="cline-any cline-neutral">&nbsp;</span>
  1006. <span class="cline-any cline-neutral">&nbsp;</span>
  1007. <span class="cline-any cline-yes">92x</span>
  1008. <span class="cline-any cline-yes">86x</span>
  1009. <span class="cline-any cline-yes">86x</span>
  1010. <span class="cline-any cline-yes">58x</span>
  1011. <span class="cline-any cline-neutral">&nbsp;</span>
  1012. <span class="cline-any cline-yes">85x</span>
  1013. <span class="cline-any cline-yes">12x</span>
  1014. <span class="cline-any cline-neutral">&nbsp;</span>
  1015. <span class="cline-any cline-yes">82x</span>
  1016. <span class="cline-any cline-neutral">&nbsp;</span>
  1017. <span class="cline-any cline-yes">4x</span>
  1018. <span class="cline-any cline-neutral">&nbsp;</span>
  1019. <span class="cline-any cline-neutral">&nbsp;</span>
  1020. <span class="cline-any cline-neutral">&nbsp;</span>
  1021. <span class="cline-any cline-neutral">&nbsp;</span>
  1022. <span class="cline-any cline-neutral">&nbsp;</span>
  1023. <span class="cline-any cline-neutral">&nbsp;</span>
  1024. <span class="cline-any cline-yes">76x</span>
  1025. <span class="cline-any cline-yes">76x</span>
  1026. <span class="cline-any cline-yes">76x</span>
  1027. <span class="cline-any cline-yes">1x</span>
  1028. <span class="cline-any cline-yes">75x</span>
  1029. <span class="cline-any cline-yes">56x</span>
  1030. <span class="cline-any cline-yes">56x</span>
  1031. <span class="cline-any cline-neutral">&nbsp;</span>
  1032. <span class="cline-any cline-neutral">&nbsp;</span>
  1033. <span class="cline-any cline-yes">75x</span>
  1034. <span class="cline-any cline-yes">4x</span>
  1035. <span class="cline-any cline-yes">4x</span>
  1036. <span class="cline-any cline-neutral">&nbsp;</span>
  1037. <span class="cline-any cline-neutral">&nbsp;</span>
  1038. <span class="cline-any cline-yes">75x</span>
  1039. <span class="cline-any cline-neutral">&nbsp;</span>
  1040. <span class="cline-any cline-neutral">&nbsp;</span>
  1041. <span class="cline-any cline-neutral">&nbsp;</span>
  1042. <span class="cline-any cline-yes">276x</span>
  1043. <span class="cline-any cline-yes">276x</span>
  1044. <span class="cline-any cline-neutral">&nbsp;</span>
  1045. <span class="cline-any cline-neutral">&nbsp;</span>
  1046. <span class="cline-any cline-neutral">&nbsp;</span>
  1047. <span class="cline-any cline-neutral">&nbsp;</span>
  1048. <span class="cline-any cline-neutral">&nbsp;</span>
  1049. <span class="cline-any cline-neutral">&nbsp;</span>
  1050. <span class="cline-any cline-neutral">&nbsp;</span>
  1051. <span class="cline-any cline-neutral">&nbsp;</span>
  1052. <span class="cline-any cline-neutral">&nbsp;</span>
  1053. <span class="cline-any cline-neutral">&nbsp;</span>
  1054. <span class="cline-any cline-neutral">&nbsp;</span>
  1055. <span class="cline-any cline-neutral">&nbsp;</span>
  1056. <span class="cline-any cline-yes">4x</span>
  1057. <span class="cline-any cline-neutral">&nbsp;</span>
  1058. <span class="cline-any cline-neutral">&nbsp;</span>
  1059. <span class="cline-any cline-neutral">&nbsp;</span>
  1060. <span class="cline-any cline-neutral">&nbsp;</span>
  1061. <span class="cline-any cline-yes">19x</span>
  1062. <span class="cline-any cline-yes">19x</span>
  1063. <span class="cline-any cline-yes">17x</span>
  1064. <span class="cline-any cline-neutral">&nbsp;</span>
  1065. <span class="cline-any cline-yes">2x</span>
  1066. <span class="cline-any cline-neutral">&nbsp;</span>
  1067. <span class="cline-any cline-neutral">&nbsp;</span>
  1068. <span class="cline-any cline-neutral">&nbsp;</span>
  1069. <span class="cline-any cline-neutral">&nbsp;</span>
  1070. <span class="cline-any cline-yes">3x</span>
  1071. <span class="cline-any cline-yes">3x</span>
  1072. <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
  1073. &nbsp;
  1074. const assert = require('assert')
  1075. const EE = require('events').EventEmitter
  1076. const Parser = require('./parse.js')
  1077. const fs = require('fs')
  1078. const fsm = require('fs-minipass')
  1079. const path = require('path')
  1080. const mkdir = require('./mkdir.js')
  1081. const mkdirSync = mkdir.sync
  1082. const wc = require('./winchars.js')
  1083. &nbsp;
  1084. const ONENTRY = Symbol('onEntry')
  1085. const CHECKFS = Symbol('checkFs')
  1086. const MAKEFS = Symbol('makeFs')
  1087. const FILE = Symbol('file')
  1088. const DIRECTORY = Symbol('directory')
  1089. const LINK = Symbol('link')
  1090. const SYMLINK = Symbol('symlink')
  1091. const HARDLINK = Symbol('hardlink')
  1092. const UNSUPPORTED = Symbol('unsupported')
  1093. const UNKNOWN = Symbol('unknown')
  1094. const CHECKPATH = Symbol('checkPath')
  1095. const MKDIR = Symbol('mkdir')
  1096. const ONERROR = Symbol('onError')
  1097. const PENDING = Symbol('pending')
  1098. const PEND = Symbol('pend')
  1099. const UNPEND = Symbol('unpend')
  1100. const ENDED = Symbol('ended')
  1101. const MAYBECLOSE = Symbol('maybeClose')
  1102. const SKIP = Symbol('skip')
  1103. const DOCHOWN = Symbol('doChown')
  1104. const UID = Symbol('uid')
  1105. const GID = Symbol('gid')
  1106. &nbsp;
  1107. // this.gid, entry.gid, this.processUid
  1108. const uint32 = (a, b, c) =&gt;
  1109. a === a &gt;&gt;&gt; 0 ? a
  1110. : b === b &gt;&gt;&gt; 0 ? b
  1111. : c
  1112. &nbsp;
  1113. class Unpack extends Parser {
  1114. constructor (opt) {
  1115. if (!opt)
  1116. opt = {}
  1117. &nbsp;
  1118. opt.ondone = _ =&gt; {
  1119. this[ENDED] = true
  1120. this[MAYBECLOSE]()
  1121. }
  1122. &nbsp;
  1123. super(opt)
  1124. &nbsp;
  1125. this.writable = true
  1126. this.readable = false
  1127. &nbsp;
  1128. this[PENDING] = 0
  1129. this[ENDED] = false
  1130. &nbsp;
  1131. this.dirCache = opt.dirCache || new Map()
  1132. &nbsp;
  1133. if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {
  1134. // need both or neither
  1135. if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number')
  1136. throw new TypeError('cannot set owner without number uid and gid')
  1137. if (opt.preserveOwner)
  1138. throw new TypeError(
  1139. 'cannot preserve owner in archive and also set owner explicitly')
  1140. this.uid = opt.uid
  1141. this.gid = opt.gid
  1142. this.setOwner = true
  1143. } else {
  1144. this.uid = null
  1145. this.gid = null
  1146. this.setOwner = false
  1147. }
  1148. &nbsp;
  1149. // default true for root
  1150. if (opt.preserveOwner === undefined &amp;&amp; typeof opt.uid !== 'number')
  1151. this.preserveOwner = process.getuid &amp;&amp; process.getuid() === 0
  1152. else
  1153. this.preserveOwner = !!opt.preserveOwner
  1154. &nbsp;
  1155. this.processUid = (this.preserveOwner || this.setOwner) &amp;&amp; process.getuid ?
  1156. process.getuid() : null
  1157. this.processGid = (this.preserveOwner || this.setOwner) &amp;&amp; process.getgid ?
  1158. process.getgid() : null
  1159. &nbsp;
  1160. // turn &gt;&lt;?| in filenames into 0xf000-higher encoded forms
  1161. this.win32 = !!opt.win32 || process.platform === 'win32'
  1162. &nbsp;
  1163. // do not unpack over files that are newer than what's in the archive
  1164. this.newer = !!opt.newer
  1165. &nbsp;
  1166. // do not unpack over ANY files
  1167. this.keep = !!opt.keep
  1168. &nbsp;
  1169. // do not set mtime/atime of extracted entries
  1170. this.noMtime = !!opt.noMtime
  1171. &nbsp;
  1172. // allow .., absolute path entries, and unpacking through symlinks
  1173. // without this, warn and skip .., relativize absolutes, and error
  1174. // on symlinks in extraction path
  1175. this.preservePaths = !!opt.preservePaths
  1176. &nbsp;
  1177. // unlink files and links before writing. This breaks existing hard
  1178. // links, and removes symlink directories rather than erroring
  1179. this.unlink = !!opt.unlink
  1180. &nbsp;
  1181. this.cwd = path.resolve(opt.cwd || process.cwd())
  1182. this.strip = +opt.strip || 0
  1183. this.processUmask = process.umask()
  1184. this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask
  1185. // default mode for dirs created as parents
  1186. this.dmode = opt.dmode || (0o0777 &amp; (~this.umask))
  1187. this.fmode = opt.fmode || (0o0666 &amp; (~this.umask))
  1188. this.on('entry', entry =&gt; this[ONENTRY](entry))
  1189. }
  1190. &nbsp;
  1191. [MAYBECLOSE] () {
  1192. if (this[ENDED] &amp;&amp; this[PENDING] === 0) {
  1193. this.emit('prefinish')
  1194. this.emit('finish')
  1195. this.emit('end')
  1196. this.emit('close')
  1197. }
  1198. }
  1199. &nbsp;
  1200. [CHECKPATH] (entry) {
  1201. if (this.strip) {
  1202. const parts = entry.path.split(/\/|\\/)
  1203. if (parts.length &lt; this.strip)
  1204. return false
  1205. entry.path = parts.slice(this.strip).join('/')
  1206. }
  1207. &nbsp;
  1208. if (!this.preservePaths) {
  1209. const p = entry.path
  1210. if (p.match(/(^|\/|\\)\.\.(\\|\/|$)/)) {
  1211. this.warn('path contains \'..\'', p)
  1212. return false
  1213. }
  1214. &nbsp;
  1215. // absolutes on posix are also absolutes on win32
  1216. // so we only need to test this one to get both
  1217. if (path.win32.isAbsolute(p)) {
  1218. const parsed = path.win32.parse(p)
  1219. this.warn('stripping ' + parsed.root + ' from absolute path', p)
  1220. entry.path = p.substr(parsed.root.length)
  1221. }
  1222. }
  1223. &nbsp;
  1224. // only encode : chars that aren't drive letter indicators
  1225. if (this.win32) {
  1226. const parsed = path.win32.parse(entry.path)
  1227. entry.path = parsed.root === '' ? wc.encode(entry.path)
  1228. : parsed.root + wc.encode(entry.path.substr(parsed.root.length))
  1229. }
  1230. &nbsp;
  1231. if (path.isAbsolute(entry.path))
  1232. entry.absolute = entry.path
  1233. else
  1234. entry.absolute = path.resolve(this.cwd, entry.path)
  1235. &nbsp;
  1236. return true
  1237. }
  1238. &nbsp;
  1239. [ONENTRY] (entry) {
  1240. if (!this[CHECKPATH](entry))
  1241. return entry.resume()
  1242. &nbsp;
  1243. assert.equal(typeof entry.absolute, 'string')
  1244. &nbsp;
  1245. switch (entry.type) {
  1246. case 'Directory':
  1247. case 'GNUDumpDir':
  1248. if (entry.mode)
  1249. entry.mode = entry.mode | 0o700
  1250. &nbsp;
  1251. case 'File':
  1252. case 'OldFile':
  1253. case 'ContiguousFile':
  1254. case 'Link':
  1255. case 'SymbolicLink':
  1256. return this[CHECKFS](entry)
  1257. &nbsp;
  1258. case 'CharacterDevice':
  1259. case 'BlockDevice':
  1260. case 'FIFO':
  1261. return this[UNSUPPORTED](entry)
  1262. }
  1263. }
  1264. &nbsp;
  1265. [ONERROR] (er, entry) {
  1266. // Cwd has to exist, or else nothing works. That's serious.
  1267. // Other errors are warnings, which raise the error in strict
  1268. // mode, but otherwise continue on.
  1269. if (er.name === 'CwdError')
  1270. this.emit('error', er)
  1271. else {
  1272. this.warn(er.message, er)
  1273. this[UNPEND]()
  1274. entry.resume()
  1275. }
  1276. }
  1277. &nbsp;
  1278. [MKDIR] (dir, mode, cb) {
  1279. mkdir(dir, {
  1280. uid: this.uid,
  1281. gid: this.gid,
  1282. processUid: this.processUid,
  1283. processGid: this.processGid,
  1284. umask: this.processUmask,
  1285. preserve: this.preservePaths,
  1286. unlink: this.unlink,
  1287. cache: this.dirCache,
  1288. cwd: this.cwd,
  1289. mode: mode
  1290. }, cb)
  1291. }
  1292. &nbsp;
  1293. [DOCHOWN] (entry) {
  1294. // in preserve owner mode, chown if the entry doesn't match process
  1295. // in set owner mode, chown if setting doesn't match process
  1296. return this.preserveOwner &amp;&amp;
  1297. ( typeof entry.uid === 'number' &amp;&amp; entry.uid !== this.processUid ||
  1298. typeof entry.gid === 'number' &amp;&amp; entry.gid !== this.processGid )
  1299. ||
  1300. ( typeof this.uid === 'number' &amp;&amp; this.uid !== this.processUid ||
  1301. typeof this.gid === 'number' &amp;&amp; this.gid !== this.processGid )
  1302. }
  1303. &nbsp;
  1304. [UID] (entry) {
  1305. return uint32(this.uid, entry.uid, this.processUid)
  1306. }
  1307. &nbsp;
  1308. [GID] (entry) {
  1309. return uint32(this.gid, entry.gid, this.processGid)
  1310. }
  1311. &nbsp;
  1312. [FILE] (entry) {
  1313. const mode = entry.mode &amp; 0o7777 || this.fmode
  1314. const stream = new fsm.WriteStream(entry.absolute, {
  1315. mode: mode,
  1316. autoClose: false
  1317. })
  1318. stream.on('error', er =&gt; this[ONERROR](er, entry))
  1319. &nbsp;
  1320. let actions = 1
  1321. const done = er =&gt; {
  1322. if (er) {
  1323. this[ONERROR](er, entry)
  1324. actions = 1
  1325. }
  1326. &nbsp;
  1327. if (--actions === 0)
  1328. fs.close(stream.fd, _ =&gt; this[UNPEND]())
  1329. }
  1330. &nbsp;
  1331. stream.on('finish', _ =&gt; {
  1332. if (entry.mtime &amp;&amp; !this.noMtime) {
  1333. actions++
  1334. fs.futimes(stream.fd, entry.atime || new Date(), entry.mtime, done)
  1335. }
  1336. &nbsp;
  1337. if (this[DOCHOWN](entry)) {
  1338. actions++
  1339. fs.fchown(stream.fd, this[UID](entry), this[GID](entry), done)
  1340. }
  1341. &nbsp;
  1342. done()
  1343. })
  1344. &nbsp;
  1345. entry.pipe(stream)
  1346. }
  1347. &nbsp;
  1348. [DIRECTORY] (entry) {
  1349. const mode = entry.mode &amp; 0o7777 || this.dmode
  1350. this[MKDIR](entry.absolute, mode, er =&gt; {
  1351. if (er)
  1352. return this[ONERROR](er, entry)
  1353. &nbsp;
  1354. let actions = 1
  1355. const done = _ =&gt; {
  1356. if (--actions === 0) {
  1357. this[UNPEND]()
  1358. entry.resume()
  1359. }
  1360. }
  1361. &nbsp;
  1362. if (entry.mtime &amp;&amp; !this.noMtime) {
  1363. actions++
  1364. fs.utimes(entry.absolute, entry.atime || new Date(), entry.mtime, done)
  1365. }
  1366. &nbsp;
  1367. if (this[DOCHOWN](entry)) {
  1368. actions++
  1369. fs.chown(entry.absolute, this[UID](entry), this[GID](entry), done)
  1370. }
  1371. &nbsp;
  1372. done()
  1373. })
  1374. }
  1375. &nbsp;
  1376. [UNSUPPORTED] (entry) {
  1377. this.warn('unsupported entry type: ' + entry.type, entry)
  1378. entry.resume()
  1379. }
  1380. &nbsp;
  1381. [SYMLINK] (entry) {
  1382. this[LINK](entry, entry.linkpath, 'symlink')
  1383. }
  1384. &nbsp;
  1385. [HARDLINK] (entry) {
  1386. this[LINK](entry, path.resolve(this.cwd, entry.linkpath), 'link')
  1387. }
  1388. &nbsp;
  1389. [PEND] () {
  1390. this[PENDING]++
  1391. }
  1392. &nbsp;
  1393. [UNPEND] () {
  1394. this[PENDING]--
  1395. this[MAYBECLOSE]()
  1396. }
  1397. &nbsp;
  1398. [SKIP] (entry) {
  1399. this[UNPEND]()
  1400. entry.resume()
  1401. }
  1402. &nbsp;
  1403. // check if a thing is there, and if so, try to clobber it
  1404. [CHECKFS] (entry) {
  1405. this[PEND]()
  1406. this[MKDIR](path.dirname(entry.absolute), this.dmode, er =&gt; {
  1407. if (er)
  1408. return this[ONERROR](er, entry)
  1409. fs.lstat(entry.absolute, (er, st) =&gt; {
  1410. if (st &amp;&amp; (this.keep || this.newer &amp;&amp; st.mtime &gt; entry.mtime))
  1411. this[SKIP](entry)
  1412. else if (er || (entry.type === 'File' &amp;&amp; !this.unlink &amp;&amp; st.isFile()))
  1413. this[MAKEFS](null, entry)
  1414. else if (st.isDirectory()) {
  1415. if (entry.type === 'Directory') {
  1416. if (!entry.mode || (st.mode &amp; 0o7777) === entry.mode)
  1417. this[MAKEFS](null, entry)
  1418. else
  1419. fs.chmod(entry.absolute, entry.mode, er =&gt; this[MAKEFS](er, entry))
  1420. } else
  1421. fs.rmdir(entry.absolute, er =&gt; this[MAKEFS](er, entry))
  1422. } else
  1423. fs.unlink(entry.absolute, er =&gt; this[MAKEFS](er, entry))
  1424. })
  1425. })
  1426. }
  1427. &nbsp;
  1428. [MAKEFS] (er, entry) {
  1429. if (er)
  1430. return this[ONERROR](er, entry)
  1431. &nbsp;
  1432. switch (entry.type) {
  1433. case 'File':
  1434. case 'OldFile':
  1435. case 'ContiguousFile':
  1436. return this[FILE](entry)
  1437. &nbsp;
  1438. case 'Link':
  1439. return this[HARDLINK](entry)
  1440. &nbsp;
  1441. case 'SymbolicLink':
  1442. return this[SYMLINK](entry)
  1443. &nbsp;
  1444. case 'Directory':
  1445. case 'GNUDumpDir':
  1446. return this[DIRECTORY](entry)
  1447. }
  1448. }
  1449. &nbsp;
  1450. [LINK] (entry, linkpath, link) {
  1451. // XXX: get the type ('file' or 'dir') for windows
  1452. fs[link](linkpath, entry.absolute, er =&gt; {
  1453. if (er)
  1454. return this[ONERROR](er, entry)
  1455. this[UNPEND]()
  1456. entry.resume()
  1457. })
  1458. }
  1459. }
  1460. &nbsp;
  1461. class UnpackSync extends Unpack {
  1462. constructor (opt) {
  1463. super(opt)
  1464. }
  1465. &nbsp;
  1466. [CHECKFS] (entry) {
  1467. const er = this[MKDIR](path.dirname(entry.absolute), this.dmode)
  1468. if (er)
  1469. return this[ONERROR](er, entry)
  1470. try {
  1471. const st = fs.lstatSync(entry.absolute)
  1472. if (this.keep || this.newer &amp;&amp; st.mtime &gt; entry.mtime)
  1473. return this[SKIP](entry)
  1474. else if (entry.type === 'File' &amp;&amp; !this.unlink &amp;&amp; st.isFile())
  1475. return this[MAKEFS](null, entry)
  1476. else {
  1477. try {
  1478. if (st.isDirectory()) {
  1479. if (entry.type === 'Directory') {
  1480. if (entry.mode &amp;&amp; (st.mode &amp; 0o7777) !== entry.mode)
  1481. fs.chmodSync(entry.absolute, entry.mode)
  1482. } else
  1483. fs.rmdirSync(entry.absolute)
  1484. } else
  1485. fs.unlinkSync(entry.absolute)
  1486. return this[MAKEFS](null, entry)
  1487. } catch (er) {
  1488. return this[ONERROR](er, entry)
  1489. }
  1490. }
  1491. } catch (er) {
  1492. return this[MAKEFS](null, entry)
  1493. }
  1494. }
  1495. &nbsp;
  1496. [FILE] (entry) {
  1497. const mode = entry.mode &amp; 0o7777 || this.fmode
  1498. &nbsp;
  1499. const oner = er =&gt; {
  1500. try { fs.closeSync(fd) } catch (_) {}
  1501. this[ONERROR](er, entry)
  1502. }
  1503. &nbsp;
  1504. let stream
  1505. let fd
  1506. try {
  1507. fd = fs.openSync(entry.absolute, 'w', mode)
  1508. } catch (er) {
  1509. return oner(er)
  1510. }
  1511. &nbsp;
  1512. entry.on('data', chunk =&gt; {
  1513. try {
  1514. fs.writeSync(fd, chunk, 0, chunk.length)
  1515. } catch (er) {
  1516. oner(er)
  1517. }
  1518. })
  1519. &nbsp;
  1520. entry.on('end', _ =&gt; {
  1521. try {
  1522. if (entry.mtime &amp;&amp; !this.noMtime)
  1523. fs.futimesSync(fd, entry.atime || new Date(), entry.mtime)
  1524. &nbsp;
  1525. if (this[DOCHOWN](entry))
  1526. fs.fchownSync(fd, this[UID](entry), this[GID](entry))
  1527. &nbsp;
  1528. fs.closeSync(fd)
  1529. } catch (er) {
  1530. return oner(er)
  1531. }
  1532. })
  1533. &nbsp;
  1534. }
  1535. &nbsp;
  1536. [DIRECTORY] (entry) {
  1537. const mode = entry.mode &amp; 0o7777 || this.dmode
  1538. const er = this[MKDIR](entry.absolute, mode)
  1539. if (er)
  1540. return this[ONERROR](er, entry)
  1541. if (entry.mtime &amp;&amp; !this.noMtime) {
  1542. try {
  1543. fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime)
  1544. } catch (er) {}
  1545. }
  1546. if (this[DOCHOWN](entry)) {
  1547. try {
  1548. fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry))
  1549. } catch (er) {}
  1550. }
  1551. entry.resume()
  1552. }
  1553. &nbsp;
  1554. [MKDIR] (dir, mode) {
  1555. try {
  1556. return mkdir.sync(dir, {
  1557. uid: this.uid,
  1558. gid: this.gid,
  1559. processUid: this.processUid,
  1560. processGid: this.processGid,
  1561. umask: this.processUmask,
  1562. preserve: this.preservePaths,
  1563. unlink: this.unlink,
  1564. cache: this.dirCache,
  1565. cwd: this.cwd,
  1566. mode: mode
  1567. })
  1568. } catch (er) {
  1569. return er
  1570. }
  1571. }
  1572. &nbsp;
  1573. [LINK] (entry, linkpath, link) {
  1574. try {
  1575. fs[link + 'Sync'](linkpath, entry.absolute)
  1576. entry.resume()
  1577. } catch (er) {
  1578. return this[ONERROR](er, entry)
  1579. }
  1580. }
  1581. }
  1582. &nbsp;
  1583. Unpack.Sync = UnpackSync
  1584. module.exports = Unpack
  1585. &nbsp;</pre></td></tr>
  1586. </table></pre>
  1587. <div class='push'></div><!-- for sticky footer -->
  1588. </div><!-- /wrapper -->
  1589. <div class='footer quiet pad2 space-top1 center small'>
  1590. Code coverage
  1591. generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
  1592. </div>
  1593. </div>
  1594. <script src="../../prettify.js"></script>
  1595. <script>
  1596. window.onload = function () {
  1597. if (typeof prettyPrint === 'function') {
  1598. prettyPrint();
  1599. }
  1600. };
  1601. </script>
  1602. <script src="../../sorter.js"></script>
  1603. </body>
  1604. </html>