start zip stream before complete listing of files
Massimo Melina committed
Dec 28, 2021 at 21:06 UTC
fa999303b7793a64a8a4dd4935ecb5e07374a61c
6 files changed
+575
-601
package-lock.json
+357
-589
@@ -10,7 +10,7 @@
10
"license": "GPL-3.0",
11
"dependencies": {
12
"@koa/router": "^10.1.1",
13
- "archiver": "^5.3.0",
13
+ "@node-rs/crc32": "^1.3.1",
14
"fast-glob": "^3.2.7",
15
"koa": "^2.13.4",
16
"koa-better-http-proxy": "^0.2.9",
@@ -81,6 +81,228 @@
81
"node": ">= 8.0.0"
82
}
83
},
84
+ "node_modules/@node-rs/crc32": {
85
+ "version": "1.3.1",
86
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.3.1.tgz",
87
+ "integrity": "sha512-I03vfT0P4ud5QDsWtGc5qcBhvUz2PiaMhOg/B6GjyPy+VRJW5KR74+ODM1CsVZBHM6d/+wKHgsjtSh4HMz1fYg==",
88
+ "engines": {
89
+ "node": ">= 10"
90
+ },
91
+ "funding": {
92
+ "type": "github",
93
+ "url": "https://github.com/sponsors/Brooooooklyn"
94
+ },
95
+ "optionalDependencies": {
96
+ "@node-rs/crc32-android-arm-eabi": "1.3.1",
97
+ "@node-rs/crc32-android-arm64": "1.3.1",
98
+ "@node-rs/crc32-darwin-arm64": "1.3.1",
99
+ "@node-rs/crc32-darwin-x64": "1.3.1",
100
+ "@node-rs/crc32-freebsd-x64": "1.3.1",
101
+ "@node-rs/crc32-linux-arm-gnueabihf": "1.3.1",
102
+ "@node-rs/crc32-linux-arm64-gnu": "1.3.1",
103
+ "@node-rs/crc32-linux-arm64-musl": "1.3.1",
104
+ "@node-rs/crc32-linux-x64-gnu": "1.3.1",
105
+ "@node-rs/crc32-linux-x64-musl": "1.3.1",
106
+ "@node-rs/crc32-win32-arm64-msvc": "1.3.1",
107
+ "@node-rs/crc32-win32-ia32-msvc": "1.3.1",
108
+ "@node-rs/crc32-win32-x64-msvc": "1.3.1"
109
+ }
110
+ },
111
+ "node_modules/@node-rs/crc32-android-arm-eabi": {
112
+ "version": "1.3.1",
113
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.3.1.tgz",
114
+ "integrity": "sha512-iNNHEFSOwuQ0AZHTOkbZNs2hbu3+7l+Zi1ZjqHKAZFTbd2uDPmYIWNqqxWegaKAwnvVKL9ciSDYYEEY4oF8ETg==",
115
+ "cpu": [
116
+ "arm"
117
+ ],
118
+ "optional": true,
119
+ "os": [
120
+ "android"
121
+ ],
122
+ "engines": {
123
+ "node": ">= 10"
124
+ }
125
+ },
126
+ "node_modules/@node-rs/crc32-android-arm64": {
127
+ "version": "1.3.1",
128
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.3.1.tgz",
129
+ "integrity": "sha512-r4DH1XHR2gVRv5kiNrHJU45X1KhDIwKFMKM9mw3xR36MUq34frQdUrovF+DgHKqfTBRS1y1WSL/x6tS6qYHZgQ==",
130
+ "cpu": [
131
+ "arm64"
132
+ ],
133
+ "optional": true,
134
+ "os": [
135
+ "android"
136
+ ],
137
+ "engines": {
138
+ "node": ">= 10"
139
+ }
140
+ },
141
+ "node_modules/@node-rs/crc32-darwin-arm64": {
142
+ "version": "1.3.1",
143
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.3.1.tgz",
144
+ "integrity": "sha512-3QYYAh7b+1DY2T1kdVDb8dP08OwI6MIrhWYsOb8jVBjXSB0we2phM6J092ml8l18TJNw2VLO2UgM1QvTxOaOMw==",
145
+ "cpu": [
146
+ "arm64"
147
+ ],
148
+ "optional": true,
149
+ "os": [
150
+ "darwin"
151
+ ],
152
+ "engines": {
153
+ "node": ">= 10"
154
+ }
155
+ },
156
+ "node_modules/@node-rs/crc32-darwin-x64": {
157
+ "version": "1.3.1",
158
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.3.1.tgz",
159
+ "integrity": "sha512-l7AKwVV6670T2SnDWUrXDHZxi5QX+XkS44P1wHzf+hDkgkl6Dm6ou47RH63Ebvdjl/jm4Z5Zk7XSef9aSotpwQ==",
160
+ "cpu": [
161
+ "x64"
162
+ ],
163
+ "optional": true,
164
+ "os": [
165
+ "darwin"
166
+ ],
167
+ "engines": {
168
+ "node": ">= 10"
169
+ }
170
+ },
171
+ "node_modules/@node-rs/crc32-freebsd-x64": {
172
+ "version": "1.3.1",
173
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.3.1.tgz",
174
+ "integrity": "sha512-PVoCqAZWouXYRtWBw72a16Eq1NJVOfUEA2giEAHMtpV/D5tN7mgdPsKDbeLPSRwqVA2jouDXuiyA8IIzl6Fm8w==",
175
+ "cpu": [
176
+ "x64"
177
+ ],
178
+ "optional": true,
179
+ "os": [
180
+ "freebsd"
181
+ ],
182
+ "engines": {
183
+ "node": ">= 10"
184
+ }
185
+ },
186
+ "node_modules/@node-rs/crc32-linux-arm-gnueabihf": {
187
+ "version": "1.3.1",
188
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.3.1.tgz",
189
+ "integrity": "sha512-iJhJS14FFdj3MIMLnfNcLQPstxlBDrItkZIYiMRzkw9DWpLjjLYH/uishC5Q2DB9NzR2hBdQeTcM/Ie1vKF0xw==",
190
+ "cpu": [
191
+ "arm"
192
+ ],
193
+ "optional": true,
194
+ "os": [
195
+ "linux"
196
+ ],
197
+ "engines": {
198
+ "node": ">= 10"
199
+ }
200
+ },
201
+ "node_modules/@node-rs/crc32-linux-arm64-gnu": {
202
+ "version": "1.3.1",
203
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.3.1.tgz",
204
+ "integrity": "sha512-K0m9QBkpzxbnTMfj7mpHx2YHB2Dbskf/AVA1AbWJXg5xySSb48nL5ZCqkeE+OkEzPrA9c6eu3MnEwZWodxpuSw==",
205
+ "cpu": [
206
+ "arm64"
207
+ ],
208
+ "optional": true,
209
+ "os": [
210
+ "linux"
211
+ ],
212
+ "engines": {
213
+ "node": ">= 10"
214
+ }
215
+ },
216
+ "node_modules/@node-rs/crc32-linux-arm64-musl": {
217
+ "version": "1.3.1",
218
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.3.1.tgz",
219
+ "integrity": "sha512-Un4pryPsx761ovw21J0sKeIJdqN+2i/7KEXMEoGYl2extmadsE5swS9SlMHp3l1oE2HKt/2CLfdrbinc1zoI8A==",
220
+ "cpu": [
221
+ "arm64"
222
+ ],
223
+ "optional": true,
224
+ "os": [
225
+ "linux"
226
+ ],
227
+ "engines": {
228
+ "node": ">= 10"
229
+ }
230
+ },
231
+ "node_modules/@node-rs/crc32-linux-x64-gnu": {
232
+ "version": "1.3.1",
233
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.3.1.tgz",
234
+ "integrity": "sha512-7vGDwMfBunzhxTp52x1TsozZKc4946Ahx1GndsQoN3NpiWaW3ENouliOl3U9bpSF29k/9hJvcIBDghPtz6el6Q==",
235
+ "cpu": [
236
+ "x64"
237
+ ],
238
+ "optional": true,
239
+ "os": [
240
+ "linux"
241
+ ],
242
+ "engines": {
243
+ "node": ">= 10"
244
+ }
245
+ },
246
+ "node_modules/@node-rs/crc32-linux-x64-musl": {
247
+ "version": "1.3.1",
248
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.3.1.tgz",
249
+ "integrity": "sha512-YQaCdUSSnO9Y3MGF+qfj7phHUWvJSab2QF7ru6TfX6syWPB2GYj1OhgX6CyVRli/XCkqqOMz/u2iV22vzj0jNA==",
250
+ "cpu": [
251
+ "x64"
252
+ ],
253
+ "optional": true,
254
+ "os": [
255
+ "linux"
256
+ ],
257
+ "engines": {
258
+ "node": ">= 10"
259
+ }
260
+ },
261
+ "node_modules/@node-rs/crc32-win32-arm64-msvc": {
262
+ "version": "1.3.1",
263
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.3.1.tgz",
264
+ "integrity": "sha512-Hio1iAHrvWFFh4V7MsRjaYBbS2nRNcpSHpXu0Hf/C6saykSOMkxgYbC6pcN+LfsG43HOZYkqeJAEnMal+dbk8g==",
265
+ "cpu": [
266
+ "arm64"
267
+ ],
268
+ "optional": true,
269
+ "os": [
270
+ "win32"
271
+ ],
272
+ "engines": {
273
+ "node": ">= 10"
274
+ }
275
+ },
276
+ "node_modules/@node-rs/crc32-win32-ia32-msvc": {
277
+ "version": "1.3.1",
278
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.3.1.tgz",
279
+ "integrity": "sha512-QQ0mKhM4f9JyNUPQ0BFtzeb6CrFFnDEJG9dGfJAHgsqWaHNBmVXoMXYdVGXqged25WV7R/+Zk+EWUsvBBfnVig==",
280
+ "cpu": [
281
+ "ia32"
282
+ ],
283
+ "optional": true,
284
+ "os": [
285
+ "win32"
286
+ ],
287
+ "engines": {
288
+ "node": ">= 10"
289
+ }
290
+ },
291
+ "node_modules/@node-rs/crc32-win32-x64-msvc": {
292
+ "version": "1.3.1",
293
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.3.1.tgz",
294
+ "integrity": "sha512-1hlEyJ5QK9p8+8MHpxtxW+RA5v4Y7BeSauDUAWQfBrF6FSwNKvbypkVSwC19OLQFUv0PP0lvyBG/oo6X7xN73Q==",
295
+ "cpu": [
296
+ "x64"
297
+ ],
298
+ "optional": true,
299
+ "os": [
300
+ "win32"
301
+ ],
302
+ "engines": {
303
+ "node": ">= 10"
304
+ }
305
+ },
306
"node_modules/@nodelib/fs.scandir": {
307
"version": "2.1.5",
308
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -544,70 +766,6 @@
766
"node": ">= 8"
767
}
768
},
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
- },
769
"node_modules/arg": {
770
"version": "4.1.3",
771
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -631,7 +789,8 @@
789
"node_modules/balanced-match": {
790
"version": "1.0.2",
791
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
634
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
792
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
793
+ "dev": true
794
},
795
"node_modules/base64-js": {
796
"version": "1.5.1",
@@ -661,16 +820,6 @@
820
"node": ">=8"
821
}
822
},
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
- },
823
"node_modules/boxen": {
824
"version": "5.1.2",
825
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -697,6 +846,7 @@
846
"version": "1.1.11",
847
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
848
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
849
+ "dev": true,
850
"dependencies": {
851
"balanced-match": "^1.0.0",
852
"concat-map": "0.0.1"
@@ -742,14 +892,6 @@
892
"ieee754": "^1.1.13"
893
}
894
},
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
- },
895
"node_modules/bytes": {
896
"version": "3.1.1",
897
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -978,20 +1120,6 @@
1120
"node": ">=0.1.90"
1121
}
1122
},
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
- },
1123
"node_modules/compressible": {
1124
"version": "2.0.18",
1125
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -1006,7 +1134,8 @@
1134
"node_modules/concat-map": {
1135
"version": "0.0.1",
1136
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1009
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
1137
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1138
+ "dev": true
1139
},
1140
"node_modules/configstore": {
1141
"version": "5.0.1",
@@ -1074,33 +1203,6 @@
1203
"buffer": "^5.1.0"
1204
}
1205
},
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
- },
1206
"node_modules/create-require": {
1207
"version": "1.1.1",
1208
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -1252,6 +1354,7 @@
1354
"version": "1.4.4",
1355
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1356
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1357
+ "dev": true,
1358
"dependencies": {
1359
"once": "^1.4.0"
1360
}
@@ -1284,14 +1387,6 @@
1387
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1388
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
1389
},
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
- },
1390
"node_modules/eyes": {
1391
"version": "0.1.8",
1392
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
@@ -1371,15 +1466,11 @@
1466
"node": ">= 0.6"
1467
}
1468
},
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
- },
1469
"node_modules/fs.realpath": {
1470
"version": "1.0.0",
1471
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1382
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
1472
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1473
+ "dev": true
1474
},
1475
"node_modules/fsevents": {
1476
"version": "2.3.2",
@@ -1434,25 +1525,6 @@
1525
"node": ">=6"
1526
}
1527
},
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
- },
1528
"node_modules/glob-parent": {
1529
"version": "5.1.2",
1530
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -1504,7 +1576,8 @@
1576
"node_modules/graceful-fs": {
1577
"version": "4.2.8",
1578
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
1507
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
1579
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
1580
+ "dev": true
1581
},
1582
"node_modules/growl": {
1583
"version": "1.10.5",
@@ -1685,6 +1758,7 @@
1758
"version": "1.0.6",
1759
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1760
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1761
+ "dev": true,
1762
"dependencies": {
1763
"once": "^1.3.0",
1764
"wrappy": "1"
@@ -1872,11 +1946,6 @@
1946
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
1947
"dev": true
1948
},
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
- },
1949
"node_modules/isexe": {
1950
"version": "2.0.0",
1951
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2063,69 +2132,11 @@
2132
"node": ">=8"
2133
}
2134
},
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
- },
2135
"node_modules/lodash": {
2136
"version": "4.17.21",
2137
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
2138
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
2139
},
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
- },
2140
"node_modules/log-symbols": {
2141
"version": "4.1.0",
2142
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -2261,6 +2272,7 @@
2272
"version": "3.0.4",
2273
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2274
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2275
+ "dev": true,
2276
"dependencies": {
2277
"brace-expansion": "^1.1.7"
2278
},
@@ -2592,6 +2604,7 @@
2604
"version": "3.0.0",
2605
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2606
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2607
+ "dev": true,
2608
"engines": {
2609
"node": ">=0.10.0"
2610
}
@@ -2628,6 +2641,7 @@
2641
"version": "1.4.0",
2642
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2643
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2644
+ "dev": true,
2645
"dependencies": {
2646
"wrappy": "1"
2647
}
@@ -2691,6 +2705,7 @@
2705
"version": "1.0.1",
2706
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2707
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2708
+ "dev": true,
2709
"engines": {
2710
"node": ">=0.10.0"
2711
}
@@ -2720,22 +2735,6 @@
2735
"node": ">=4"
2736
}
2737
},
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
- },
2738
"node_modules/pstree.remy": {
2739
"version": "1.1.8",
2740
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -2841,27 +2840,6 @@
2840
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
2841
"dev": true
2842
},
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
- },
2843
"node_modules/readdirp": {
2844
"version": "3.6.0",
2845
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -3036,33 +3014,6 @@
3014
"node": ">= 0.6"
3015
}
3016
},
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
- },
3017
"node_modules/string-width": {
3018
"version": "4.2.3",
3019
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -3110,21 +3061,6 @@
3061
"node": ">=4"
3062
}
3063
},
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
- },
3064
"node_modules/to-readable-stream": {
3065
"version": "1.0.0",
3066
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -3341,11 +3277,6 @@
3277
"node": ">=4"
3278
}
3279
},
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
- },
3280
"node_modules/uuid": {
3281
"version": "3.4.0",
3282
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -3432,7 +3363,8 @@
3363
"node_modules/wrappy": {
3364
"version": "1.0.2",
3365
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3435
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
3366
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
3367
+ "dev": true
3368
},
3369
"node_modules/write-file-atomic": {
3370
"version": "3.0.3",
@@ -3548,19 +3480,6 @@
3480
"funding": {
3481
"url": "https://github.com/sponsors/sindresorhus"
3482
}
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
- }
3483
}
3484
},
3485
"dependencies": {
@@ -3591,6 +3510,104 @@
3510
"path-to-regexp": "^6.1.0"
3511
}
3512
},
3513
+ "@node-rs/crc32": {
3514
+ "version": "1.3.1",
3515
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.3.1.tgz",
3516
+ "integrity": "sha512-I03vfT0P4ud5QDsWtGc5qcBhvUz2PiaMhOg/B6GjyPy+VRJW5KR74+ODM1CsVZBHM6d/+wKHgsjtSh4HMz1fYg==",
3517
+ "requires": {
3518
+ "@node-rs/crc32-android-arm-eabi": "1.3.1",
3519
+ "@node-rs/crc32-android-arm64": "1.3.1",
3520
+ "@node-rs/crc32-darwin-arm64": "1.3.1",
3521
+ "@node-rs/crc32-darwin-x64": "1.3.1",
3522
+ "@node-rs/crc32-freebsd-x64": "1.3.1",
3523
+ "@node-rs/crc32-linux-arm-gnueabihf": "1.3.1",
3524
+ "@node-rs/crc32-linux-arm64-gnu": "1.3.1",
3525
+ "@node-rs/crc32-linux-arm64-musl": "1.3.1",
3526
+ "@node-rs/crc32-linux-x64-gnu": "1.3.1",
3527
+ "@node-rs/crc32-linux-x64-musl": "1.3.1",
3528
+ "@node-rs/crc32-win32-arm64-msvc": "1.3.1",
3529
+ "@node-rs/crc32-win32-ia32-msvc": "1.3.1",
3530
+ "@node-rs/crc32-win32-x64-msvc": "1.3.1"
3531
+ }
3532
+ },
3533
+ "@node-rs/crc32-android-arm-eabi": {
3534
+ "version": "1.3.1",
3535
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.3.1.tgz",
3536
+ "integrity": "sha512-iNNHEFSOwuQ0AZHTOkbZNs2hbu3+7l+Zi1ZjqHKAZFTbd2uDPmYIWNqqxWegaKAwnvVKL9ciSDYYEEY4oF8ETg==",
3537
+ "optional": true
3538
+ },
3539
+ "@node-rs/crc32-android-arm64": {
3540
+ "version": "1.3.1",
3541
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.3.1.tgz",
3542
+ "integrity": "sha512-r4DH1XHR2gVRv5kiNrHJU45X1KhDIwKFMKM9mw3xR36MUq34frQdUrovF+DgHKqfTBRS1y1WSL/x6tS6qYHZgQ==",
3543
+ "optional": true
3544
+ },
3545
+ "@node-rs/crc32-darwin-arm64": {
3546
+ "version": "1.3.1",
3547
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.3.1.tgz",
3548
+ "integrity": "sha512-3QYYAh7b+1DY2T1kdVDb8dP08OwI6MIrhWYsOb8jVBjXSB0we2phM6J092ml8l18TJNw2VLO2UgM1QvTxOaOMw==",
3549
+ "optional": true
3550
+ },
3551
+ "@node-rs/crc32-darwin-x64": {
3552
+ "version": "1.3.1",
3553
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.3.1.tgz",
3554
+ "integrity": "sha512-l7AKwVV6670T2SnDWUrXDHZxi5QX+XkS44P1wHzf+hDkgkl6Dm6ou47RH63Ebvdjl/jm4Z5Zk7XSef9aSotpwQ==",
3555
+ "optional": true
3556
+ },
3557
+ "@node-rs/crc32-freebsd-x64": {
3558
+ "version": "1.3.1",
3559
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.3.1.tgz",
3560
+ "integrity": "sha512-PVoCqAZWouXYRtWBw72a16Eq1NJVOfUEA2giEAHMtpV/D5tN7mgdPsKDbeLPSRwqVA2jouDXuiyA8IIzl6Fm8w==",
3561
+ "optional": true
3562
+ },
3563
+ "@node-rs/crc32-linux-arm-gnueabihf": {
3564
+ "version": "1.3.1",
3565
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.3.1.tgz",
3566
+ "integrity": "sha512-iJhJS14FFdj3MIMLnfNcLQPstxlBDrItkZIYiMRzkw9DWpLjjLYH/uishC5Q2DB9NzR2hBdQeTcM/Ie1vKF0xw==",
3567
+ "optional": true
3568
+ },
3569
+ "@node-rs/crc32-linux-arm64-gnu": {
3570
+ "version": "1.3.1",
3571
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.3.1.tgz",
3572
+ "integrity": "sha512-K0m9QBkpzxbnTMfj7mpHx2YHB2Dbskf/AVA1AbWJXg5xySSb48nL5ZCqkeE+OkEzPrA9c6eu3MnEwZWodxpuSw==",
3573
+ "optional": true
3574
+ },
3575
+ "@node-rs/crc32-linux-arm64-musl": {
3576
+ "version": "1.3.1",
3577
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.3.1.tgz",
3578
+ "integrity": "sha512-Un4pryPsx761ovw21J0sKeIJdqN+2i/7KEXMEoGYl2extmadsE5swS9SlMHp3l1oE2HKt/2CLfdrbinc1zoI8A==",
3579
+ "optional": true
3580
+ },
3581
+ "@node-rs/crc32-linux-x64-gnu": {
3582
+ "version": "1.3.1",
3583
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.3.1.tgz",
3584
+ "integrity": "sha512-7vGDwMfBunzhxTp52x1TsozZKc4946Ahx1GndsQoN3NpiWaW3ENouliOl3U9bpSF29k/9hJvcIBDghPtz6el6Q==",
3585
+ "optional": true
3586
+ },
3587
+ "@node-rs/crc32-linux-x64-musl": {
3588
+ "version": "1.3.1",
3589
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.3.1.tgz",
3590
+ "integrity": "sha512-YQaCdUSSnO9Y3MGF+qfj7phHUWvJSab2QF7ru6TfX6syWPB2GYj1OhgX6CyVRli/XCkqqOMz/u2iV22vzj0jNA==",
3591
+ "optional": true
3592
+ },
3593
+ "@node-rs/crc32-win32-arm64-msvc": {
3594
+ "version": "1.3.1",
3595
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.3.1.tgz",
3596
+ "integrity": "sha512-Hio1iAHrvWFFh4V7MsRjaYBbS2nRNcpSHpXu0Hf/C6saykSOMkxgYbC6pcN+LfsG43HOZYkqeJAEnMal+dbk8g==",
3597
+ "optional": true
3598
+ },
3599
+ "@node-rs/crc32-win32-ia32-msvc": {
3600
+ "version": "1.3.1",
3601
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.3.1.tgz",
3602
+ "integrity": "sha512-QQ0mKhM4f9JyNUPQ0BFtzeb6CrFFnDEJG9dGfJAHgsqWaHNBmVXoMXYdVGXqged25WV7R/+Zk+EWUsvBBfnVig==",
3603
+ "optional": true
3604
+ },
3605
+ "@node-rs/crc32-win32-x64-msvc": {
3606
+ "version": "1.3.1",
3607
+ "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.3.1.tgz",
3608
+ "integrity": "sha512-1hlEyJ5QK9p8+8MHpxtxW+RA5v4Y7BeSauDUAWQfBrF6FSwNKvbypkVSwC19OLQFUv0PP0lvyBG/oo6X7xN73Q==",
3609
+ "optional": true
3610
+ },
3611
"@nodelib/fs.scandir": {
3612
"version": "2.1.5",
3613
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -4011,68 +4028,6 @@
4028
"picomatch": "^2.0.4"
4029
}
4030
},
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
- },
4031
"arg": {
4032
"version": "4.1.3",
4033
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -4096,7 +4051,8 @@
4051
"balanced-match": {
4052
"version": "1.0.2",
4053
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
4099
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
4054
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
4055
+ "dev": true
4056
},
4057
"base64-js": {
4058
"version": "1.5.1",
@@ -4109,16 +4065,6 @@
4065
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
4066
"dev": true
4067
},
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
- },
4068
"boxen": {
4069
"version": "5.1.2",
4070
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -4139,6 +4085,7 @@
4085
"version": "1.1.11",
4086
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
4087
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
4088
+ "dev": true,
4089
"requires": {
4090
"balanced-match": "^1.0.0",
4091
"concat-map": "0.0.1"
@@ -4167,11 +4114,6 @@
4114
"ieee754": "^1.1.13"
4115
}
4116
},
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
- },
4117
"bytes": {
4118
"version": "3.1.1",
4119
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -4344,17 +4286,6 @@
4286
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
4287
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
4288
},
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
- },
4289
"compressible": {
4290
"version": "2.0.18",
4291
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -4366,7 +4297,8 @@
4297
"concat-map": {
4298
"version": "0.0.1",
4299
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
4369
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
4300
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
4301
+ "dev": true
4302
},
4303
"configstore": {
4304
"version": "5.0.1",
@@ -4422,24 +4354,6 @@
4354
"buffer": "^5.1.0"
4355
}
4356
},
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
- },
4357
"create-require": {
4358
"version": "1.1.1",
4359
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -4553,6 +4467,7 @@
4467
"version": "1.4.4",
4468
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
4469
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
4470
+ "dev": true,
4471
"requires": {
4472
"once": "^1.4.0"
4473
}
@@ -4579,11 +4494,6 @@
4494
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
4495
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
4496
},
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
- },
4497
"eyes": {
4498
"version": "0.1.8",
4499
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
@@ -4634,15 +4544,11 @@
4544
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
4545
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
4546
},
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
- },
4547
"fs.realpath": {
4548
"version": "1.0.0",
4549
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
4645
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
4550
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
4551
+ "dev": true
4552
},
4553
"fsevents": {
4554
"version": "2.3.2",
@@ -4681,19 +4587,6 @@
4587
"pump": "^3.0.0"
4588
}
4589
},
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
- },
4590
"glob-parent": {
4591
"version": "5.1.2",
4592
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -4733,7 +4626,8 @@
4626
"graceful-fs": {
4627
"version": "4.2.8",
4628
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
4736
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
4629
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
4630
+ "dev": true
4631
},
4632
"growl": {
4633
"version": "1.10.5",
@@ -4854,6 +4748,7 @@
4748
"version": "1.0.6",
4749
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4750
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4751
+ "dev": true,
4752
"requires": {
4753
"once": "^1.3.0",
4754
"wrappy": "1"
@@ -4987,11 +4882,6 @@
4882
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
4883
"dev": true
4884
},
4990
- "isarray": {
4991
- "version": "1.0.0",
4992
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
4993
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
4994
- },
4885
"isexe": {
4886
"version": "2.0.0",
4887
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -5152,68 +5042,11 @@
5042
"package-json": "^6.3.0"
5043
}
5044
},
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
- },
5045
"lodash": {
5046
"version": "4.17.21",
5047
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
5048
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
5049
},
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
- },
5050
"log-symbols": {
5051
"version": "4.1.0",
5052
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -5309,6 +5142,7 @@
5142
"version": "3.0.4",
5143
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
5144
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
5145
+ "dev": true,
5146
"requires": {
5147
"brace-expansion": "^1.1.7"
5148
}
@@ -5537,7 +5371,8 @@
5371
"normalize-path": {
5372
"version": "3.0.0",
5373
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
5540
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
5374
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
5375
+ "dev": true
5376
},
5377
"normalize-url": {
5378
"version": "4.5.1",
@@ -5562,6 +5397,7 @@
5397
"version": "1.4.0",
5398
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5399
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5400
+ "dev": true,
5401
"requires": {
5402
"wrappy": "1"
5403
}
@@ -5611,7 +5447,8 @@
5447
"path-is-absolute": {
5448
"version": "1.0.1",
5449
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
5614
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
5450
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
5451
+ "dev": true
5452
},
5453
"path-to-regexp": {
5454
"version": "6.2.0",
@@ -5629,16 +5466,6 @@
5466
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
5467
"dev": true
5468
},
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
- },
5469
"pstree.remy": {
5470
"version": "1.1.8",
5471
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -5717,24 +5544,6 @@
5544
}
5545
}
5546
},
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
- },
5547
"readdirp": {
5548
"version": "3.6.0",
5549
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -5863,21 +5672,6 @@
5672
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
5673
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
5674
},
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
- },
5675
"string-width": {
5676
"version": "4.2.3",
5677
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -5913,18 +5707,6 @@
5707
"has-flag": "^3.0.0"
5708
}
5709
},
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
- },
5710
"to-readable-stream": {
5711
"version": "1.0.0",
5712
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -6070,11 +5852,6 @@
5852
"prepend-http": "^2.0.0"
5853
}
5854
},
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
- },
5855
"uuid": {
5856
"version": "3.4.0",
5857
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -6136,7 +5913,8 @@
5913
"wrappy": {
5914
"version": "1.0.2",
5915
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
6139
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
5916
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5917
+ "dev": true
5918
},
5919
"write-file-atomic": {
5920
"version": "3.0.3",
@@ -6222,16 +6000,6 @@
6000
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
6001
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
6002
"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
- }
6003
}
6004
}
6005
}
package.json
+1
-1
@@ -19,7 +19,7 @@
19
},
20
"dependencies": {
21
"@koa/router": "^10.1.1",
22
- "archiver": "^5.3.0",
22
+ "@node-rs/crc32": "^1.3.1",
23
"fast-glob": "^3.2.7",
24
"koa": "^2.13.4",
25
"koa-better-http-proxy": "^0.2.9",
src/QuickZipStream.ts
new
+193
@@ -0,0 +1,193 @@
1
+import { crc32 } from '@node-rs/crc32'
2
+import { Readable } from 'stream'
3
+
4
+const ZIP64_LIMIT = 2**31 -1
5
+
6
+interface ZipSource {
7
+ path: string
8
+ data: Readable
9
+ size: number
10
+ ts: Date
11
+}
12
+export class QuickZipStream extends Readable {
13
+ private workingFile = false
14
+ private numberOfFiles: number = 0
15
+ private finished = false
16
+ private readonly centralDir: ({ size:number, crc:number, ts:Date, pathAsBuffer:Buffer, offset:number, version:number })[] = []
17
+ private dataWritten = 0
18
+
19
+ constructor(private readonly walker: AsyncIterableIterator<ZipSource>) {
20
+ super({})
21
+ }
22
+
23
+ _push(chunk:any) {
24
+ if (Array.isArray(chunk))
25
+ chunk = buffer(chunk)
26
+ this.push(chunk)
27
+ this.dataWritten += chunk.length
28
+ }
29
+
30
+ async _read(): Promise<void> {
31
+ if (this.workingFile || this.finished) return
32
+ const { value } = await this.walker.next() as { value: ZipSource }
33
+ if (!value)
34
+ return this.closeArchive()
35
+ ++this.numberOfFiles
36
+ let { path, data, size, ts } = value
37
+ const pathAsBuffer = Buffer.from(path, 'utf8')
38
+
39
+ let crc: number | undefined = undefined
40
+ const offset = this.dataWritten
41
+ let version = 20
42
+ this._push([
43
+ 4, 0x04034b50,
44
+ 2, version,
45
+ 2, 0x08, // flags
46
+ 2, 0, // compression = store
47
+ ...ts2buf(ts),
48
+ 4, 0, // crc
49
+ 4, 0, // size
50
+ 4, 0, // size
51
+ 2, pathAsBuffer.length,
52
+ 2, 0, // extra length
53
+ ])
54
+ this._push(pathAsBuffer)
55
+
56
+ let total = 0
57
+ data.on('error', (err) => console.error(err))
58
+ data.on('data', chunk => {
59
+ this._push(chunk)
60
+ crc = crc32(chunk, crc)
61
+ total += chunk.length
62
+ })
63
+ this.workingFile = true
64
+ data.on('end', ()=>{
65
+ this.workingFile = false
66
+ console.debug('zip', total, path)
67
+ this.centralDir.push({ size, crc:crc!, pathAsBuffer, ts, offset, version })
68
+ const sizeSize = size > ZIP64_LIMIT ? 8 : 4
69
+ this._push([
70
+ 4, 0x08074b50,
71
+ 4, crc,
72
+ sizeSize, size,
73
+ sizeSize, size,
74
+ ])
75
+ })
76
+ }
77
+
78
+ closeArchive() {
79
+ this.finished = true
80
+ let centralOffset = this.dataWritten
81
+ for (let { size, ts, crc, offset, pathAsBuffer, version } of this.centralDir) {
82
+ const extra = []
83
+ if (size > ZIP64_LIMIT) {
84
+ extra.push(size, size)
85
+ size = 0xffffffff
86
+ }
87
+ if (offset > ZIP64_LIMIT) {
88
+ extra.push(offset)
89
+ offset = 0xffffffff
90
+ }
91
+ const extraData = buffer(!extra.length ? []
92
+ : [ 2,1, 2,8*extra.length, ...extra.map(x=> [8,x]).flat() ])
93
+ if (extraData.length && version < 45)
94
+ version = 45
95
+ this._push([
96
+ 4, 0x02014b50, // central dir signature
97
+ 2, version,
98
+ 2, version,
99
+ 2, 0x08, // flags (bit3 = no crc in local header)
100
+ 2, 0, // compression method = store
101
+ ...ts2buf(ts),
102
+ 4, crc,
103
+ 4, size, // compressed
104
+ 4, size,
105
+ 2, pathAsBuffer.length,
106
+ 2, extraData.length,
107
+ 2, 0, //comment length
108
+ 2, 0, // disk
109
+ 2, 0, // attr
110
+ 4, 0, // ext.attr
111
+ 4, offset,
112
+ ])
113
+ this._push(pathAsBuffer)
114
+ this._push(extraData)
115
+ }
116
+ const n = this.centralDir.length
117
+ const after = this.dataWritten
118
+ let centralSize = after-centralOffset
119
+ if (centralOffset > ZIP64_LIMIT) {
120
+ this._push([
121
+ 4, 0x06064b50, // end of central dir zip64
122
+ 8, 44,
123
+ 2, 45,
124
+ 2, 45,
125
+ 4, 0,
126
+ 4, 0,
127
+ 8, n,
128
+ 8, n,
129
+ 8, centralSize,
130
+ 8, centralOffset,
131
+ ])
132
+ this._push([
133
+ 4, 0x07064b50,
134
+ 4, 0,
135
+ 8, after,
136
+ 4, 1,
137
+ ])
138
+ centralOffset = 0xFFFFFFFF
139
+ }
140
+ this._push([
141
+ 4,0x06054b50, // end of central directory signature
142
+ 4,0, // disk-related stuff
143
+ 2,this.numberOfFiles,
144
+ 2,this.numberOfFiles,
145
+ 4,centralSize,
146
+ 4,centralOffset,
147
+ 2,0, // comment length
148
+ ])
149
+ this.push(null) // EOF
150
+ }
151
+}
152
+
153
+function buffer(parts: any[]) {
154
+ const pairs = []
155
+ let total = 0
156
+ while (parts.length) {
157
+ const size = parts.shift()
158
+ if (typeof size === 'string') {
159
+ pairs.push([String, size])
160
+ total += size.length
161
+ }
162
+ else {
163
+ pairs.push([size, parts.shift()])
164
+ total += size
165
+ }
166
+ }
167
+ const ret = Buffer.alloc(total, 0)
168
+ let offset = 0
169
+ for (const [size, data] of pairs) {
170
+ if (size === 1)
171
+ offset = ret.writeUInt8(data, offset)
172
+ else if (size === 2)
173
+ offset = ret.writeUInt16LE(data, offset)
174
+ else if (size === 4)
175
+ offset = ret.writeUInt32LE(data, offset)
176
+ else if (size === 8)
177
+ offset = ret.writeBigUInt64LE(BigInt(data), offset)
178
+ else if (size === String)
179
+ offset = ret.write(data,'ascii')
180
+ else
181
+ throw 'unsupported'
182
+ }
183
+ return ret
184
+}
185
+
186
+function ts2buf(ts:Date) {
187
+ const date = (ts.getFullYear() - 1980) << 9 | ts.getMonth() << 5 | ts.getDate()
188
+ const time = ts.getHours() << 11 | ts.getMinutes() << 5 | ts.getSeconds()
189
+ return [
190
+ 2, time,
191
+ 2, date,
192
+ ]
193
+}
src/misc.ts
+9
@@ -74,3 +74,12 @@ export function watchLoad(path:string, parser:(data:any)=>void|Promise<void>) {
74
doing = false
75
}
76
}
77
+
78
+// callback can return undefined to skip element
79
+export async function* filterMapGenerator<IN,OUT>(generator: AsyncIterableIterator<IN>, filterMap: (el: IN) => Promise<OUT>) {
80
+ for await (const x of generator) {
81
+ const res:OUT = await filterMap(x)
82
+ if (res !== undefined)
83
+ yield res as Exclude<OUT,undefined>
84
+ }
85
+}
src/zip.ts
+13
-10
@@ -1,19 +1,22 @@
1
import { VfsNode, walkNode } from './vfs'
2
-import { getCurrentUsernameExpanded } from './perm'
2
import Koa from 'koa'
4
-import archiver from 'archiver'
5
-import { isFile } from './misc'
3
+import { filterMapGenerator } from './misc'
4
+import { QuickZipStream } from './QuickZipStream'
5
+import { createReadStream } from 'fs'
6
+import fs from 'fs/promises'
7
8
export async function zipStreamFromFolder(node: VfsNode, ctx: Koa.Context) {
9
ctx.status = 200
10
ctx.mime = 'zip'
11
const { name } = node
12
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()
13
+ const walker = filterMapGenerator(walkNode(node, ctx, Infinity), async (el:VfsNode) => {
14
+ if (!el.source || ctx.req.aborted)
15
+ return
16
+ const st = await fs.stat(el.source)
17
+ if (!st?.isFile())
18
+ return
19
+ return { path:el.name, size:st.size, ts:st.mtime||st.ctime, data: createReadStream(el.source) }
20
+ })
21
+ ctx.body = new QuickZipStream(walker)
22
}
todo.md
+2
-1
@@ -5,7 +5,6 @@
5
- upload
6
- log file
7
- node.comment
8
-- streamable zip archives (no compression, resumable?)
8
- config: max speed (total/per-ip)
9
- config: max connections (total/per-ip)
10
- user.ignoreLimits
@@ -16,6 +15,8 @@
15
- webdav?
16
- vfs: ability to remove/hide/rename files deep in a source
17
- administration interface
18
+- log: ip2name
19
+- errors in separated log file
20
- login without passing clear text password?
21
we could use asymmetric encryption, possibly on a hashed password, that means
22
we should store a hash2(hash1(password+salt1)), where hash1 is applied on both client