some test for backend
Massimo Melina committed
Dec 12, 2021 at 16:25 UTC
c69a384979dcb4345acdaaa13707c8e2fad5755f
8 files changed
+1010
-23
frontend/src/App.tsx
+1
-1
@@ -27,7 +27,7 @@ function Head() {
27
interface FileObj { n:string, s?:number }
28
29
function FilesList() {
30
- const res = useApi('files_list', { path: useLocation().pathname })?.list
30
+ const res = useApi('file_list', { path: useLocation().pathname })?.list
31
if (!res)
32
return h(Loading)
33
return h('ul', {}, res.map(({ n }:FileObj) => {
package-lock.json
+963
@@ -15,13 +15,17 @@
15
"mime-types": "^2.1.34"
16
},
17
"devDependencies": {
18
+ "@types/axios": "^0.14.0",
19
"@types/koa": "^2.13.4",
20
"@types/koa__router": "^8.0.11",
21
"@types/koa-bodyparser": "^4.3.4",
22
"@types/koa-mount": "^4.0.1",
23
"@types/koa-static": "^4.0.2",
24
"@types/mime-types": "^2.1.1",
25
+ "@types/mocha": "^9.0.0",
26
"@types/node": "^16.11.12",
27
+ "axios": "^0.24.0",
28
+ "mocha": "^9.1.3",
29
"nodemon": "^2.0.15",
30
"ts-node": "^10.4.0",
31
"typescript": "^4.5.2"
@@ -149,6 +153,16 @@
153
"@types/node": "*"
154
}
155
},
156
+ "node_modules/@types/axios": {
157
+ "version": "0.14.0",
158
+ "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz",
159
+ "integrity": "sha1-7CMA++fX3d1+udOr+HmZlkyvzkY=",
160
+ "deprecated": "This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed!",
161
+ "dev": true,
162
+ "dependencies": {
163
+ "axios": "*"
164
+ }
165
+ },
166
"node_modules/@types/body-parser": {
167
"version": "1.19.2",
168
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
@@ -310,6 +324,12 @@
324
"integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==",
325
"dev": true
326
},
327
+ "node_modules/@types/mocha": {
328
+ "version": "9.0.0",
329
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz",
330
+ "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==",
331
+ "dev": true
332
+ },
333
"node_modules/@types/node": {
334
"version": "16.11.12",
335
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
@@ -338,6 +358,12 @@
358
"@types/node": "*"
359
}
360
},
361
+ "node_modules/@ungap/promise-all-settled": {
362
+ "version": "1.1.2",
363
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
364
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
365
+ "dev": true
366
+ },
367
"node_modules/abbrev": {
368
"version": "1.1.1",
369
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -386,6 +412,15 @@
412
"string-width": "^4.1.0"
413
}
414
},
415
+ "node_modules/ansi-colors": {
416
+ "version": "4.1.1",
417
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
418
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
419
+ "dev": true,
420
+ "engines": {
421
+ "node": ">=6"
422
+ }
423
+ },
424
"node_modules/ansi-regex": {
425
"version": "5.0.1",
426
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -434,6 +469,15 @@
469
"resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
470
"integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
471
},
472
+ "node_modules/axios": {
473
+ "version": "0.24.0",
474
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
475
+ "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
476
+ "dev": true,
477
+ "dependencies": {
478
+ "follow-redirects": "^1.14.4"
479
+ }
480
+ },
481
"node_modules/balanced-match": {
482
"version": "1.0.2",
483
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -492,6 +536,12 @@
536
"node": ">=8"
537
}
538
},
539
+ "node_modules/browser-stdout": {
540
+ "version": "1.3.1",
541
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
542
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
543
+ "dev": true
544
+ },
545
"node_modules/bytes": {
546
"version": "3.1.1",
547
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -654,6 +704,17 @@
704
"url": "https://github.com/sponsors/sindresorhus"
705
}
706
},
707
+ "node_modules/cliui": {
708
+ "version": "7.0.4",
709
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
710
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
711
+ "dev": true,
712
+ "dependencies": {
713
+ "string-width": "^4.2.0",
714
+ "strip-ansi": "^6.0.0",
715
+ "wrap-ansi": "^7.0.0"
716
+ }
717
+ },
718
"node_modules/clone-response": {
719
"version": "1.0.2",
720
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
@@ -807,6 +868,18 @@
868
}
869
}
870
},
871
+ "node_modules/decamelize": {
872
+ "version": "4.0.0",
873
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
874
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
875
+ "dev": true,
876
+ "engines": {
877
+ "node": ">=10"
878
+ },
879
+ "funding": {
880
+ "url": "https://github.com/sponsors/sindresorhus"
881
+ }
882
+ },
883
"node_modules/decompress-response": {
884
"version": "3.3.0",
885
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
@@ -917,6 +990,15 @@
990
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
991
"integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM="
992
},
993
+ "node_modules/escalade": {
994
+ "version": "3.1.1",
995
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
996
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
997
+ "dev": true,
998
+ "engines": {
999
+ "node": ">=6"
1000
+ }
1001
+ },
1002
"node_modules/escape-goat": {
1003
"version": "2.1.1",
1004
"resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
@@ -973,6 +1055,35 @@
1055
"node": ">=8"
1056
}
1057
},
1058
+ "node_modules/flat": {
1059
+ "version": "5.0.2",
1060
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
1061
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
1062
+ "dev": true,
1063
+ "bin": {
1064
+ "flat": "cli.js"
1065
+ }
1066
+ },
1067
+ "node_modules/follow-redirects": {
1068
+ "version": "1.14.6",
1069
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
1070
+ "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==",
1071
+ "dev": true,
1072
+ "funding": [
1073
+ {
1074
+ "type": "individual",
1075
+ "url": "https://github.com/sponsors/RubenVerborgh"
1076
+ }
1077
+ ],
1078
+ "engines": {
1079
+ "node": ">=4.0"
1080
+ },
1081
+ "peerDependenciesMeta": {
1082
+ "debug": {
1083
+ "optional": true
1084
+ }
1085
+ }
1086
+ },
1087
"node_modules/fresh": {
1088
"version": "0.5.2",
1089
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -981,6 +1092,12 @@
1092
"node": ">= 0.6"
1093
}
1094
},
1095
+ "node_modules/fs.realpath": {
1096
+ "version": "1.0.0",
1097
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1098
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1099
+ "dev": true
1100
+ },
1101
"node_modules/fsevents": {
1102
"version": "2.3.2",
1103
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -1000,6 +1117,15 @@
1117
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1118
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1119
},
1120
+ "node_modules/get-caller-file": {
1121
+ "version": "2.0.5",
1122
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1123
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1124
+ "dev": true,
1125
+ "engines": {
1126
+ "node": "6.* || 8.* || >= 10.*"
1127
+ }
1128
+ },
1129
"node_modules/get-intrinsic": {
1130
"version": "1.1.1",
1131
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -1079,6 +1205,15 @@
1205
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
1206
"dev": true
1207
},
1208
+ "node_modules/growl": {
1209
+ "version": "1.10.5",
1210
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
1211
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
1212
+ "dev": true,
1213
+ "engines": {
1214
+ "node": ">=4.x"
1215
+ }
1216
+ },
1217
"node_modules/has": {
1218
"version": "1.0.3",
1219
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -1133,6 +1268,15 @@
1268
"node": ">=8"
1269
}
1270
},
1271
+ "node_modules/he": {
1272
+ "version": "1.2.0",
1273
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
1274
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
1275
+ "dev": true,
1276
+ "bin": {
1277
+ "he": "bin/he"
1278
+ }
1279
+ },
1280
"node_modules/http-assert": {
1281
"version": "1.5.0",
1282
"resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
@@ -1217,6 +1361,16 @@
1361
"node": ">= 0.8.0"
1362
}
1363
},
1364
+ "node_modules/inflight": {
1365
+ "version": "1.0.6",
1366
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1367
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1368
+ "dev": true,
1369
+ "dependencies": {
1370
+ "once": "^1.3.0",
1371
+ "wrappy": "1"
1372
+ }
1373
+ },
1374
"node_modules/inherits": {
1375
"version": "2.0.4",
1376
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -1351,18 +1505,45 @@
1505
"node": ">=8"
1506
}
1507
},
1508
+ "node_modules/is-plain-obj": {
1509
+ "version": "2.1.0",
1510
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
1511
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
1512
+ "dev": true,
1513
+ "engines": {
1514
+ "node": ">=8"
1515
+ }
1516
+ },
1517
"node_modules/is-typedarray": {
1518
"version": "1.0.0",
1519
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1520
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1521
"dev": true
1522
},
1523
+ "node_modules/is-unicode-supported": {
1524
+ "version": "0.1.0",
1525
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
1526
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
1527
+ "dev": true,
1528
+ "engines": {
1529
+ "node": ">=10"
1530
+ },
1531
+ "funding": {
1532
+ "url": "https://github.com/sponsors/sindresorhus"
1533
+ }
1534
+ },
1535
"node_modules/is-yarn-global": {
1536
"version": "0.3.0",
1537
"resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
1538
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
1539
"dev": true
1540
},
1541
+ "node_modules/isexe": {
1542
+ "version": "2.0.0",
1543
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1544
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1545
+ "dev": true
1546
+ },
1547
"node_modules/isstream": {
1548
"version": "0.1.2",
1549
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -1526,6 +1707,22 @@
1707
"node": ">=8"
1708
}
1709
},
1710
+ "node_modules/log-symbols": {
1711
+ "version": "4.1.0",
1712
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
1713
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
1714
+ "dev": true,
1715
+ "dependencies": {
1716
+ "chalk": "^4.1.0",
1717
+ "is-unicode-supported": "^0.1.0"
1718
+ },
1719
+ "engines": {
1720
+ "node": ">=10"
1721
+ },
1722
+ "funding": {
1723
+ "url": "https://github.com/sponsors/sindresorhus"
1724
+ }
1725
+ },
1726
"node_modules/lowercase-keys": {
1727
"version": "1.0.1",
1728
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -1659,11 +1856,260 @@
1856
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1857
"dev": true
1858
},
1859
+ "node_modules/mocha": {
1860
+ "version": "9.1.3",
1861
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
1862
+ "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
1863
+ "dev": true,
1864
+ "dependencies": {
1865
+ "@ungap/promise-all-settled": "1.1.2",
1866
+ "ansi-colors": "4.1.1",
1867
+ "browser-stdout": "1.3.1",
1868
+ "chokidar": "3.5.2",
1869
+ "debug": "4.3.2",
1870
+ "diff": "5.0.0",
1871
+ "escape-string-regexp": "4.0.0",
1872
+ "find-up": "5.0.0",
1873
+ "glob": "7.1.7",
1874
+ "growl": "1.10.5",
1875
+ "he": "1.2.0",
1876
+ "js-yaml": "4.1.0",
1877
+ "log-symbols": "4.1.0",
1878
+ "minimatch": "3.0.4",
1879
+ "ms": "2.1.3",
1880
+ "nanoid": "3.1.25",
1881
+ "serialize-javascript": "6.0.0",
1882
+ "strip-json-comments": "3.1.1",
1883
+ "supports-color": "8.1.1",
1884
+ "which": "2.0.2",
1885
+ "workerpool": "6.1.5",
1886
+ "yargs": "16.2.0",
1887
+ "yargs-parser": "20.2.4",
1888
+ "yargs-unparser": "2.0.0"
1889
+ },
1890
+ "bin": {
1891
+ "_mocha": "bin/_mocha",
1892
+ "mocha": "bin/mocha"
1893
+ },
1894
+ "engines": {
1895
+ "node": ">= 12.0.0"
1896
+ },
1897
+ "funding": {
1898
+ "type": "opencollective",
1899
+ "url": "https://opencollective.com/mochajs"
1900
+ }
1901
+ },
1902
+ "node_modules/mocha/node_modules/argparse": {
1903
+ "version": "2.0.1",
1904
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1905
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1906
+ "dev": true
1907
+ },
1908
+ "node_modules/mocha/node_modules/debug": {
1909
+ "version": "4.3.2",
1910
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
1911
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
1912
+ "dev": true,
1913
+ "dependencies": {
1914
+ "ms": "2.1.2"
1915
+ },
1916
+ "engines": {
1917
+ "node": ">=6.0"
1918
+ },
1919
+ "peerDependenciesMeta": {
1920
+ "supports-color": {
1921
+ "optional": true
1922
+ }
1923
+ }
1924
+ },
1925
+ "node_modules/mocha/node_modules/debug/node_modules/ms": {
1926
+ "version": "2.1.2",
1927
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1928
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1929
+ "dev": true
1930
+ },
1931
+ "node_modules/mocha/node_modules/diff": {
1932
+ "version": "5.0.0",
1933
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
1934
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
1935
+ "dev": true,
1936
+ "engines": {
1937
+ "node": ">=0.3.1"
1938
+ }
1939
+ },
1940
+ "node_modules/mocha/node_modules/escape-string-regexp": {
1941
+ "version": "4.0.0",
1942
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1943
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1944
+ "dev": true,
1945
+ "engines": {
1946
+ "node": ">=10"
1947
+ },
1948
+ "funding": {
1949
+ "url": "https://github.com/sponsors/sindresorhus"
1950
+ }
1951
+ },
1952
+ "node_modules/mocha/node_modules/find-up": {
1953
+ "version": "5.0.0",
1954
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1955
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1956
+ "dev": true,
1957
+ "dependencies": {
1958
+ "locate-path": "^6.0.0",
1959
+ "path-exists": "^4.0.0"
1960
+ },
1961
+ "engines": {
1962
+ "node": ">=10"
1963
+ },
1964
+ "funding": {
1965
+ "url": "https://github.com/sponsors/sindresorhus"
1966
+ }
1967
+ },
1968
+ "node_modules/mocha/node_modules/glob": {
1969
+ "version": "7.1.7",
1970
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
1971
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
1972
+ "dev": true,
1973
+ "dependencies": {
1974
+ "fs.realpath": "^1.0.0",
1975
+ "inflight": "^1.0.4",
1976
+ "inherits": "2",
1977
+ "minimatch": "^3.0.4",
1978
+ "once": "^1.3.0",
1979
+ "path-is-absolute": "^1.0.0"
1980
+ },
1981
+ "engines": {
1982
+ "node": "*"
1983
+ },
1984
+ "funding": {
1985
+ "url": "https://github.com/sponsors/isaacs"
1986
+ }
1987
+ },
1988
+ "node_modules/mocha/node_modules/has-flag": {
1989
+ "version": "4.0.0",
1990
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1991
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1992
+ "dev": true,
1993
+ "engines": {
1994
+ "node": ">=8"
1995
+ }
1996
+ },
1997
+ "node_modules/mocha/node_modules/js-yaml": {
1998
+ "version": "4.1.0",
1999
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2000
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2001
+ "dev": true,
2002
+ "dependencies": {
2003
+ "argparse": "^2.0.1"
2004
+ },
2005
+ "bin": {
2006
+ "js-yaml": "bin/js-yaml.js"
2007
+ }
2008
+ },
2009
+ "node_modules/mocha/node_modules/locate-path": {
2010
+ "version": "6.0.0",
2011
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2012
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2013
+ "dev": true,
2014
+ "dependencies": {
2015
+ "p-locate": "^5.0.0"
2016
+ },
2017
+ "engines": {
2018
+ "node": ">=10"
2019
+ },
2020
+ "funding": {
2021
+ "url": "https://github.com/sponsors/sindresorhus"
2022
+ }
2023
+ },
2024
+ "node_modules/mocha/node_modules/ms": {
2025
+ "version": "2.1.3",
2026
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2027
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2028
+ "dev": true
2029
+ },
2030
+ "node_modules/mocha/node_modules/p-limit": {
2031
+ "version": "3.1.0",
2032
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2033
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2034
+ "dev": true,
2035
+ "dependencies": {
2036
+ "yocto-queue": "^0.1.0"
2037
+ },
2038
+ "engines": {
2039
+ "node": ">=10"
2040
+ },
2041
+ "funding": {
2042
+ "url": "https://github.com/sponsors/sindresorhus"
2043
+ }
2044
+ },
2045
+ "node_modules/mocha/node_modules/p-locate": {
2046
+ "version": "5.0.0",
2047
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2048
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2049
+ "dev": true,
2050
+ "dependencies": {
2051
+ "p-limit": "^3.0.2"
2052
+ },
2053
+ "engines": {
2054
+ "node": ">=10"
2055
+ },
2056
+ "funding": {
2057
+ "url": "https://github.com/sponsors/sindresorhus"
2058
+ }
2059
+ },
2060
+ "node_modules/mocha/node_modules/strip-json-comments": {
2061
+ "version": "3.1.1",
2062
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2063
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2064
+ "dev": true,
2065
+ "engines": {
2066
+ "node": ">=8"
2067
+ },
2068
+ "funding": {
2069
+ "url": "https://github.com/sponsors/sindresorhus"
2070
+ }
2071
+ },
2072
+ "node_modules/mocha/node_modules/supports-color": {
2073
+ "version": "8.1.1",
2074
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2075
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2076
+ "dev": true,
2077
+ "dependencies": {
2078
+ "has-flag": "^4.0.0"
2079
+ },
2080
+ "engines": {
2081
+ "node": ">=10"
2082
+ },
2083
+ "funding": {
2084
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
2085
+ }
2086
+ },
2087
+ "node_modules/mocha/node_modules/yargs-parser": {
2088
+ "version": "20.2.4",
2089
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
2090
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
2091
+ "dev": true,
2092
+ "engines": {
2093
+ "node": ">=10"
2094
+ }
2095
+ },
2096
"node_modules/ms": {
2097
"version": "2.1.2",
2098
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2099
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2100
},
2101
+ "node_modules/nanoid": {
2102
+ "version": "3.1.25",
2103
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
2104
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
2105
+ "dev": true,
2106
+ "bin": {
2107
+ "nanoid": "bin/nanoid.cjs"
2108
+ },
2109
+ "engines": {
2110
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2111
+ }
2112
+ },
2113
"node_modules/negotiator": {
2114
"version": "0.6.2",
2115
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@@ -1817,6 +2263,15 @@
2263
"node": ">= 0.8"
2264
}
2265
},
2266
+ "node_modules/path-exists": {
2267
+ "version": "4.0.0",
2268
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2269
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2270
+ "dev": true,
2271
+ "engines": {
2272
+ "node": ">=8"
2273
+ }
2274
+ },
2275
"node_modules/path-is-absolute": {
2276
"version": "1.0.1",
2277
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -1911,6 +2366,15 @@
2366
}
2367
]
2368
},
2369
+ "node_modules/randombytes": {
2370
+ "version": "2.1.0",
2371
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
2372
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
2373
+ "dev": true,
2374
+ "dependencies": {
2375
+ "safe-buffer": "^5.1.0"
2376
+ }
2377
+ },
2378
"node_modules/raw-body": {
2379
"version": "2.4.2",
2380
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
@@ -1982,6 +2446,15 @@
2446
"node": ">=8"
2447
}
2448
},
2449
+ "node_modules/require-directory": {
2450
+ "version": "2.1.1",
2451
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2452
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
2453
+ "dev": true,
2454
+ "engines": {
2455
+ "node": ">=0.10.0"
2456
+ }
2457
+ },
2458
"node_modules/resolve-path": {
2459
"version": "1.4.0",
2460
"resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
@@ -2106,6 +2579,15 @@
2579
"semver": "bin/semver.js"
2580
}
2581
},
2582
+ "node_modules/serialize-javascript": {
2583
+ "version": "6.0.0",
2584
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
2585
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
2586
+ "dev": true,
2587
+ "dependencies": {
2588
+ "randombytes": "^2.1.0"
2589
+ }
2590
+ },
2591
"node_modules/setprototypeof": {
2592
"version": "1.2.0",
2593
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -2417,6 +2899,21 @@
2899
"node": ">= 0.8"
2900
}
2901
},
2902
+ "node_modules/which": {
2903
+ "version": "2.0.2",
2904
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2905
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2906
+ "dev": true,
2907
+ "dependencies": {
2908
+ "isexe": "^2.0.0"
2909
+ },
2910
+ "bin": {
2911
+ "node-which": "bin/node-which"
2912
+ },
2913
+ "engines": {
2914
+ "node": ">= 8"
2915
+ }
2916
+ },
2917
"node_modules/widest-line": {
2918
"version": "3.1.0",
2919
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
@@ -2445,6 +2942,12 @@
2942
"node": ">= 0.10.0"
2943
}
2944
},
2945
+ "node_modules/workerpool": {
2946
+ "version": "6.1.5",
2947
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
2948
+ "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
2949
+ "dev": true
2950
+ },
2951
"node_modules/wrap-ansi": {
2952
"version": "7.0.0",
2953
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -2489,12 +2992,63 @@
2992
"node": ">=8"
2993
}
2994
},
2995
+ "node_modules/y18n": {
2996
+ "version": "5.0.8",
2997
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
2998
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
2999
+ "dev": true,
3000
+ "engines": {
3001
+ "node": ">=10"
3002
+ }
3003
+ },
3004
"node_modules/yallist": {
3005
"version": "4.0.0",
3006
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3007
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
3008
"dev": true
3009
},
3010
+ "node_modules/yargs": {
3011
+ "version": "16.2.0",
3012
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
3013
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
3014
+ "dev": true,
3015
+ "dependencies": {
3016
+ "cliui": "^7.0.2",
3017
+ "escalade": "^3.1.1",
3018
+ "get-caller-file": "^2.0.5",
3019
+ "require-directory": "^2.1.1",
3020
+ "string-width": "^4.2.0",
3021
+ "y18n": "^5.0.5",
3022
+ "yargs-parser": "^20.2.2"
3023
+ },
3024
+ "engines": {
3025
+ "node": ">=10"
3026
+ }
3027
+ },
3028
+ "node_modules/yargs-parser": {
3029
+ "version": "20.2.9",
3030
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
3031
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
3032
+ "dev": true,
3033
+ "engines": {
3034
+ "node": ">=10"
3035
+ }
3036
+ },
3037
+ "node_modules/yargs-unparser": {
3038
+ "version": "2.0.0",
3039
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
3040
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
3041
+ "dev": true,
3042
+ "dependencies": {
3043
+ "camelcase": "^6.0.0",
3044
+ "decamelize": "^4.0.0",
3045
+ "flat": "^5.0.2",
3046
+ "is-plain-obj": "^2.1.0"
3047
+ },
3048
+ "engines": {
3049
+ "node": ">=10"
3050
+ }
3051
+ },
3052
"node_modules/ylru": {
3053
"version": "1.2.1",
3054
"resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz",
@@ -2511,6 +3065,18 @@
3065
"engines": {
3066
"node": ">=6"
3067
}
3068
+ },
3069
+ "node_modules/yocto-queue": {
3070
+ "version": "0.1.0",
3071
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
3072
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
3073
+ "dev": true,
3074
+ "engines": {
3075
+ "node": ">=10"
3076
+ },
3077
+ "funding": {
3078
+ "url": "https://github.com/sponsors/sindresorhus"
3079
+ }
3080
}
3081
},
3082
"dependencies": {
@@ -2612,6 +3178,15 @@
3178
"@types/node": "*"
3179
}
3180
},
3181
+ "@types/axios": {
3182
+ "version": "0.14.0",
3183
+ "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz",
3184
+ "integrity": "sha1-7CMA++fX3d1+udOr+HmZlkyvzkY=",
3185
+ "dev": true,
3186
+ "requires": {
3187
+ "axios": "*"
3188
+ }
3189
+ },
3190
"@types/body-parser": {
3191
"version": "1.19.2",
3192
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
@@ -2773,6 +3348,12 @@
3348
"integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==",
3349
"dev": true
3350
},
3351
+ "@types/mocha": {
3352
+ "version": "9.0.0",
3353
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz",
3354
+ "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==",
3355
+ "dev": true
3356
+ },
3357
"@types/node": {
3358
"version": "16.11.12",
3359
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
@@ -2801,6 +3382,12 @@
3382
"@types/node": "*"
3383
}
3384
},
3385
+ "@ungap/promise-all-settled": {
3386
+ "version": "1.1.2",
3387
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
3388
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
3389
+ "dev": true
3390
+ },
3391
"abbrev": {
3392
"version": "1.1.1",
3393
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -2837,6 +3424,12 @@
3424
"string-width": "^4.1.0"
3425
}
3426
},
3427
+ "ansi-colors": {
3428
+ "version": "4.1.1",
3429
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
3430
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
3431
+ "dev": true
3432
+ },
3433
"ansi-regex": {
3434
"version": "5.0.1",
3435
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -2873,6 +3466,15 @@
3466
"resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
3467
"integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
3468
},
3469
+ "axios": {
3470
+ "version": "0.24.0",
3471
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
3472
+ "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
3473
+ "dev": true,
3474
+ "requires": {
3475
+ "follow-redirects": "^1.14.4"
3476
+ }
3477
+ },
3478
"balanced-match": {
3479
"version": "1.0.2",
3480
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -2919,6 +3521,12 @@
3521
"fill-range": "^7.0.1"
3522
}
3523
},
3524
+ "browser-stdout": {
3525
+ "version": "1.3.1",
3526
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
3527
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
3528
+ "dev": true
3529
+ },
3530
"bytes": {
3531
"version": "3.1.1",
3532
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -3035,6 +3643,17 @@
3643
"integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
3644
"dev": true
3645
},
3646
+ "cliui": {
3647
+ "version": "7.0.4",
3648
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
3649
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
3650
+ "dev": true,
3651
+ "requires": {
3652
+ "string-width": "^4.2.0",
3653
+ "strip-ansi": "^6.0.0",
3654
+ "wrap-ansi": "^7.0.0"
3655
+ }
3656
+ },
3657
"clone-response": {
3658
"version": "1.0.2",
3659
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
@@ -3152,6 +3771,12 @@
3771
"ms": "2.1.2"
3772
}
3773
},
3774
+ "decamelize": {
3775
+ "version": "4.0.0",
3776
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
3777
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
3778
+ "dev": true
3779
+ },
3780
"decompress-response": {
3781
"version": "3.3.0",
3782
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
@@ -3244,6 +3869,12 @@
3869
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
3870
"integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM="
3871
},
3872
+ "escalade": {
3873
+ "version": "3.1.1",
3874
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
3875
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
3876
+ "dev": true
3877
+ },
3878
"escape-goat": {
3879
"version": "2.1.1",
3880
"resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
@@ -3288,11 +3919,29 @@
3919
"to-regex-range": "^5.0.1"
3920
}
3921
},
3922
+ "flat": {
3923
+ "version": "5.0.2",
3924
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
3925
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
3926
+ "dev": true
3927
+ },
3928
+ "follow-redirects": {
3929
+ "version": "1.14.6",
3930
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
3931
+ "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==",
3932
+ "dev": true
3933
+ },
3934
"fresh": {
3935
"version": "0.5.2",
3936
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
3937
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
3938
},
3939
+ "fs.realpath": {
3940
+ "version": "1.0.0",
3941
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3942
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
3943
+ "dev": true
3944
+ },
3945
"fsevents": {
3946
"version": "2.3.2",
3947
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -3305,6 +3954,12 @@
3954
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
3955
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
3956
},
3957
+ "get-caller-file": {
3958
+ "version": "2.0.5",
3959
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
3960
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
3961
+ "dev": true
3962
+ },
3963
"get-intrinsic": {
3964
"version": "1.1.1",
3965
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -3366,6 +4021,12 @@
4021
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
4022
"dev": true
4023
},
4024
+ "growl": {
4025
+ "version": "1.10.5",
4026
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
4027
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
4028
+ "dev": true
4029
+ },
4030
"has": {
4031
"version": "1.0.3",
4032
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -3399,6 +4060,12 @@
4060
"integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
4061
"dev": true
4062
},
4063
+ "he": {
4064
+ "version": "1.2.0",
4065
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
4066
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
4067
+ "dev": true
4068
+ },
4069
"http-assert": {
4070
"version": "1.5.0",
4071
"resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
@@ -3464,6 +4131,16 @@
4131
"resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz",
4132
"integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8="
4133
},
4134
+ "inflight": {
4135
+ "version": "1.0.6",
4136
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4137
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4138
+ "dev": true,
4139
+ "requires": {
4140
+ "once": "^1.3.0",
4141
+ "wrappy": "1"
4142
+ }
4143
+ },
4144
"inherits": {
4145
"version": "2.0.4",
4146
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -3553,18 +4230,36 @@
4230
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
4231
"dev": true
4232
},
4233
+ "is-plain-obj": {
4234
+ "version": "2.1.0",
4235
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
4236
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
4237
+ "dev": true
4238
+ },
4239
"is-typedarray": {
4240
"version": "1.0.0",
4241
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
4242
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
4243
"dev": true
4244
},
4245
+ "is-unicode-supported": {
4246
+ "version": "0.1.0",
4247
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
4248
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
4249
+ "dev": true
4250
+ },
4251
"is-yarn-global": {
4252
"version": "0.3.0",
4253
"resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
4254
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
4255
"dev": true
4256
},
4257
+ "isexe": {
4258
+ "version": "2.0.0",
4259
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4260
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
4261
+ "dev": true
4262
+ },
4263
"isstream": {
4264
"version": "0.1.2",
4265
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -3703,6 +4398,16 @@
4398
"package-json": "^6.3.0"
4399
}
4400
},
4401
+ "log-symbols": {
4402
+ "version": "4.1.0",
4403
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
4404
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
4405
+ "dev": true,
4406
+ "requires": {
4407
+ "chalk": "^4.1.0",
4408
+ "is-unicode-supported": "^0.1.0"
4409
+ }
4410
+ },
4411
"lowercase-keys": {
4412
"version": "1.0.1",
4413
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -3799,11 +4504,179 @@
4504
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
4505
"dev": true
4506
},
4507
+ "mocha": {
4508
+ "version": "9.1.3",
4509
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
4510
+ "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
4511
+ "dev": true,
4512
+ "requires": {
4513
+ "@ungap/promise-all-settled": "1.1.2",
4514
+ "ansi-colors": "4.1.1",
4515
+ "browser-stdout": "1.3.1",
4516
+ "chokidar": "3.5.2",
4517
+ "debug": "4.3.2",
4518
+ "diff": "5.0.0",
4519
+ "escape-string-regexp": "4.0.0",
4520
+ "find-up": "5.0.0",
4521
+ "glob": "7.1.7",
4522
+ "growl": "1.10.5",
4523
+ "he": "1.2.0",
4524
+ "js-yaml": "4.1.0",
4525
+ "log-symbols": "4.1.0",
4526
+ "minimatch": "3.0.4",
4527
+ "ms": "2.1.3",
4528
+ "nanoid": "3.1.25",
4529
+ "serialize-javascript": "6.0.0",
4530
+ "strip-json-comments": "3.1.1",
4531
+ "supports-color": "8.1.1",
4532
+ "which": "2.0.2",
4533
+ "workerpool": "6.1.5",
4534
+ "yargs": "16.2.0",
4535
+ "yargs-parser": "20.2.4",
4536
+ "yargs-unparser": "2.0.0"
4537
+ },
4538
+ "dependencies": {
4539
+ "argparse": {
4540
+ "version": "2.0.1",
4541
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
4542
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
4543
+ "dev": true
4544
+ },
4545
+ "debug": {
4546
+ "version": "4.3.2",
4547
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
4548
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
4549
+ "dev": true,
4550
+ "requires": {
4551
+ "ms": "2.1.2"
4552
+ },
4553
+ "dependencies": {
4554
+ "ms": {
4555
+ "version": "2.1.2",
4556
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4557
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
4558
+ "dev": true
4559
+ }
4560
+ }
4561
+ },
4562
+ "diff": {
4563
+ "version": "5.0.0",
4564
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
4565
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
4566
+ "dev": true
4567
+ },
4568
+ "escape-string-regexp": {
4569
+ "version": "4.0.0",
4570
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
4571
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
4572
+ "dev": true
4573
+ },
4574
+ "find-up": {
4575
+ "version": "5.0.0",
4576
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
4577
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
4578
+ "dev": true,
4579
+ "requires": {
4580
+ "locate-path": "^6.0.0",
4581
+ "path-exists": "^4.0.0"
4582
+ }
4583
+ },
4584
+ "glob": {
4585
+ "version": "7.1.7",
4586
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
4587
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
4588
+ "dev": true,
4589
+ "requires": {
4590
+ "fs.realpath": "^1.0.0",
4591
+ "inflight": "^1.0.4",
4592
+ "inherits": "2",
4593
+ "minimatch": "^3.0.4",
4594
+ "once": "^1.3.0",
4595
+ "path-is-absolute": "^1.0.0"
4596
+ }
4597
+ },
4598
+ "has-flag": {
4599
+ "version": "4.0.0",
4600
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4601
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4602
+ "dev": true
4603
+ },
4604
+ "js-yaml": {
4605
+ "version": "4.1.0",
4606
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
4607
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
4608
+ "dev": true,
4609
+ "requires": {
4610
+ "argparse": "^2.0.1"
4611
+ }
4612
+ },
4613
+ "locate-path": {
4614
+ "version": "6.0.0",
4615
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
4616
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
4617
+ "dev": true,
4618
+ "requires": {
4619
+ "p-locate": "^5.0.0"
4620
+ }
4621
+ },
4622
+ "ms": {
4623
+ "version": "2.1.3",
4624
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
4625
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
4626
+ "dev": true
4627
+ },
4628
+ "p-limit": {
4629
+ "version": "3.1.0",
4630
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
4631
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
4632
+ "dev": true,
4633
+ "requires": {
4634
+ "yocto-queue": "^0.1.0"
4635
+ }
4636
+ },
4637
+ "p-locate": {
4638
+ "version": "5.0.0",
4639
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
4640
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
4641
+ "dev": true,
4642
+ "requires": {
4643
+ "p-limit": "^3.0.2"
4644
+ }
4645
+ },
4646
+ "strip-json-comments": {
4647
+ "version": "3.1.1",
4648
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
4649
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
4650
+ "dev": true
4651
+ },
4652
+ "supports-color": {
4653
+ "version": "8.1.1",
4654
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
4655
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
4656
+ "dev": true,
4657
+ "requires": {
4658
+ "has-flag": "^4.0.0"
4659
+ }
4660
+ },
4661
+ "yargs-parser": {
4662
+ "version": "20.2.4",
4663
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
4664
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
4665
+ "dev": true
4666
+ }
4667
+ }
4668
+ },
4669
"ms": {
4670
"version": "2.1.2",
4671
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4672
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4673
},
4674
+ "nanoid": {
4675
+ "version": "3.1.25",
4676
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
4677
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
4678
+ "dev": true
4679
+ },
4680
"negotiator": {
4681
"version": "0.6.2",
4682
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@@ -3917,6 +4790,12 @@
4790
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
4791
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
4792
},
4793
+ "path-exists": {
4794
+ "version": "4.0.0",
4795
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
4796
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
4797
+ "dev": true
4798
+ },
4799
"path-is-absolute": {
4800
"version": "1.0.1",
4801
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -3976,6 +4855,15 @@
4855
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
4856
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
4857
},
4858
+ "randombytes": {
4859
+ "version": "2.1.0",
4860
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
4861
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
4862
+ "dev": true,
4863
+ "requires": {
4864
+ "safe-buffer": "^5.1.0"
4865
+ }
4866
+ },
4867
"raw-body": {
4868
"version": "2.4.2",
4869
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
@@ -4034,6 +4922,12 @@
4922
"rc": "^1.2.8"
4923
}
4924
},
4925
+ "require-directory": {
4926
+ "version": "2.1.1",
4927
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
4928
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
4929
+ "dev": true
4930
+ },
4931
"resolve-path": {
4932
"version": "1.4.0",
4933
"resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
@@ -4126,6 +5020,15 @@
5020
}
5021
}
5022
},
5023
+ "serialize-javascript": {
5024
+ "version": "6.0.0",
5025
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
5026
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
5027
+ "dev": true,
5028
+ "requires": {
5029
+ "randombytes": "^2.1.0"
5030
+ }
5031
+ },
5032
"setprototypeof": {
5033
"version": "1.2.0",
5034
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -4342,6 +5245,15 @@
5245
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
5246
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
5247
},
5248
+ "which": {
5249
+ "version": "2.0.2",
5250
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
5251
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
5252
+ "dev": true,
5253
+ "requires": {
5254
+ "isexe": "^2.0.0"
5255
+ }
5256
+ },
5257
"widest-line": {
5258
"version": "3.1.0",
5259
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
@@ -4364,6 +5276,12 @@
5276
"stack-trace": "0.0.x"
5277
}
5278
},
5279
+ "workerpool": {
5280
+ "version": "6.1.5",
5281
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
5282
+ "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
5283
+ "dev": true
5284
+ },
5285
"wrap-ansi": {
5286
"version": "7.0.0",
5287
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -4399,12 +5317,51 @@
5317
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
5318
"dev": true
5319
},
5320
+ "y18n": {
5321
+ "version": "5.0.8",
5322
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
5323
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
5324
+ "dev": true
5325
+ },
5326
"yallist": {
5327
"version": "4.0.0",
5328
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
5329
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
5330
"dev": true
5331
},
5332
+ "yargs": {
5333
+ "version": "16.2.0",
5334
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
5335
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
5336
+ "dev": true,
5337
+ "requires": {
5338
+ "cliui": "^7.0.2",
5339
+ "escalade": "^3.1.1",
5340
+ "get-caller-file": "^2.0.5",
5341
+ "require-directory": "^2.1.1",
5342
+ "string-width": "^4.2.0",
5343
+ "y18n": "^5.0.5",
5344
+ "yargs-parser": "^20.2.2"
5345
+ }
5346
+ },
5347
+ "yargs-parser": {
5348
+ "version": "20.2.9",
5349
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
5350
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
5351
+ "dev": true
5352
+ },
5353
+ "yargs-unparser": {
5354
+ "version": "2.0.0",
5355
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
5356
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
5357
+ "dev": true,
5358
+ "requires": {
5359
+ "camelcase": "^6.0.0",
5360
+ "decamelize": "^4.0.0",
5361
+ "flat": "^5.0.2",
5362
+ "is-plain-obj": "^2.1.0"
5363
+ }
5364
+ },
5365
"ylru": {
5366
"version": "1.2.1",
5367
"resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz",
@@ -4415,6 +5372,12 @@
5372
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
5373
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
5374
"dev": true
5375
+ },
5376
+ "yocto-queue": {
5377
+ "version": "0.1.0",
5378
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
5379
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
5380
+ "dev": true
5381
}
5382
}
5383
}
package.json
+6
-1
@@ -1,7 +1,8 @@
1
{
2
"scripts": {
3
"watch-server": "nodemon --ignore tests/ --watch src -e ts,tsx --exec ts-node src/index.ts",
4
- "start": "node dist"
4
+ "start": "node dist",
5
+ "test": "mocha -r ts-node/register 'tests/**/*.ts'"
6
},
7
"dependencies": {
8
"@koa/router": "^10.1.1",
@@ -20,7 +21,11 @@
21
"@types/koa-mount": "^4.0.1",
22
"@types/koa-static": "^4.0.2",
23
"@types/mime-types": "^2.1.1",
24
+ "@types/mocha": "^9.0.0",
25
"@types/node": "^16.11.12",
26
+ "@types/axios": "^0.14.0",
27
+ "mocha": "^9.1.3",
28
+ "axios": "^0.24.0",
29
"nodemon": "^2.0.15",
30
"ts-node": "^10.4.0",
31
"typescript": "^4.5.2"
src/apis.ts
+1
-1
@@ -1,7 +1,7 @@
1
import glob from 'fast-glob'
2
3
export default {
4
- async files_list(params:any) {
4
+ async file_list(params:any) {
5
const res = await glob('.' + (params.path || '/') + '*', {
6
stats: true,
7
dot: true,
src/const.ts
new
+8
@@ -0,0 +1,8 @@
1
+export const DEV = process.env.NODE_ENV === 'development' ? 'DEV' : ''
2
+
3
+if (DEV)
4
+ console.clear()
5
+
6
+const SPECIAL_URI = '/~/'
7
+export const FRONTEND_URI = SPECIAL_URI + 'front/'
8
+export const API_URI = SPECIAL_URI + 'api/'
src/frontend.ts
+3
-1
@@ -3,19 +3,21 @@ import Koa from 'koa'
3
import MemoMap from './MemoMap'
4
import mime from 'mime-types'
5
import { readFile } from 'fs'
6
-import { DEV, FRONTEND_URI } from '.'
6
+import { DEV, FRONTEND_URI } from './const'
7
8
const FRONTEND = 'frontend/build/'
9
10
export const serveFrontend = DEV ? serveProxyFrontend() : serveStaticFrontend()
11
12
function serveProxyFrontend() {
13
+ console.debug('fronted: proxied')
14
return proxy('localhost:3000', {
15
userResDecorator: (res, data) => replaceFrontEndRes(data.toString('utf8'))
16
})
17
}
18
19
function serveStaticFrontend() : Koa.Middleware {
20
+ console.debug('fronted: static')
21
const cache = new MemoMap()
22
return async (ctx, next) => {
23
let file = ctx.url
src/index.ts
+6
-19
@@ -4,34 +4,29 @@ import mount from 'koa-mount'
4
import bodyParser from 'koa-bodyparser'
5
import apis from './apis'
6
import { serveFrontend } from './frontend'
7
+import { API_URI, DEV, FRONTEND_URI } from './const'
8
9
const PORT = 80
9
-export const DEV = process.env.NODE_ENV === 'development' ? 'DEV' : ''
10
-const SPECIAL_URI = '/~/'
11
-export const FRONTEND_URI = SPECIAL_URI + 'front/'
12
-const API_URI = SPECIAL_URI + 'api/'
13
-
14
-if (DEV)
15
- console.clear()
10
11
const srv = new Koa()
12
srv.use(async (ctx, next) => {
19
- const r = ctx.request.req
20
- console.debug(r.method, r.url)
13
+ console.debug(ctx.request.method, ctx.url) // log all requests
14
+ // @ts-ignore
15
+ ctx.assert(!ctx.originalUrl.includes('..'), 400, 'cross-dir') // prevent cross-dir
16
await next()
17
})
23
-srv.use(preventCrossDir())
18
19
srv.use(mount(API_URI, new Koa().use(bodyParser()).use(api(apis))))
20
21
const serveFiles = serve('.')
22
+const serveFrontendPrefixed = mount(FRONTEND_URI.slice(0,-1), serveFrontend)
23
24
srv.use(async (ctx, next) => {
25
if (ctx.method === 'GET') {
26
if (ctx.url.endsWith('/'))
27
await serveFrontend(ctx,next)
28
else if (ctx.url.startsWith(FRONTEND_URI))
34
- await mount(FRONTEND_URI, serveFrontend)(ctx,next)
29
+ await serveFrontendPrefixed(ctx,next)
30
else
31
await serveFiles(ctx,next)
32
}
@@ -42,14 +37,6 @@ srv.use(async (ctx, next) => {
37
srv.on('error', err => console.error('server error', err))
38
srv.listen(PORT, ()=> console.log('running on port', PORT, DEV, new Date().toLocaleString()))
39
45
-function preventCrossDir() : Koa.Middleware {
46
- return async (ctx, next) => {
47
- // @ts-ignore
48
- ctx.assert(!ctx.originalUrl.includes('..'), 400, 'cross-dir');
49
- await next()
50
- }
51
-}
52
-
40
type ApiHandler = (params?:any, ctx?:any) => any
41
type ApiHandlers = Record<string, ApiHandler>
42
tests/test.ts
new
+22
@@ -0,0 +1,22 @@
1
+const axios = require('axios')
2
+
3
+describe('file', () => {
4
+ itHttp('md', '/NOTES.md', '##')
5
+ itHttp('frontend', '/', '<body>')
6
+ itHttp('api.list', '/~/api/file_list', data => Array.isArray(data.list))
7
+})
8
+
9
+type Tester = (x:any) => boolean
10
+
11
+function itHttp(name: string, uri: string, test: string | Tester) {
12
+ it(name, () =>
13
+ axios.get(uri).then((res: any) => {
14
+ if (typeof test === 'string') {
15
+ if (!res.data.includes(test))
16
+ throw 'bad content: ' + res.data
17
+ }
18
+ else if (typeof test === 'function')
19
+ if (!test(res.data))
20
+ throw 'test failed: ' + JSON.stringify(res.data)
21
+ }) )
22
+}
\ No newline at end of file