| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311 |
- <!doctype html>
- <html lang="en">
- <head>
- <title>Code coverage report for tar/lib/parse.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
- </head>
- <body>
- <div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> parse.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>242/242</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>155/155</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>24/24</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>236/236</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
- <pre><table class="coverage">
- <tr><td class="line-count quiet">1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2032x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">9x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">134x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">608x</span>
- <span class="cline-any cline-yes">589x</span>
- <span class="cline-any cline-yes">589x</span>
- <span class="cline-any cline-yes">589x</span>
- <span class="cline-any cline-yes">589x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">36x</span>
- <span class="cline-any cline-yes">742x</span>
- <span class="cline-any cline-yes">34x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">6101x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">6101x</span>
- <span class="cline-any cline-yes">1834x</span>
- <span class="cline-any cline-yes">4267x</span>
- <span class="cline-any cline-yes">160x</span>
- <span class="cline-any cline-yes">4107x</span>
- <span class="cline-any cline-yes">40x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">4067x</span>
- <span class="cline-any cline-yes">4067x</span>
- <span class="cline-any cline-yes">40x</span>
- <span class="cline-any cline-yes">4027x</span>
- <span class="cline-any cline-yes">40x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">3987x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">3987x</span>
- <span class="cline-any cline-yes">759x</span>
- <span class="cline-any cline-yes">260x</span>
- <span class="cline-any cline-yes">260x</span>
- <span class="cline-any cline-yes">260x</span>
- <span class="cline-any cline-yes">499x</span>
- <span class="cline-any cline-yes">455x</span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-yes">455x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">3228x</span>
- <span class="cline-any cline-yes">3228x</span>
- <span class="cline-any cline-yes">3228x</span>
- <span class="cline-any cline-yes">1070x</span>
- <span class="cline-any cline-yes">1070x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2158x</span>
- <span class="cline-any cline-yes">1028x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">1130x</span>
- <span class="cline-any cline-yes">1130x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2158x</span>
- <span class="cline-any cline-yes">1675x</span>
- <span class="cline-any cline-yes">1675x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">483x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">4299x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">4299x</span>
- <span class="cline-any cline-yes">1653x</span>
- <span class="cline-any cline-yes">1653x</span>
- <span class="cline-any cline-yes">2646x</span>
- <span class="cline-any cline-yes">490x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2156x</span>
- <span class="cline-any cline-yes">2156x</span>
- <span class="cline-any cline-yes">2150x</span>
- <span class="cline-any cline-yes">1288x</span>
- <span class="cline-any cline-yes">1288x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">4293x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2947x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2941x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2478x</span>
- <span class="cline-any cline-yes">2478x</span>
- <span class="cline-any cline-yes">2478x</span>
- <span class="cline-any cline-yes">2468x</span>
- <span class="cline-any cline-yes">516x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">10x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2194x</span>
- <span class="cline-any cline-yes">2194x</span>
- <span class="cline-any cline-yes">2194x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2194x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2194x</span>
- <span class="cline-any cline-yes">2121x</span>
- <span class="cline-any cline-yes">2121x</span>
- <span class="cline-any cline-yes">2121x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2194x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-yes">455x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">4328x</span>
- <span class="cline-any cline-yes">3815x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">513x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">455x</span>
- <span class="cline-any cline-yes">455x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">351x</span>
- <span class="cline-any cline-yes">351x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">44x</span>
- <span class="cline-any cline-yes">44x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">40x</span>
- <span class="cline-any cline-yes">40x</span>
- <span class="cline-any cline-yes">40x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">20x</span>
- <span class="cline-any cline-yes">20x</span>
- <span class="cline-any cline-yes">20x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">669590x</span>
- <span class="cline-any cline-yes">1x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">669589x</span>
- <span class="cline-any cline-yes">944x</span>
- <span class="cline-any cline-yes">224x</span>
- <span class="cline-any cline-yes">224x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">944x</span>
- <span class="cline-any cline-yes">224x</span>
- <span class="cline-any cline-yes">224x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">720x</span>
- <span class="cline-any cline-yes">947x</span>
- <span class="cline-any cline-yes">493x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">720x</span>
- <span class="cline-any cline-yes">227x</span>
- <span class="cline-any cline-yes">227x</span>
- <span class="cline-any cline-yes">227x</span>
- <span class="cline-any cline-yes">20164x</span>
- <span class="cline-any cline-yes">227x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">227x</span>
- <span class="cline-any cline-yes">226x</span>
- <span class="cline-any cline-yes">226x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">227x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">669138x</span>
- <span class="cline-any cline-yes">669138x</span>
- <span class="cline-any cline-yes">33586x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">635552x</span>
- <span class="cline-any cline-yes">669132x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">669132x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">669132x</span>
- <span class="cline-any cline-yes">63x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">669132x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">652869x</span>
- <span class="cline-any cline-yes">652866x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">3449x</span>
- <span class="cline-any cline-yes">709x</span>
- <span class="cline-any cline-yes">709x</span>
- <span class="cline-any cline-yes">709x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">1x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">709x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655942x</span>
- <span class="cline-any cline-yes">10x</span>
- <span class="cline-any cline-yes">655932x</span>
- <span class="cline-any cline-yes">381x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655551x</span>
- <span class="cline-any cline-yes">655551x</span>
- <span class="cline-any cline-yes">652859x</span>
- <span class="cline-any cline-yes">652859x</span>
- <span class="cline-any cline-yes">652859x</span>
- <span class="cline-any cline-yes">652859x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2692x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655545x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-yes">2x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655545x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655936x</span>
- <span class="cline-any cline-yes">3068x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655553x</span>
- <span class="cline-any cline-yes">655553x</span>
- <span class="cline-any cline-yes">655553x</span>
- <span class="cline-any cline-yes">8295x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">6101x</span>
- <span class="cline-any cline-yes">6095x</span>
- <span class="cline-any cline-yes">6095x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">1719x</span>
- <span class="cline-any cline-yes">1719x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-yes">475x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">655547x</span>
- <span class="cline-any cline-yes">652863x</span>
- <span class="cline-any cline-yes">1x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">652862x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">718x</span>
- <span class="cline-any cline-yes">717x</span>
- <span class="cline-any cline-yes">113x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">604x</span>
- <span class="cline-any cline-yes">604x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-
- // this[BUFFER] is the remainder of a chunk if we're waiting for
- // the full 512 bytes of a header to come in. We will Buffer.concat()
- // it to the next write(), which is a mem copy, but a small one.
- //
- // this[QUEUE] is a Yallist of entries that haven't been emitted
- // yet this can only get filled up if the user keeps write()ing after
- // a write() returns false, or does a write() with more than one entry
- //
- // We don't buffer chunks, we always parse them and either create an
- // entry, or push it into the active entry. The ReadEntry class knows
- // to throw data away if .ignore=true
- //
- // Shift entry off the buffer when it emits 'end', and emit 'entry' for
- // the next one in the list.
- //
- // At any time, we're pushing body chunks into the entry at WRITEENTRY,
- // and waiting for 'end' on the entry at READENTRY
- //
- // ignored entries get .resume() called on them straight away
-
- const warner = require('./warn-mixin.js')
- const path = require('path')
- const Header = require('./header.js')
- const EE = require('events')
- const Yallist = require('yallist')
- const maxMetaEntrySize = 1024 * 1024
- const Entry = require('./read-entry.js')
- const Pax = require('./pax.js')
- const zlib = require('minizlib')
-
- const gzipHeader = new Buffer([0x1f, 0x8b])
- const STATE = Symbol('state')
- const WRITEENTRY = Symbol('writeEntry')
- const READENTRY = Symbol('readEntry')
- const NEXTENTRY = Symbol('nextEntry')
- const PROCESSENTRY = Symbol('processEntry')
- const EX = Symbol('extendedHeader')
- const GEX = Symbol('globalExtendedHeader')
- const META = Symbol('meta')
- const EMITMETA = Symbol('emitMeta')
- const BUFFER = Symbol('buffer')
- const QUEUE = Symbol('queue')
- const ENDED = Symbol('ended')
- const EMITTEDEND = Symbol('emittedEnd')
- const EMIT = Symbol('emit')
- const UNZIP = Symbol('unzip')
- const CONSUMECHUNK = Symbol('consumeChunk')
- const CONSUMECHUNKSUB = Symbol('consumeChunkSub')
- const CONSUMEBODY = Symbol('consumeBody')
- const CONSUMEMETA = Symbol('consumeMeta')
- const CONSUMEHEADER = Symbol('consumeHeader')
- const CONSUMING = Symbol('consuming')
- const BUFFERCONCAT = Symbol('bufferConcat')
- const MAYBEEND = Symbol('maybeEnd')
- const WRITING = Symbol('writing')
- const ABORTED = Symbol('aborted')
- const DONE = Symbol('onDone')
-
- const noop = _ => true
-
- module.exports = warner(class Parser extends EE {
- constructor (opt) {
- opt = opt || {}
- super(opt)
-
- if (opt.ondone)
- this.on(DONE, opt.ondone)
- else
- this.on(DONE, _ => {
- this.emit('prefinish')
- this.emit('finish')
- this.emit('end')
- this.emit('close')
- })
-
- this.strict = !!opt.strict
- this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize
- this.filter = typeof opt.filter === 'function' ? opt.filter : noop
-
- // have to set this so that streams are ok piping into it
- this.writable = true
- this.readable = false
-
- this[QUEUE] = new Yallist()
- this[BUFFER] = null
- this[READENTRY] = null
- this[WRITEENTRY] = null
- this[STATE] = 'begin'
- this[META] = ''
- this[EX] = null
- this[GEX] = null
- this[ENDED] = false
- this[UNZIP] = null
- this[ABORTED] = false
- if (typeof opt.onwarn === 'function')
- this.on('warn', opt.onwarn)
- if (typeof opt.onentry === 'function')
- this.on('entry', opt.onentry)
- }
-
- [CONSUMEHEADER] (chunk, position) {
- const header = new Header(chunk, position)
-
- if (header.nullBlock)
- this[EMIT]('nullBlock')
- else if (!header.cksumValid)
- this.warn('invalid entry', header)
- else if (!header.path)
- this.warn('invalid: path is required', header)
- else {
- const type = header.type
- if (/^(Symbolic)?Link$/.test(type) && !header.linkpath)
- this.warn('invalid: linkpath required', header)
- else if (!/^(Symbolic)?Link$/.test(type) && header.linkpath)
- this.warn('invalid: linkpath forbidden', header)
- else {
- const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX])
-
- if (entry.meta) {
- if (entry.size > this.maxMetaEntrySize) {
- entry.ignore = true
- this[EMIT]('ignoredEntry', entry)
- this[STATE] = 'ignore'
- } else if (entry.size > 0) {
- this[META] = ''
- entry.on('data', c => this[META] += c)
- this[STATE] = 'meta'
- }
- } else {
-
- this[EX] = null
- entry.ignore = entry.ignore || !this.filter(entry.path, entry)
- if (entry.ignore) {
- this[EMIT]('ignoredEntry', entry)
- this[STATE] = entry.remain ? 'ignore' : 'begin'
- } else {
- if (entry.remain)
- this[STATE] = 'body'
- else {
- this[STATE] = 'begin'
- entry.end()
- }
-
- if (!this[READENTRY]) {
- this[QUEUE].push(entry)
- this[NEXTENTRY]()
- } else
- this[QUEUE].push(entry)
- }
- }
- }
- }
- }
-
- [PROCESSENTRY] (entry) {
- let go = true
-
- if (!entry) {
- this[READENTRY] = null
- go = false
- } else if (Array.isArray(entry))
- this.emit.apply(this, entry)
- else {
- this[READENTRY] = entry
- this.emit('entry', entry)
- if (!entry.emittedEnd) {
- entry.on('end', _ => this[NEXTENTRY]())
- go = false
- }
- }
-
- return go
- }
-
- [NEXTENTRY] () {
- do {} while (this[PROCESSENTRY](this[QUEUE].shift()))
-
- if (!this[QUEUE].length) {
- // At this point, there's nothing in the queue, but we may have an
- // entry which is being consumed (readEntry).
- // If we don't, then we definitely can handle more data.
- // If we do, and either it's flowing, or it has never had any data
- // written to it, then it needs more.
- // The only other possibility is that it has returned false from a
- // write() call, so we wait for the next drain to continue.
- const re = this[READENTRY]
- const drainNow = !re || re.flowing || re.size === re.remain
- if (drainNow) {
- if (!this[WRITING])
- this.emit('drain')
- } else
- re.once('drain', _ => this.emit('drain'))
- }
- }
-
- [CONSUMEBODY] (chunk, position) {
- // write up to but no more than writeEntry.blockRemain
- const entry = this[WRITEENTRY]
- const br = entry.blockRemain
- const c = (br >= chunk.length && position === 0) ? chunk
- : chunk.slice(position, position + br)
-
- entry.write(c)
-
- if (!entry.blockRemain) {
- this[STATE] = 'begin'
- this[WRITEENTRY] = null
- entry.end()
- }
-
- return c.length
- }
-
- [CONSUMEMETA] (chunk, position) {
- const entry = this[WRITEENTRY]
- const ret = this[CONSUMEBODY](chunk, position)
-
- // if we finished, then the entry is reset
- if (!this[WRITEENTRY])
- this[EMITMETA](entry)
-
- return ret
- }
-
- [EMIT] (ev, data, extra) {
- if (!this[QUEUE].length && !this[READENTRY])
- this.emit(ev, data, extra)
- else
- this[QUEUE].push([ev, data, extra])
- }
-
- [EMITMETA] (entry) {
- this[EMIT]('meta', this[META])
- switch (entry.type) {
- case 'ExtendedHeader':
- case 'OldExtendedHeader':
- this[EX] = Pax.parse(this[META], this[EX], false)
- break
-
- case 'GlobalExtendedHeader':
- this[GEX] = Pax.parse(this[META], this[GEX], true)
- break
-
- case 'NextFileHasLongPath':
- case 'OldGnuLongPath':
- this[EX] = this[EX] || Object.create(null)
- this[EX].path = this[META].replace(/\0.*/, '')
- break
-
- case 'NextFileHasLongLinkpath':
- this[EX] = this[EX] || Object.create(null)
- this[EX].linkpath = this[META].replace(/\0.*/, '')
- break
-
- /* istanbul ignore next */
- default: throw new Error('unknown meta: ' + entry.type)
- }
- }
-
- abort (msg, error) {
- this[ABORTED] = true
- this.warn(msg, error)
- this.emit('abort')
- }
-
- write (chunk) {
- if (this[ABORTED])
- return
-
- // first write, might be gzipped
- if (this[UNZIP] === null && chunk) {
- if (this[BUFFER]) {
- chunk = Buffer.concat([this[BUFFER], chunk])
- this[BUFFER] = null
- }
- if (chunk.length < gzipHeader.length) {
- this[BUFFER] = chunk
- return true
- }
- for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) {
- if (chunk[i] !== gzipHeader[i])
- this[UNZIP] = false
- }
- if (this[UNZIP] === null) {
- const ended = this[ENDED]
- this[ENDED] = false
- this[UNZIP] = new zlib.Unzip()
- this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk))
- this[UNZIP].on('error', er =>
- this.abort('zlib error: ' + er.message, er))
- this[UNZIP].on('end', _ => {
- this[ENDED] = true
- this[CONSUMECHUNK]()
- })
- return ended ? this[UNZIP].end(chunk) : this[UNZIP].write(chunk)
- }
- }
-
- this[WRITING] = true
- if (this[UNZIP])
- this[UNZIP].write(chunk)
- else
- this[CONSUMECHUNK](chunk)
- this[WRITING] = false
-
- // return false if there's a queue, or if the current entry isn't flowing
- const ret =
- this[QUEUE].length ? false :
- this[READENTRY] ? this[READENTRY].flowing :
- true
-
- // if we have no queue, then that means a clogged READENTRY
- if (!ret && !this[QUEUE].length)
- this[READENTRY].once('drain', _ => this.emit('drain'))
-
- return ret
- }
-
- [BUFFERCONCAT] (c) {
- if (c && !this[ABORTED])
- this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c
- }
-
- [MAYBEEND] () {
- if (this[ENDED] && !this[EMITTEDEND] && !this[ABORTED]) {
- this[EMITTEDEND] = true
- const entry = this[WRITEENTRY]
- if (entry && entry.blockRemain) {
- const have = this[BUFFER] ? this[BUFFER].length : 0
- this.warn('Truncated input (needed ' + entry.blockRemain +
- ' more bytes, only ' + have + ' available)', entry)
- if (this[BUFFER])
- entry.write(this[BUFFER])
- entry.end()
- }
- this[EMIT](DONE)
- }
- }
-
- [CONSUMECHUNK] (chunk) {
- if (this[CONSUMING]) {
- this[BUFFERCONCAT](chunk)
- } else if (!chunk && !this[BUFFER]) {
- this[MAYBEEND]()
- } else {
- this[CONSUMING] = true
- if (this[BUFFER]) {
- this[BUFFERCONCAT](chunk)
- const c = this[BUFFER]
- this[BUFFER] = null
- this[CONSUMECHUNKSUB](c)
- } else {
- this[CONSUMECHUNKSUB](chunk)
- }
-
- while (this[BUFFER] && this[BUFFER].length >= 512 && !this[ABORTED]) {
- const c = this[BUFFER]
- this[BUFFER] = null
- this[CONSUMECHUNKSUB](c)
- }
- this[CONSUMING] = false
- }
-
- if (!this[BUFFER] || this[ENDED])
- this[MAYBEEND]()
- }
-
- [CONSUMECHUNKSUB] (chunk) {
- // we know that we are in CONSUMING mode, so anything written goes into
- // the buffer. Advance the position and put any remainder in the buffer.
- let position = 0
- let length = chunk.length
- while (position + 512 <= length && !this[ABORTED]) {
- switch (this[STATE]) {
- case 'begin':
- this[CONSUMEHEADER](chunk, position)
- position += 512
- break
-
- case 'ignore':
- case 'body':
- position += this[CONSUMEBODY](chunk, position)
- break
-
- case 'meta':
- position += this[CONSUMEMETA](chunk, position)
- break
-
- /* istanbul ignore next */
- default:
- throw new Error('invalid state: ' + this[STATE])
- }
- }
-
- if (position < length) {
- if (this[BUFFER])
- this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]])
- else
- this[BUFFER] = chunk.slice(position)
- }
- }
-
- end (chunk) {
- if (!this[ABORTED]) {
- if (this[UNZIP])
- this[UNZIP].end(chunk)
- else {
- this[ENDED] = true
- this.write(chunk)
- }
- }
- }
- })
- </pre></td></tr>
- </table></pre>
- <div class='push'></div><!-- for sticky footer -->
- </div><!-- /wrapper -->
- <div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
- </div>
- </div>
- <script src="../../prettify.js"></script>
- <script>
- window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
- };
- </script>
- <script src="../../sorter.js"></script>
- </body>
- </html>
|