zip folder
Massimo Melina committed
Dec 28, 2021 at 12:21 UTC
f0f7d5d531576cc55c4641321ffde3b2937b231a
5 files changed
+694
-58
frontend/src/Head.ts
+29
-22
@@ -23,6 +23,28 @@ function MenuPanel() {
23
const [showFilter, setShowFilter] = useState(listFilter > '')
24
const [filter, setFilter] = useState(listFilter)
25
;[state.listFilter] = useDebounce(showFilter ? filter : '', 300)
26
+ const searchButtonProps = stopSearch ? {
27
+ icon: 'stop',
28
+ label: 'Stop list',
29
+ className: 'ani-working',
30
+ onClick() {
31
+ stopSearch()
32
+ state.stoppedSearch = true
33
+ }
34
+ } : state.remoteSearch ? {
35
+ icon: 'search_off',
36
+ label: 'Clear search',
37
+ onClick() {
38
+ state.remoteSearch = ''
39
+ }
40
+ } : {
41
+ icon: 'search',
42
+ label: 'Search',
43
+ async onClick() {
44
+ state.remoteSearch = await promptDialog('Search for...') ||''
45
+ }
46
+ }
47
+
48
return h('div', { id:'menu-panel' },
49
h('div', { id:'menu-bar' },
50
h(LoginButton),
@@ -34,29 +56,14 @@ function MenuPanel() {
56
setShowFilter(!showFilter)
57
}
58
}),
37
- h(MenuButton,
38
- stopSearch ? {
39
- icon: 'stop',
40
- label: 'Stop list',
41
- className: 'ani-working',
42
- onClick() {
43
- stopSearch()
44
- state.stoppedSearch = true
45
- }
46
- } : state.remoteSearch ? {
47
- icon: 'search_off',
48
- label: 'Clear search',
49
- onClick() {
50
- state.remoteSearch = ''
51
- }
52
- } : {
53
- icon: 'search',
54
- label: 'Search',
55
- async onClick() {
56
- state.remoteSearch = await promptDialog('Search for...') ||''
57
- }
59
+ h(MenuButton, searchButtonProps),
60
+ h(MenuButton, {
61
+ icon: 'archive',
62
+ label: 'Archive',
63
+ onClick() {
64
+ window.location.href = '?get=zip'
65
}
59
- )
66
+ })
67
),
68
remoteSearch && h('div', { id: 'searched' }, (stopSearch ? 'Searching' : 'Searched') + ': ' + remoteSearch),
69
showFilter && h('input',{
package-lock.json
+640
-36
@@ -10,6 +10,7 @@
10
"license": "GPL-3.0",
11
"dependencies": {
12
"@koa/router": "^10.1.1",
13
+ "archiver": "^5.3.0",
14
"fast-glob": "^3.2.7",
15
"koa": "^2.13.4",
16
"koa-better-http-proxy": "^0.2.9",
@@ -22,6 +23,7 @@
23
"yaml": "^1.10.2"
24
},
25
"devDependencies": {
26
+ "@types/archiver": "^5.1.1",
27
"@types/axios": "^0.14.0",
28
"@types/koa": "^2.13.4",
29
"@types/koa__router": "^8.0.11",
@@ -165,6 +167,15 @@
167
"@types/node": "*"
168
}
169
},
170
+ "node_modules/@types/archiver": {
171
+ "version": "5.1.1",
172
+ "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz",
173
+ "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==",
174
+ "dev": true,
175
+ "dependencies": {
176
+ "@types/glob": "*"
177
+ }
178
+ },
179
"node_modules/@types/axios": {
180
"version": "0.14.0",
181
"resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz",
@@ -241,6 +252,16 @@
252
"@types/range-parser": "*"
253
}
254
},
255
+ "node_modules/@types/glob": {
256
+ "version": "7.2.0",
257
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
258
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
259
+ "dev": true,
260
+ "dependencies": {
261
+ "@types/minimatch": "*",
262
+ "@types/node": "*"
263
+ }
264
+ },
265
"node_modules/@types/http-assert": {
266
"version": "1.5.3",
267
"resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz",
@@ -377,6 +398,12 @@
398
"integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==",
399
"dev": true
400
},
401
+ "node_modules/@types/minimatch": {
402
+ "version": "3.0.5",
403
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
404
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
405
+ "dev": true
406
+ },
407
"node_modules/@types/minimist": {
408
"version": "1.2.2",
409
"resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
@@ -517,6 +544,70 @@
544
"node": ">= 8"
545
}
546
},
547
+ "node_modules/archiver": {
548
+ "version": "5.3.0",
549
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz",
550
+ "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==",
551
+ "dependencies": {
552
+ "archiver-utils": "^2.1.0",
553
+ "async": "^3.2.0",
554
+ "buffer-crc32": "^0.2.1",
555
+ "readable-stream": "^3.6.0",
556
+ "readdir-glob": "^1.0.0",
557
+ "tar-stream": "^2.2.0",
558
+ "zip-stream": "^4.1.0"
559
+ },
560
+ "engines": {
561
+ "node": ">= 10"
562
+ }
563
+ },
564
+ "node_modules/archiver-utils": {
565
+ "version": "2.1.0",
566
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
567
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
568
+ "dependencies": {
569
+ "glob": "^7.1.4",
570
+ "graceful-fs": "^4.2.0",
571
+ "lazystream": "^1.0.0",
572
+ "lodash.defaults": "^4.2.0",
573
+ "lodash.difference": "^4.5.0",
574
+ "lodash.flatten": "^4.4.0",
575
+ "lodash.isplainobject": "^4.0.6",
576
+ "lodash.union": "^4.6.0",
577
+ "normalize-path": "^3.0.0",
578
+ "readable-stream": "^2.0.0"
579
+ },
580
+ "engines": {
581
+ "node": ">= 6"
582
+ }
583
+ },
584
+ "node_modules/archiver-utils/node_modules/readable-stream": {
585
+ "version": "2.3.7",
586
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
587
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
588
+ "dependencies": {
589
+ "core-util-is": "~1.0.0",
590
+ "inherits": "~2.0.3",
591
+ "isarray": "~1.0.0",
592
+ "process-nextick-args": "~2.0.0",
593
+ "safe-buffer": "~5.1.1",
594
+ "string_decoder": "~1.1.1",
595
+ "util-deprecate": "~1.0.1"
596
+ }
597
+ },
598
+ "node_modules/archiver-utils/node_modules/string_decoder": {
599
+ "version": "1.1.1",
600
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
601
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
602
+ "dependencies": {
603
+ "safe-buffer": "~5.1.0"
604
+ }
605
+ },
606
+ "node_modules/archiver/node_modules/async": {
607
+ "version": "3.2.2",
608
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
609
+ "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
610
+ },
611
"node_modules/arg": {
612
"version": "4.1.3",
613
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -540,8 +631,7 @@
631
"node_modules/balanced-match": {
632
"version": "1.0.2",
633
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
543
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
544
- "dev": true
634
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
635
},
636
"node_modules/base64-js": {
637
"version": "1.5.1",
@@ -571,6 +661,16 @@
661
"node": ">=8"
662
}
663
},
664
+ "node_modules/bl": {
665
+ "version": "4.1.0",
666
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
667
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
668
+ "dependencies": {
669
+ "buffer": "^5.5.0",
670
+ "inherits": "^2.0.4",
671
+ "readable-stream": "^3.4.0"
672
+ }
673
+ },
674
"node_modules/boxen": {
675
"version": "5.1.2",
676
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -597,7 +697,6 @@
697
"version": "1.1.11",
698
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
699
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
600
- "dev": true,
700
"dependencies": {
701
"balanced-match": "^1.0.0",
702
"concat-map": "0.0.1"
@@ -643,6 +742,14 @@
742
"ieee754": "^1.1.13"
743
}
744
},
745
+ "node_modules/buffer-crc32": {
746
+ "version": "0.2.13",
747
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
748
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
749
+ "engines": {
750
+ "node": "*"
751
+ }
752
+ },
753
"node_modules/bytes": {
754
"version": "3.1.1",
755
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -871,6 +978,20 @@
978
"node": ">=0.1.90"
979
}
980
},
981
+ "node_modules/compress-commons": {
982
+ "version": "4.1.1",
983
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz",
984
+ "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==",
985
+ "dependencies": {
986
+ "buffer-crc32": "^0.2.13",
987
+ "crc32-stream": "^4.0.2",
988
+ "normalize-path": "^3.0.0",
989
+ "readable-stream": "^3.6.0"
990
+ },
991
+ "engines": {
992
+ "node": ">= 10"
993
+ }
994
+ },
995
"node_modules/compressible": {
996
"version": "2.0.18",
997
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -885,8 +1006,7 @@
1006
"node_modules/concat-map": {
1007
"version": "0.0.1",
1008
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
888
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
889
- "dev": true
1009
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
1010
},
1011
"node_modules/configstore": {
1012
"version": "5.0.1",
@@ -954,6 +1074,33 @@
1074
"buffer": "^5.1.0"
1075
}
1076
},
1077
+ "node_modules/crc-32": {
1078
+ "version": "1.2.0",
1079
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
1080
+ "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
1081
+ "dependencies": {
1082
+ "exit-on-epipe": "~1.0.1",
1083
+ "printj": "~1.1.0"
1084
+ },
1085
+ "bin": {
1086
+ "crc32": "bin/crc32.njs"
1087
+ },
1088
+ "engines": {
1089
+ "node": ">=0.8"
1090
+ }
1091
+ },
1092
+ "node_modules/crc32-stream": {
1093
+ "version": "4.0.2",
1094
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz",
1095
+ "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==",
1096
+ "dependencies": {
1097
+ "crc-32": "^1.2.0",
1098
+ "readable-stream": "^3.4.0"
1099
+ },
1100
+ "engines": {
1101
+ "node": ">= 10"
1102
+ }
1103
+ },
1104
"node_modules/create-require": {
1105
"version": "1.1.1",
1106
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -1105,7 +1252,6 @@
1252
"version": "1.4.4",
1253
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1254
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1108
- "dev": true,
1255
"dependencies": {
1256
"once": "^1.4.0"
1257
}
@@ -1138,6 +1284,14 @@
1284
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1285
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
1286
},
1287
+ "node_modules/exit-on-epipe": {
1288
+ "version": "1.0.1",
1289
+ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
1290
+ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
1291
+ "engines": {
1292
+ "node": ">=0.8"
1293
+ }
1294
+ },
1295
"node_modules/eyes": {
1296
"version": "0.1.8",
1297
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
@@ -1217,11 +1371,15 @@
1371
"node": ">= 0.6"
1372
}
1373
},
1374
+ "node_modules/fs-constants": {
1375
+ "version": "1.0.0",
1376
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
1377
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
1378
+ },
1379
"node_modules/fs.realpath": {
1380
"version": "1.0.0",
1381
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1223
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1224
- "dev": true
1382
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
1383
},
1384
"node_modules/fsevents": {
1385
"version": "2.3.2",
@@ -1276,6 +1434,25 @@
1434
"node": ">=6"
1435
}
1436
},
1437
+ "node_modules/glob": {
1438
+ "version": "7.2.0",
1439
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1440
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
1441
+ "dependencies": {
1442
+ "fs.realpath": "^1.0.0",
1443
+ "inflight": "^1.0.4",
1444
+ "inherits": "2",
1445
+ "minimatch": "^3.0.4",
1446
+ "once": "^1.3.0",
1447
+ "path-is-absolute": "^1.0.0"
1448
+ },
1449
+ "engines": {
1450
+ "node": "*"
1451
+ },
1452
+ "funding": {
1453
+ "url": "https://github.com/sponsors/isaacs"
1454
+ }
1455
+ },
1456
"node_modules/glob-parent": {
1457
"version": "5.1.2",
1458
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -1327,8 +1504,7 @@
1504
"node_modules/graceful-fs": {
1505
"version": "4.2.8",
1506
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
1330
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
1331
- "dev": true
1507
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
1508
},
1509
"node_modules/growl": {
1510
"version": "1.10.5",
@@ -1509,7 +1685,6 @@
1685
"version": "1.0.6",
1686
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1687
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1512
- "dev": true,
1688
"dependencies": {
1689
"once": "^1.3.0",
1690
"wrappy": "1"
@@ -1697,6 +1872,11 @@
1872
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
1873
"dev": true
1874
},
1875
+ "node_modules/isarray": {
1876
+ "version": "1.0.0",
1877
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1878
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1879
+ },
1880
"node_modules/isexe": {
1881
"version": "2.0.0",
1882
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1883,11 +2063,69 @@
2063
"node": ">=8"
2064
}
2065
},
2066
+ "node_modules/lazystream": {
2067
+ "version": "1.0.1",
2068
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
2069
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
2070
+ "dependencies": {
2071
+ "readable-stream": "^2.0.5"
2072
+ },
2073
+ "engines": {
2074
+ "node": ">= 0.6.3"
2075
+ }
2076
+ },
2077
+ "node_modules/lazystream/node_modules/readable-stream": {
2078
+ "version": "2.3.7",
2079
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
2080
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
2081
+ "dependencies": {
2082
+ "core-util-is": "~1.0.0",
2083
+ "inherits": "~2.0.3",
2084
+ "isarray": "~1.0.0",
2085
+ "process-nextick-args": "~2.0.0",
2086
+ "safe-buffer": "~5.1.1",
2087
+ "string_decoder": "~1.1.1",
2088
+ "util-deprecate": "~1.0.1"
2089
+ }
2090
+ },
2091
+ "node_modules/lazystream/node_modules/string_decoder": {
2092
+ "version": "1.1.1",
2093
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2094
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2095
+ "dependencies": {
2096
+ "safe-buffer": "~5.1.0"
2097
+ }
2098
+ },
2099
"node_modules/lodash": {
2100
"version": "4.17.21",
2101
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
2102
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
2103
},
2104
+ "node_modules/lodash.defaults": {
2105
+ "version": "4.2.0",
2106
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
2107
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
2108
+ },
2109
+ "node_modules/lodash.difference": {
2110
+ "version": "4.5.0",
2111
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
2112
+ "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
2113
+ },
2114
+ "node_modules/lodash.flatten": {
2115
+ "version": "4.4.0",
2116
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
2117
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
2118
+ },
2119
+ "node_modules/lodash.isplainobject": {
2120
+ "version": "4.0.6",
2121
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
2122
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
2123
+ },
2124
+ "node_modules/lodash.union": {
2125
+ "version": "4.6.0",
2126
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
2127
+ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
2128
+ },
2129
"node_modules/log-symbols": {
2130
"version": "4.1.0",
2131
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -2023,7 +2261,6 @@
2261
"version": "3.0.4",
2262
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2263
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2026
- "dev": true,
2264
"dependencies": {
2265
"brace-expansion": "^1.1.7"
2266
},
@@ -2355,7 +2592,6 @@
2592
"version": "3.0.0",
2593
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2594
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2358
- "dev": true,
2595
"engines": {
2596
"node": ">=0.10.0"
2597
}
@@ -2392,7 +2628,6 @@
2628
"version": "1.4.0",
2629
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2630
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2395
- "dev": true,
2631
"dependencies": {
2632
"wrappy": "1"
2633
}
@@ -2456,7 +2691,6 @@
2691
"version": "1.0.1",
2692
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2693
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2459
- "dev": true,
2694
"engines": {
2695
"node": ">=0.10.0"
2696
}
@@ -2486,6 +2720,22 @@
2720
"node": ">=4"
2721
}
2722
},
2723
+ "node_modules/printj": {
2724
+ "version": "1.1.2",
2725
+ "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
2726
+ "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
2727
+ "bin": {
2728
+ "printj": "bin/printj.njs"
2729
+ },
2730
+ "engines": {
2731
+ "node": ">=0.8"
2732
+ }
2733
+ },
2734
+ "node_modules/process-nextick-args": {
2735
+ "version": "2.0.1",
2736
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2737
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
2738
+ },
2739
"node_modules/pstree.remy": {
2740
"version": "1.1.8",
2741
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -2591,6 +2841,27 @@
2841
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
2842
"dev": true
2843
},
2844
+ "node_modules/readable-stream": {
2845
+ "version": "3.6.0",
2846
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
2847
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
2848
+ "dependencies": {
2849
+ "inherits": "^2.0.3",
2850
+ "string_decoder": "^1.1.1",
2851
+ "util-deprecate": "^1.0.1"
2852
+ },
2853
+ "engines": {
2854
+ "node": ">= 6"
2855
+ }
2856
+ },
2857
+ "node_modules/readdir-glob": {
2858
+ "version": "1.1.1",
2859
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
2860
+ "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
2861
+ "dependencies": {
2862
+ "minimatch": "^3.0.4"
2863
+ }
2864
+ },
2865
"node_modules/readdirp": {
2866
"version": "3.6.0",
2867
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -2765,6 +3036,33 @@
3036
"node": ">= 0.6"
3037
}
3038
},
3039
+ "node_modules/string_decoder": {
3040
+ "version": "1.3.0",
3041
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
3042
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
3043
+ "dependencies": {
3044
+ "safe-buffer": "~5.2.0"
3045
+ }
3046
+ },
3047
+ "node_modules/string_decoder/node_modules/safe-buffer": {
3048
+ "version": "5.2.1",
3049
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
3050
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
3051
+ "funding": [
3052
+ {
3053
+ "type": "github",
3054
+ "url": "https://github.com/sponsors/feross"
3055
+ },
3056
+ {
3057
+ "type": "patreon",
3058
+ "url": "https://www.patreon.com/feross"
3059
+ },
3060
+ {
3061
+ "type": "consulting",
3062
+ "url": "https://feross.org/support"
3063
+ }
3064
+ ]
3065
+ },
3066
"node_modules/string-width": {
3067
"version": "4.2.3",
3068
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -2812,6 +3110,21 @@
3110
"node": ">=4"
3111
}
3112
},
3113
+ "node_modules/tar-stream": {
3114
+ "version": "2.2.0",
3115
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
3116
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
3117
+ "dependencies": {
3118
+ "bl": "^4.0.3",
3119
+ "end-of-stream": "^1.4.1",
3120
+ "fs-constants": "^1.0.0",
3121
+ "inherits": "^2.0.3",
3122
+ "readable-stream": "^3.1.1"
3123
+ },
3124
+ "engines": {
3125
+ "node": ">=6"
3126
+ }
3127
+ },
3128
"node_modules/to-readable-stream": {
3129
"version": "1.0.0",
3130
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -3028,6 +3341,11 @@
3341
"node": ">=4"
3342
}
3343
},
3344
+ "node_modules/util-deprecate": {
3345
+ "version": "1.0.2",
3346
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3347
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
3348
+ },
3349
"node_modules/uuid": {
3350
"version": "3.4.0",
3351
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -3114,8 +3432,7 @@
3432
"node_modules/wrappy": {
3433
"version": "1.0.2",
3434
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3117
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
3118
- "dev": true
3435
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
3436
},
3437
"node_modules/write-file-atomic": {
3438
"version": "3.0.3",
@@ -3231,6 +3548,19 @@
3548
"funding": {
3549
"url": "https://github.com/sponsors/sindresorhus"
3550
}
3551
+ },
3552
+ "node_modules/zip-stream": {
3553
+ "version": "4.1.0",
3554
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
3555
+ "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==",
3556
+ "dependencies": {
3557
+ "archiver-utils": "^2.1.0",
3558
+ "compress-commons": "^4.1.0",
3559
+ "readable-stream": "^3.6.0"
3560
+ },
3561
+ "engines": {
3562
+ "node": ">= 10"
3563
+ }
3564
}
3565
},
3566
"dependencies": {
@@ -3332,6 +3662,15 @@
3662
"@types/node": "*"
3663
}
3664
},
3665
+ "@types/archiver": {
3666
+ "version": "5.1.1",
3667
+ "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz",
3668
+ "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==",
3669
+ "dev": true,
3670
+ "requires": {
3671
+ "@types/glob": "*"
3672
+ }
3673
+ },
3674
"@types/axios": {
3675
"version": "0.14.0",
3676
"resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz",
@@ -3407,6 +3746,16 @@
3746
"@types/range-parser": "*"
3747
}
3748
},
3749
+ "@types/glob": {
3750
+ "version": "7.2.0",
3751
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
3752
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
3753
+ "dev": true,
3754
+ "requires": {
3755
+ "@types/minimatch": "*",
3756
+ "@types/node": "*"
3757
+ }
3758
+ },
3759
"@types/http-assert": {
3760
"version": "1.5.3",
3761
"resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz",
@@ -3543,6 +3892,12 @@
3892
"integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==",
3893
"dev": true
3894
},
3895
+ "@types/minimatch": {
3896
+ "version": "3.0.5",
3897
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
3898
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
3899
+ "dev": true
3900
+ },
3901
"@types/minimist": {
3902
"version": "1.2.2",
3903
"resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
@@ -3656,6 +4011,68 @@
4011
"picomatch": "^2.0.4"
4012
}
4013
},
4014
+ "archiver": {
4015
+ "version": "5.3.0",
4016
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz",
4017
+ "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==",
4018
+ "requires": {
4019
+ "archiver-utils": "^2.1.0",
4020
+ "async": "^3.2.0",
4021
+ "buffer-crc32": "^0.2.1",
4022
+ "readable-stream": "^3.6.0",
4023
+ "readdir-glob": "^1.0.0",
4024
+ "tar-stream": "^2.2.0",
4025
+ "zip-stream": "^4.1.0"
4026
+ },
4027
+ "dependencies": {
4028
+ "async": {
4029
+ "version": "3.2.2",
4030
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
4031
+ "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
4032
+ }
4033
+ }
4034
+ },
4035
+ "archiver-utils": {
4036
+ "version": "2.1.0",
4037
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
4038
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
4039
+ "requires": {
4040
+ "glob": "^7.1.4",
4041
+ "graceful-fs": "^4.2.0",
4042
+ "lazystream": "^1.0.0",
4043
+ "lodash.defaults": "^4.2.0",
4044
+ "lodash.difference": "^4.5.0",
4045
+ "lodash.flatten": "^4.4.0",
4046
+ "lodash.isplainobject": "^4.0.6",
4047
+ "lodash.union": "^4.6.0",
4048
+ "normalize-path": "^3.0.0",
4049
+ "readable-stream": "^2.0.0"
4050
+ },
4051
+ "dependencies": {
4052
+ "readable-stream": {
4053
+ "version": "2.3.7",
4054
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
4055
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
4056
+ "requires": {
4057
+ "core-util-is": "~1.0.0",
4058
+ "inherits": "~2.0.3",
4059
+ "isarray": "~1.0.0",
4060
+ "process-nextick-args": "~2.0.0",
4061
+ "safe-buffer": "~5.1.1",
4062
+ "string_decoder": "~1.1.1",
4063
+ "util-deprecate": "~1.0.1"
4064
+ }
4065
+ },
4066
+ "string_decoder": {
4067
+ "version": "1.1.1",
4068
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
4069
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
4070
+ "requires": {
4071
+ "safe-buffer": "~5.1.0"
4072
+ }
4073
+ }
4074
+ }
4075
+ },
4076
"arg": {
4077
"version": "4.1.3",
4078
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -3679,8 +4096,7 @@
4096
"balanced-match": {
4097
"version": "1.0.2",
4098
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
3682
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
3683
- "dev": true
4099
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
4100
},
4101
"base64-js": {
4102
"version": "1.5.1",
@@ -3693,6 +4109,16 @@
4109
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
4110
"dev": true
4111
},
4112
+ "bl": {
4113
+ "version": "4.1.0",
4114
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
4115
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
4116
+ "requires": {
4117
+ "buffer": "^5.5.0",
4118
+ "inherits": "^2.0.4",
4119
+ "readable-stream": "^3.4.0"
4120
+ }
4121
+ },
4122
"boxen": {
4123
"version": "5.1.2",
4124
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -3713,7 +4139,6 @@
4139
"version": "1.1.11",
4140
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
4141
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
3716
- "dev": true,
4142
"requires": {
4143
"balanced-match": "^1.0.0",
4144
"concat-map": "0.0.1"
@@ -3742,6 +4167,11 @@
4167
"ieee754": "^1.1.13"
4168
}
4169
},
4170
+ "buffer-crc32": {
4171
+ "version": "0.2.13",
4172
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
4173
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
4174
+ },
4175
"bytes": {
4176
"version": "3.1.1",
4177
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -3914,6 +4344,17 @@
4344
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
4345
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
4346
},
4347
+ "compress-commons": {
4348
+ "version": "4.1.1",
4349
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz",
4350
+ "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==",
4351
+ "requires": {
4352
+ "buffer-crc32": "^0.2.13",
4353
+ "crc32-stream": "^4.0.2",
4354
+ "normalize-path": "^3.0.0",
4355
+ "readable-stream": "^3.6.0"
4356
+ }
4357
+ },
4358
"compressible": {
4359
"version": "2.0.18",
4360
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -3925,8 +4366,7 @@
4366
"concat-map": {
4367
"version": "0.0.1",
4368
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
3928
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
3929
- "dev": true
4369
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
4370
},
4371
"configstore": {
4372
"version": "5.0.1",
@@ -3982,6 +4422,24 @@
4422
"buffer": "^5.1.0"
4423
}
4424
},
4425
+ "crc-32": {
4426
+ "version": "1.2.0",
4427
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
4428
+ "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
4429
+ "requires": {
4430
+ "exit-on-epipe": "~1.0.1",
4431
+ "printj": "~1.1.0"
4432
+ }
4433
+ },
4434
+ "crc32-stream": {
4435
+ "version": "4.0.2",
4436
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz",
4437
+ "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==",
4438
+ "requires": {
4439
+ "crc-32": "^1.2.0",
4440
+ "readable-stream": "^3.4.0"
4441
+ }
4442
+ },
4443
"create-require": {
4444
"version": "1.1.1",
4445
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -4095,7 +4553,6 @@
4553
"version": "1.4.4",
4554
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
4555
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
4098
- "dev": true,
4556
"requires": {
4557
"once": "^1.4.0"
4558
}
@@ -4122,6 +4579,11 @@
4579
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
4580
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
4581
},
4582
+ "exit-on-epipe": {
4583
+ "version": "1.0.1",
4584
+ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
4585
+ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
4586
+ },
4587
"eyes": {
4588
"version": "0.1.8",
4589
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
@@ -4172,11 +4634,15 @@
4634
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
4635
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
4636
},
4637
+ "fs-constants": {
4638
+ "version": "1.0.0",
4639
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
4640
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
4641
+ },
4642
"fs.realpath": {
4643
"version": "1.0.0",
4644
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
4178
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
4179
- "dev": true
4645
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
4646
},
4647
"fsevents": {
4648
"version": "2.3.2",
@@ -4215,6 +4681,19 @@
4681
"pump": "^3.0.0"
4682
}
4683
},
4684
+ "glob": {
4685
+ "version": "7.2.0",
4686
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
4687
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
4688
+ "requires": {
4689
+ "fs.realpath": "^1.0.0",
4690
+ "inflight": "^1.0.4",
4691
+ "inherits": "2",
4692
+ "minimatch": "^3.0.4",
4693
+ "once": "^1.3.0",
4694
+ "path-is-absolute": "^1.0.0"
4695
+ }
4696
+ },
4697
"glob-parent": {
4698
"version": "5.1.2",
4699
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -4254,8 +4733,7 @@
4733
"graceful-fs": {
4734
"version": "4.2.8",
4735
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
4257
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
4258
- "dev": true
4736
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
4737
},
4738
"growl": {
4739
"version": "1.10.5",
@@ -4376,7 +4854,6 @@
4854
"version": "1.0.6",
4855
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4856
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4379
- "dev": true,
4857
"requires": {
4858
"once": "^1.3.0",
4859
"wrappy": "1"
@@ -4510,6 +4987,11 @@
4987
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
4988
"dev": true
4989
},
4990
+ "isarray": {
4991
+ "version": "1.0.0",
4992
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
4993
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
4994
+ },
4995
"isexe": {
4996
"version": "2.0.0",
4997
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -4670,11 +5152,68 @@
5152
"package-json": "^6.3.0"
5153
}
5154
},
5155
+ "lazystream": {
5156
+ "version": "1.0.1",
5157
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
5158
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
5159
+ "requires": {
5160
+ "readable-stream": "^2.0.5"
5161
+ },
5162
+ "dependencies": {
5163
+ "readable-stream": {
5164
+ "version": "2.3.7",
5165
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
5166
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
5167
+ "requires": {
5168
+ "core-util-is": "~1.0.0",
5169
+ "inherits": "~2.0.3",
5170
+ "isarray": "~1.0.0",
5171
+ "process-nextick-args": "~2.0.0",
5172
+ "safe-buffer": "~5.1.1",
5173
+ "string_decoder": "~1.1.1",
5174
+ "util-deprecate": "~1.0.1"
5175
+ }
5176
+ },
5177
+ "string_decoder": {
5178
+ "version": "1.1.1",
5179
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
5180
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
5181
+ "requires": {
5182
+ "safe-buffer": "~5.1.0"
5183
+ }
5184
+ }
5185
+ }
5186
+ },
5187
"lodash": {
5188
"version": "4.17.21",
5189
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
5190
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
5191
},
5192
+ "lodash.defaults": {
5193
+ "version": "4.2.0",
5194
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
5195
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
5196
+ },
5197
+ "lodash.difference": {
5198
+ "version": "4.5.0",
5199
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
5200
+ "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
5201
+ },
5202
+ "lodash.flatten": {
5203
+ "version": "4.4.0",
5204
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
5205
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
5206
+ },
5207
+ "lodash.isplainobject": {
5208
+ "version": "4.0.6",
5209
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
5210
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
5211
+ },
5212
+ "lodash.union": {
5213
+ "version": "4.6.0",
5214
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
5215
+ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
5216
+ },
5217
"log-symbols": {
5218
"version": "4.1.0",
5219
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -4770,7 +5309,6 @@
5309
"version": "3.0.4",
5310
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
5311
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
4773
- "dev": true,
5312
"requires": {
5313
"brace-expansion": "^1.1.7"
5314
}
@@ -4999,8 +5537,7 @@
5537
"normalize-path": {
5538
"version": "3.0.0",
5539
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
5002
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
5003
- "dev": true
5540
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
5541
},
5542
"normalize-url": {
5543
"version": "4.5.1",
@@ -5025,7 +5562,6 @@
5562
"version": "1.4.0",
5563
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5564
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5028
- "dev": true,
5565
"requires": {
5566
"wrappy": "1"
5567
}
@@ -5075,8 +5611,7 @@
5611
"path-is-absolute": {
5612
"version": "1.0.1",
5613
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
5078
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
5079
- "dev": true
5614
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
5615
},
5616
"path-to-regexp": {
5617
"version": "6.2.0",
@@ -5094,6 +5629,16 @@
5629
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
5630
"dev": true
5631
},
5632
+ "printj": {
5633
+ "version": "1.1.2",
5634
+ "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
5635
+ "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
5636
+ },
5637
+ "process-nextick-args": {
5638
+ "version": "2.0.1",
5639
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
5640
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
5641
+ },
5642
"pstree.remy": {
5643
"version": "1.1.8",
5644
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -5172,6 +5717,24 @@
5717
}
5718
}
5719
},
5720
+ "readable-stream": {
5721
+ "version": "3.6.0",
5722
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
5723
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
5724
+ "requires": {
5725
+ "inherits": "^2.0.3",
5726
+ "string_decoder": "^1.1.1",
5727
+ "util-deprecate": "^1.0.1"
5728
+ }
5729
+ },
5730
+ "readdir-glob": {
5731
+ "version": "1.1.1",
5732
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
5733
+ "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
5734
+ "requires": {
5735
+ "minimatch": "^3.0.4"
5736
+ }
5737
+ },
5738
"readdirp": {
5739
"version": "3.6.0",
5740
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -5300,6 +5863,21 @@
5863
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
5864
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
5865
},
5866
+ "string_decoder": {
5867
+ "version": "1.3.0",
5868
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
5869
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
5870
+ "requires": {
5871
+ "safe-buffer": "~5.2.0"
5872
+ },
5873
+ "dependencies": {
5874
+ "safe-buffer": {
5875
+ "version": "5.2.1",
5876
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
5877
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
5878
+ }
5879
+ }
5880
+ },
5881
"string-width": {
5882
"version": "4.2.3",
5883
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -5335,6 +5913,18 @@
5913
"has-flag": "^3.0.0"
5914
}
5915
},
5916
+ "tar-stream": {
5917
+ "version": "2.2.0",
5918
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
5919
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
5920
+ "requires": {
5921
+ "bl": "^4.0.3",
5922
+ "end-of-stream": "^1.4.1",
5923
+ "fs-constants": "^1.0.0",
5924
+ "inherits": "^2.0.3",
5925
+ "readable-stream": "^3.1.1"
5926
+ }
5927
+ },
5928
"to-readable-stream": {
5929
"version": "1.0.0",
5930
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -5480,6 +6070,11 @@
6070
"prepend-http": "^2.0.0"
6071
}
6072
},
6073
+ "util-deprecate": {
6074
+ "version": "1.0.2",
6075
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
6076
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
6077
+ },
6078
"uuid": {
6079
"version": "3.4.0",
6080
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -5541,8 +6136,7 @@
6136
"wrappy": {
6137
"version": "1.0.2",
6138
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5544
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5545
- "dev": true
6139
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
6140
},
6141
"write-file-atomic": {
6142
"version": "3.0.3",
@@ -5628,6 +6222,16 @@
6222
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
6223
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
6224
"dev": true
6225
+ },
6226
+ "zip-stream": {
6227
+ "version": "4.1.0",
6228
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
6229
+ "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==",
6230
+ "requires": {
6231
+ "archiver-utils": "^2.1.0",
6232
+ "compress-commons": "^4.1.0",
6233
+ "readable-stream": "^3.6.0"
6234
+ }
6235
}
6236
}
6237
}
package.json
+2
@@ -19,6 +19,7 @@
19
},
20
"dependencies": {
21
"@koa/router": "^10.1.1",
22
+ "archiver": "^5.3.0",
23
"fast-glob": "^3.2.7",
24
"koa": "^2.13.4",
25
"koa-better-http-proxy": "^0.2.9",
@@ -31,6 +32,7 @@
32
"yaml": "^1.10.2"
33
},
34
"devDependencies": {
35
+ "@types/archiver": "^5.1.1",
36
"@types/axios": "^0.14.0",
37
"@types/koa": "^2.13.4",
38
"@types/koa__router": "^8.0.11",
src/index.ts
+4
@@ -12,6 +12,7 @@ import compress from 'koa-compress'
12
import { Server } from 'http'
13
import { subscribe } from './config'
14
import session from 'koa-session'
15
+import { zipStreamFromFolder } from './zip'
16
17
const BUILD_TIMESTAMP = ""
18
@@ -55,6 +56,9 @@ app.use(async (ctx, next) => {
56
return await next()
57
const { source } = node
58
if (!source || await isDirectory(source)) {
59
+ const { get } = ctx.query
60
+ if (get === 'zip')
61
+ return await zipStreamFromFolder(node, ctx)
62
if (!path.endsWith('/')) // this folder was requested without the trailing /
63
return ctx.redirect(path + '/')
64
if (node.default) {
src/zip.ts
new
+19
@@ -0,0 +1,19 @@
1
+import { VfsNode, walkNode } from './vfs'
2
+import { getCurrentUsernameExpanded } from './perm'
3
+import Koa from 'koa'
4
+import archiver from 'archiver'
5
+import { isFile } from './misc'
6
+
7
+export async function zipStreamFromFolder(node: VfsNode, ctx: Koa.Context) {
8
+ ctx.status = 200
9
+ ctx.mime = 'zip'
10
+ const { name } = node
11
+ ctx.attachment(name+'.zip')
12
+ const who = await getCurrentUsernameExpanded(ctx) // cache value
13
+ const walker = walkNode(node, who, Infinity)
14
+ const archive = ctx.body = archiver('zip', { store: true })
15
+ for await (const { source, name } of walker)
16
+ if (source && await isFile(source))
17
+ archive.file(source, { name })
18
+ archive.finalize().then()
19
+}