files_list
Massimo Melina committed
Dec 9, 2021 at 19:47 UTC
d85d41be62b3a762444a9eb103a8fe7582553d71
6 files changed
+539
-30
frontend/api.js
+2
-1
@@ -3,7 +3,8 @@ import { useEffect, useState } from "./main.js";
3
export function apiCall(cmd, params) {
4
return fetch('/~/api/'+cmd, {
5
method: 'POST',
6
- body:params && JSON.stringify(params)
6
+ headers: { 'content-type': 'application/json' },
7
+ body: params && JSON.stringify(params),
8
}).then(res => {
9
if (res.ok)
10
return res.json()
frontend/main.js
+5
-2
@@ -23,6 +23,9 @@ function Head() {
23
}
24
25
function FilesList() {
26
- const list = useApi('files_list', { path:'/' })
27
- return h('pre', {}, list ? JSON.stringify(list) : 'list')
26
+ const res = useApi('files_list', { path: location.pathname })
27
+ if (!res)
28
+ return 'loading'
29
+ return h('ul', {}, res.list.map(({ n }) =>
30
+ h('li',{}, h('a',{ href:n }, n)) ))
31
}
\ No newline at end of file
package-lock.json
+501
-19
@@ -5,12 +5,15 @@
5
"packages": {
6
"": {
7
"dependencies": {
8
+ "fast-glob": "^3.2.7",
9
"koa": "^2.13.4",
10
+ "koa-bodyparser": "^4.3.0",
11
"koa-mount": "^4.0.0",
12
"koa-static": "^5.0.0"
13
},
14
"devDependencies": {
15
"@types/koa": "^2.13.4",
16
+ "@types/koa-bodyparser": "^4.3.4",
17
"@types/koa-mount": "^4.0.1",
18
"@types/koa-static": "^4.0.2",
19
"@types/node": "^16.11.12",
@@ -40,6 +43,38 @@
43
"node": ">=12"
44
}
45
},
46
+ "node_modules/@nodelib/fs.scandir": {
47
+ "version": "2.1.5",
48
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
49
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
50
+ "dependencies": {
51
+ "@nodelib/fs.stat": "2.0.5",
52
+ "run-parallel": "^1.1.9"
53
+ },
54
+ "engines": {
55
+ "node": ">= 8"
56
+ }
57
+ },
58
+ "node_modules/@nodelib/fs.stat": {
59
+ "version": "2.0.5",
60
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
61
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
62
+ "engines": {
63
+ "node": ">= 8"
64
+ }
65
+ },
66
+ "node_modules/@nodelib/fs.walk": {
67
+ "version": "1.2.8",
68
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
69
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
70
+ "dependencies": {
71
+ "@nodelib/fs.scandir": "2.1.5",
72
+ "fastq": "^1.6.0"
73
+ },
74
+ "engines": {
75
+ "node": ">= 8"
76
+ }
77
+ },
78
"node_modules/@sindresorhus/is": {
79
"version": "0.14.0",
80
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -188,6 +223,15 @@
223
"@types/node": "*"
224
}
225
},
226
+ "node_modules/@types/koa-bodyparser": {
227
+ "version": "4.3.4",
228
+ "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.4.tgz",
229
+ "integrity": "sha512-eNyHGkIxwJKYaZhyxzAVP3taZVWNgAw+Gzl1Zc9vdkfzoBjypTANLwOAb6tC2hGOXS5uw4O08N6jaL6MdrltqQ==",
230
+ "dev": true,
231
+ "dependencies": {
232
+ "@types/koa": "*"
233
+ }
234
+ },
235
"node_modules/@types/koa-compose": {
236
"version": "3.2.5",
237
"resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz",
@@ -401,7 +445,6 @@
445
"version": "3.0.2",
446
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
447
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
404
- "dev": true,
448
"dependencies": {
449
"fill-range": "^7.0.1"
450
},
@@ -409,6 +452,14 @@
452
"node": ">=8"
453
}
454
},
455
+ "node_modules/bytes": {
456
+ "version": "3.1.1",
457
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
458
+ "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
459
+ "engines": {
460
+ "node": ">= 0.8"
461
+ }
462
+ },
463
"node_modules/cache-content-type": {
464
"version": "1.0.1",
465
"resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
@@ -463,6 +514,18 @@
514
"node": ">=8"
515
}
516
},
517
+ "node_modules/call-bind": {
518
+ "version": "1.0.2",
519
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
520
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
521
+ "dependencies": {
522
+ "function-bind": "^1.1.1",
523
+ "get-intrinsic": "^1.0.2"
524
+ },
525
+ "funding": {
526
+ "url": "https://github.com/sponsors/ljharb"
527
+ }
528
+ },
529
"node_modules/camelcase": {
530
"version": "6.2.1",
531
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
@@ -569,6 +632,17 @@
632
"node": ">= 0.12.0"
633
}
634
},
635
+ "node_modules/co-body": {
636
+ "version": "6.1.0",
637
+ "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
638
+ "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
639
+ "dependencies": {
640
+ "inflation": "^2.0.0",
641
+ "qs": "^6.5.2",
642
+ "raw-body": "^2.3.3",
643
+ "type-is": "^1.6.16"
644
+ }
645
+ },
646
"node_modules/color-convert": {
647
"version": "2.0.1",
648
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -641,6 +715,11 @@
715
"node": ">= 0.8"
716
}
717
},
718
+ "node_modules/copy-to": {
719
+ "version": "2.0.1",
720
+ "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
721
+ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
722
+ },
723
"node_modules/create-require": {
724
"version": "1.1.1",
725
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -791,11 +870,33 @@
870
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
871
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
872
},
873
+ "node_modules/fast-glob": {
874
+ "version": "3.2.7",
875
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
876
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
877
+ "dependencies": {
878
+ "@nodelib/fs.stat": "^2.0.2",
879
+ "@nodelib/fs.walk": "^1.2.3",
880
+ "glob-parent": "^5.1.2",
881
+ "merge2": "^1.3.0",
882
+ "micromatch": "^4.0.4"
883
+ },
884
+ "engines": {
885
+ "node": ">=8"
886
+ }
887
+ },
888
+ "node_modules/fastq": {
889
+ "version": "1.13.0",
890
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
891
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
892
+ "dependencies": {
893
+ "reusify": "^1.0.4"
894
+ }
895
+ },
896
"node_modules/fill-range": {
897
"version": "7.0.1",
898
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
899
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
798
- "dev": true,
900
"dependencies": {
901
"to-regex-range": "^5.0.1"
902
},
@@ -825,6 +926,24 @@
926
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
927
}
928
},
929
+ "node_modules/function-bind": {
930
+ "version": "1.1.1",
931
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
932
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
933
+ },
934
+ "node_modules/get-intrinsic": {
935
+ "version": "1.1.1",
936
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
937
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
938
+ "dependencies": {
939
+ "function-bind": "^1.1.1",
940
+ "has": "^1.0.3",
941
+ "has-symbols": "^1.0.1"
942
+ },
943
+ "funding": {
944
+ "url": "https://github.com/sponsors/ljharb"
945
+ }
946
+ },
947
"node_modules/get-stream": {
948
"version": "4.1.0",
949
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -841,7 +960,6 @@
960
"version": "5.1.2",
961
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
962
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
844
- "dev": true,
963
"dependencies": {
964
"is-glob": "^4.0.1"
965
},
@@ -892,6 +1010,17 @@
1010
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
1011
"dev": true
1012
},
1013
+ "node_modules/has": {
1014
+ "version": "1.0.3",
1015
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1016
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1017
+ "dependencies": {
1018
+ "function-bind": "^1.1.1"
1019
+ },
1020
+ "engines": {
1021
+ "node": ">= 0.4.0"
1022
+ }
1023
+ },
1024
"node_modules/has-flag": {
1025
"version": "3.0.0",
1026
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -976,6 +1105,17 @@
1105
"node": ">= 0.6"
1106
}
1107
},
1108
+ "node_modules/iconv-lite": {
1109
+ "version": "0.4.24",
1110
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1111
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1112
+ "dependencies": {
1113
+ "safer-buffer": ">= 2.1.2 < 3"
1114
+ },
1115
+ "engines": {
1116
+ "node": ">=0.10.0"
1117
+ }
1118
+ },
1119
"node_modules/ignore-by-default": {
1120
"version": "1.0.1",
1121
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -1000,6 +1140,14 @@
1140
"node": ">=0.8.19"
1141
}
1142
},
1143
+ "node_modules/inflation": {
1144
+ "version": "2.0.0",
1145
+ "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz",
1146
+ "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=",
1147
+ "engines": {
1148
+ "node": ">= 0.8.0"
1149
+ }
1150
+ },
1151
"node_modules/inherits": {
1152
"version": "2.0.4",
1153
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -1042,7 +1190,6 @@
1190
"version": "2.1.1",
1191
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1192
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1045
- "dev": true,
1193
"engines": {
1194
"node": ">=0.10.0"
1195
}
@@ -1074,7 +1221,6 @@
1221
"version": "4.0.3",
1222
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1223
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1077
- "dev": true,
1224
"dependencies": {
1225
"is-extglob": "^2.1.1"
1226
},
@@ -1114,7 +1260,6 @@
1260
"version": "7.0.0",
1261
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1262
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1117
- "dev": true,
1263
"engines": {
1264
"node": ">=0.12.0"
1265
}
@@ -1208,6 +1353,18 @@
1353
"node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4"
1354
}
1355
},
1356
+ "node_modules/koa-bodyparser": {
1357
+ "version": "4.3.0",
1358
+ "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz",
1359
+ "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==",
1360
+ "dependencies": {
1361
+ "co-body": "^6.0.0",
1362
+ "copy-to": "^2.0.1"
1363
+ },
1364
+ "engines": {
1365
+ "node": ">=8.0.0"
1366
+ }
1367
+ },
1368
"node_modules/koa-compose": {
1369
"version": "4.1.0",
1370
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
@@ -1341,6 +1498,26 @@
1498
"node": ">= 0.6"
1499
}
1500
},
1501
+ "node_modules/merge2": {
1502
+ "version": "1.4.1",
1503
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1504
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1505
+ "engines": {
1506
+ "node": ">= 8"
1507
+ }
1508
+ },
1509
+ "node_modules/micromatch": {
1510
+ "version": "4.0.4",
1511
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
1512
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
1513
+ "dependencies": {
1514
+ "braces": "^3.0.1",
1515
+ "picomatch": "^2.2.3"
1516
+ },
1517
+ "engines": {
1518
+ "node": ">=8.6"
1519
+ }
1520
+ },
1521
"node_modules/mime-db": {
1522
"version": "1.51.0",
1523
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
@@ -1471,6 +1648,14 @@
1648
"node": ">=8"
1649
}
1650
},
1651
+ "node_modules/object-inspect": {
1652
+ "version": "1.11.1",
1653
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
1654
+ "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==",
1655
+ "funding": {
1656
+ "url": "https://github.com/sponsors/ljharb"
1657
+ }
1658
+ },
1659
"node_modules/on-finished": {
1660
"version": "2.3.0",
1661
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -1549,7 +1734,6 @@
1734
"version": "2.3.0",
1735
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
1736
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
1552
- "dev": true,
1737
"engines": {
1738
"node": ">=8.6"
1739
},
@@ -1594,6 +1778,53 @@
1778
"node": ">=8"
1779
}
1780
},
1781
+ "node_modules/qs": {
1782
+ "version": "6.10.2",
1783
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz",
1784
+ "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==",
1785
+ "dependencies": {
1786
+ "side-channel": "^1.0.4"
1787
+ },
1788
+ "engines": {
1789
+ "node": ">=0.6"
1790
+ },
1791
+ "funding": {
1792
+ "url": "https://github.com/sponsors/ljharb"
1793
+ }
1794
+ },
1795
+ "node_modules/queue-microtask": {
1796
+ "version": "1.2.3",
1797
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1798
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1799
+ "funding": [
1800
+ {
1801
+ "type": "github",
1802
+ "url": "https://github.com/sponsors/feross"
1803
+ },
1804
+ {
1805
+ "type": "patreon",
1806
+ "url": "https://www.patreon.com/feross"
1807
+ },
1808
+ {
1809
+ "type": "consulting",
1810
+ "url": "https://feross.org/support"
1811
+ }
1812
+ ]
1813
+ },
1814
+ "node_modules/raw-body": {
1815
+ "version": "2.4.2",
1816
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
1817
+ "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
1818
+ "dependencies": {
1819
+ "bytes": "3.1.1",
1820
+ "http-errors": "1.8.1",
1821
+ "iconv-lite": "0.4.24",
1822
+ "unpipe": "1.0.0"
1823
+ },
1824
+ "engines": {
1825
+ "node": ">= 0.8"
1826
+ }
1827
+ },
1828
"node_modules/rc": {
1829
"version": "1.2.8",
1830
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -1704,11 +1935,47 @@
1935
"lowercase-keys": "^1.0.0"
1936
}
1937
},
1938
+ "node_modules/reusify": {
1939
+ "version": "1.0.4",
1940
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1941
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1942
+ "engines": {
1943
+ "iojs": ">=1.0.0",
1944
+ "node": ">=0.10.0"
1945
+ }
1946
+ },
1947
+ "node_modules/run-parallel": {
1948
+ "version": "1.2.0",
1949
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1950
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1951
+ "funding": [
1952
+ {
1953
+ "type": "github",
1954
+ "url": "https://github.com/sponsors/feross"
1955
+ },
1956
+ {
1957
+ "type": "patreon",
1958
+ "url": "https://www.patreon.com/feross"
1959
+ },
1960
+ {
1961
+ "type": "consulting",
1962
+ "url": "https://feross.org/support"
1963
+ }
1964
+ ],
1965
+ "dependencies": {
1966
+ "queue-microtask": "^1.2.2"
1967
+ }
1968
+ },
1969
"node_modules/safe-buffer": {
1970
"version": "5.1.2",
1971
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1972
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1973
},
1974
+ "node_modules/safer-buffer": {
1975
+ "version": "2.1.2",
1976
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1977
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1978
+ },
1979
"node_modules/semver": {
1980
"version": "5.7.1",
1981
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -1744,6 +2011,19 @@
2011
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2012
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
2013
},
2014
+ "node_modules/side-channel": {
2015
+ "version": "1.0.4",
2016
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
2017
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
2018
+ "dependencies": {
2019
+ "call-bind": "^1.0.0",
2020
+ "get-intrinsic": "^1.0.2",
2021
+ "object-inspect": "^1.9.0"
2022
+ },
2023
+ "funding": {
2024
+ "url": "https://github.com/sponsors/ljharb"
2025
+ }
2026
+ },
2027
"node_modules/signal-exit": {
2028
"version": "3.0.6",
2029
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
@@ -1818,7 +2098,6 @@
2098
"version": "5.0.1",
2099
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2100
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1821
- "dev": true,
2101
"dependencies": {
2102
"is-number": "^7.0.0"
2103
},
@@ -1959,6 +2238,14 @@
2238
"node": ">=8"
2239
}
2240
},
2241
+ "node_modules/unpipe": {
2242
+ "version": "1.0.0",
2243
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2244
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
2245
+ "engines": {
2246
+ "node": ">= 0.8"
2247
+ }
2248
+ },
2249
"node_modules/update-notifier": {
2250
"version": "5.1.0",
2251
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
@@ -2118,6 +2405,29 @@
2405
"@cspotcode/source-map-consumer": "0.8.0"
2406
}
2407
},
2408
+ "@nodelib/fs.scandir": {
2409
+ "version": "2.1.5",
2410
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
2411
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
2412
+ "requires": {
2413
+ "@nodelib/fs.stat": "2.0.5",
2414
+ "run-parallel": "^1.1.9"
2415
+ }
2416
+ },
2417
+ "@nodelib/fs.stat": {
2418
+ "version": "2.0.5",
2419
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
2420
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
2421
+ },
2422
+ "@nodelib/fs.walk": {
2423
+ "version": "1.2.8",
2424
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
2425
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
2426
+ "requires": {
2427
+ "@nodelib/fs.scandir": "2.1.5",
2428
+ "fastq": "^1.6.0"
2429
+ }
2430
+ },
2431
"@sindresorhus/is": {
2432
"version": "0.14.0",
2433
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -2260,6 +2570,15 @@
2570
"@types/node": "*"
2571
}
2572
},
2573
+ "@types/koa-bodyparser": {
2574
+ "version": "4.3.4",
2575
+ "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.4.tgz",
2576
+ "integrity": "sha512-eNyHGkIxwJKYaZhyxzAVP3taZVWNgAw+Gzl1Zc9vdkfzoBjypTANLwOAb6tC2hGOXS5uw4O08N6jaL6MdrltqQ==",
2577
+ "dev": true,
2578
+ "requires": {
2579
+ "@types/koa": "*"
2580
+ }
2581
+ },
2582
"@types/koa-compose": {
2583
"version": "3.2.5",
2584
"resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz",
@@ -2440,11 +2759,15 @@
2759
"version": "3.0.2",
2760
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
2761
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
2443
- "dev": true,
2762
"requires": {
2763
"fill-range": "^7.0.1"
2764
}
2765
},
2766
+ "bytes": {
2767
+ "version": "3.1.1",
2768
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
2769
+ "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg=="
2770
+ },
2771
"cache-content-type": {
2772
"version": "1.0.1",
2773
"resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
@@ -2486,6 +2809,15 @@
2809
}
2810
}
2811
},
2812
+ "call-bind": {
2813
+ "version": "1.0.2",
2814
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
2815
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
2816
+ "requires": {
2817
+ "function-bind": "^1.1.1",
2818
+ "get-intrinsic": "^1.0.2"
2819
+ }
2820
+ },
2821
"camelcase": {
2822
"version": "6.2.1",
2823
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
@@ -2561,6 +2893,17 @@
2893
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
2894
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
2895
},
2896
+ "co-body": {
2897
+ "version": "6.1.0",
2898
+ "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
2899
+ "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
2900
+ "requires": {
2901
+ "inflation": "^2.0.0",
2902
+ "qs": "^6.5.2",
2903
+ "raw-body": "^2.3.3",
2904
+ "type-is": "^1.6.16"
2905
+ }
2906
+ },
2907
"color-convert": {
2908
"version": "2.0.1",
2909
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -2618,6 +2961,11 @@
2961
"keygrip": "~1.1.0"
2962
}
2963
},
2964
+ "copy-to": {
2965
+ "version": "2.0.1",
2966
+ "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
2967
+ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
2968
+ },
2969
"create-require": {
2970
"version": "1.1.1",
2971
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -2736,11 +3084,30 @@
3084
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
3085
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
3086
},
3087
+ "fast-glob": {
3088
+ "version": "3.2.7",
3089
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
3090
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
3091
+ "requires": {
3092
+ "@nodelib/fs.stat": "^2.0.2",
3093
+ "@nodelib/fs.walk": "^1.2.3",
3094
+ "glob-parent": "^5.1.2",
3095
+ "merge2": "^1.3.0",
3096
+ "micromatch": "^4.0.4"
3097
+ }
3098
+ },
3099
+ "fastq": {
3100
+ "version": "1.13.0",
3101
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
3102
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
3103
+ "requires": {
3104
+ "reusify": "^1.0.4"
3105
+ }
3106
+ },
3107
"fill-range": {
3108
"version": "7.0.1",
3109
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
3110
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
2743
- "dev": true,
3111
"requires": {
3112
"to-regex-range": "^5.0.1"
3113
}
@@ -2757,6 +3124,21 @@
3124
"dev": true,
3125
"optional": true
3126
},
3127
+ "function-bind": {
3128
+ "version": "1.1.1",
3129
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
3130
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
3131
+ },
3132
+ "get-intrinsic": {
3133
+ "version": "1.1.1",
3134
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
3135
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
3136
+ "requires": {
3137
+ "function-bind": "^1.1.1",
3138
+ "has": "^1.0.3",
3139
+ "has-symbols": "^1.0.1"
3140
+ }
3141
+ },
3142
"get-stream": {
3143
"version": "4.1.0",
3144
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -2770,7 +3152,6 @@
3152
"version": "5.1.2",
3153
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
3154
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2773
- "dev": true,
3155
"requires": {
3156
"is-glob": "^4.0.1"
3157
}
@@ -2809,6 +3190,14 @@
3190
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
3191
"dev": true
3192
},
3193
+ "has": {
3194
+ "version": "1.0.3",
3195
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
3196
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
3197
+ "requires": {
3198
+ "function-bind": "^1.1.1"
3199
+ }
3200
+ },
3201
"has-flag": {
3202
"version": "3.0.0",
3203
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -2868,6 +3257,14 @@
3257
}
3258
}
3259
},
3260
+ "iconv-lite": {
3261
+ "version": "0.4.24",
3262
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
3263
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
3264
+ "requires": {
3265
+ "safer-buffer": ">= 2.1.2 < 3"
3266
+ }
3267
+ },
3268
"ignore-by-default": {
3269
"version": "1.0.1",
3270
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -2886,6 +3283,11 @@
3283
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
3284
"dev": true
3285
},
3286
+ "inflation": {
3287
+ "version": "2.0.0",
3288
+ "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz",
3289
+ "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8="
3290
+ },
3291
"inherits": {
3292
"version": "2.0.4",
3293
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -2918,8 +3320,7 @@
3320
"is-extglob": {
3321
"version": "2.1.1",
3322
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2921
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
2922
- "dev": true
3323
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
3324
},
3325
"is-fullwidth-code-point": {
3326
"version": "3.0.0",
@@ -2939,7 +3340,6 @@
3340
"version": "4.0.3",
3341
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
3342
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2942
- "dev": true,
3343
"requires": {
3344
"is-extglob": "^2.1.1"
3345
}
@@ -2963,8 +3363,7 @@
3363
"is-number": {
3364
"version": "7.0.0",
3365
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2966
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2967
- "dev": true
3366
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
3367
},
3368
"is-obj": {
3369
"version": "2.0.0",
@@ -3043,6 +3442,15 @@
3442
"vary": "^1.1.2"
3443
}
3444
},
3445
+ "koa-bodyparser": {
3446
+ "version": "4.3.0",
3447
+ "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz",
3448
+ "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==",
3449
+ "requires": {
3450
+ "co-body": "^6.0.0",
3451
+ "copy-to": "^2.0.1"
3452
+ }
3453
+ },
3454
"koa-compose": {
3455
"version": "4.1.0",
3456
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
@@ -3147,6 +3555,20 @@
3555
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
3556
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
3557
},
3558
+ "merge2": {
3559
+ "version": "1.4.1",
3560
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
3561
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
3562
+ },
3563
+ "micromatch": {
3564
+ "version": "4.0.4",
3565
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
3566
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
3567
+ "requires": {
3568
+ "braces": "^3.0.1",
3569
+ "picomatch": "^2.2.3"
3570
+ }
3571
+ },
3572
"mime-db": {
3573
"version": "1.51.0",
3574
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
@@ -3241,6 +3663,11 @@
3663
"integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
3664
"dev": true
3665
},
3666
+ "object-inspect": {
3667
+ "version": "1.11.1",
3668
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
3669
+ "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA=="
3670
+ },
3671
"on-finished": {
3672
"version": "2.3.0",
3673
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -3302,8 +3729,7 @@
3729
"picomatch": {
3730
"version": "2.3.0",
3731
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
3305
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
3306
- "dev": true
3732
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
3733
},
3734
"prepend-http": {
3735
"version": "2.0.0",
@@ -3336,6 +3762,30 @@
3762
"escape-goat": "^2.0.0"
3763
}
3764
},
3765
+ "qs": {
3766
+ "version": "6.10.2",
3767
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz",
3768
+ "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==",
3769
+ "requires": {
3770
+ "side-channel": "^1.0.4"
3771
+ }
3772
+ },
3773
+ "queue-microtask": {
3774
+ "version": "1.2.3",
3775
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
3776
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
3777
+ },
3778
+ "raw-body": {
3779
+ "version": "2.4.2",
3780
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
3781
+ "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
3782
+ "requires": {
3783
+ "bytes": "3.1.1",
3784
+ "http-errors": "1.8.1",
3785
+ "iconv-lite": "0.4.24",
3786
+ "unpipe": "1.0.0"
3787
+ }
3788
+ },
3789
"rc": {
3790
"version": "1.2.8",
3791
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -3429,11 +3879,29 @@
3879
"lowercase-keys": "^1.0.0"
3880
}
3881
},
3882
+ "reusify": {
3883
+ "version": "1.0.4",
3884
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
3885
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
3886
+ },
3887
+ "run-parallel": {
3888
+ "version": "1.2.0",
3889
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
3890
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
3891
+ "requires": {
3892
+ "queue-microtask": "^1.2.2"
3893
+ }
3894
+ },
3895
"safe-buffer": {
3896
"version": "5.1.2",
3897
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
3898
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
3899
},
3900
+ "safer-buffer": {
3901
+ "version": "2.1.2",
3902
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
3903
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
3904
+ },
3905
"semver": {
3906
"version": "5.7.1",
3907
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -3462,6 +3930,16 @@
3930
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
3931
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
3932
},
3933
+ "side-channel": {
3934
+ "version": "1.0.4",
3935
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
3936
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
3937
+ "requires": {
3938
+ "call-bind": "^1.0.0",
3939
+ "get-intrinsic": "^1.0.2",
3940
+ "object-inspect": "^1.9.0"
3941
+ }
3942
+ },
3943
"signal-exit": {
3944
"version": "3.0.6",
3945
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
@@ -3518,7 +3996,6 @@
3996
"version": "5.0.1",
3997
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3998
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3521
- "dev": true,
3999
"requires": {
4000
"is-number": "^7.0.0"
4001
}
@@ -3607,6 +4084,11 @@
4084
"crypto-random-string": "^2.0.0"
4085
}
4086
},
4087
+ "unpipe": {
4088
+ "version": "1.0.0",
4089
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
4090
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
4091
+ },
4092
"update-notifier": {
4093
"version": "5.1.0",
4094
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
package.json
+3
@@ -4,12 +4,15 @@
4
"start": "node dist"
5
},
6
"dependencies": {
7
+ "fast-glob": "^3.2.7",
8
"koa": "^2.13.4",
9
+ "koa-bodyparser": "^4.3.0",
10
"koa-mount": "^4.0.0",
11
"koa-static": "^5.0.0"
12
},
13
"devDependencies": {
14
"@types/koa": "^2.13.4",
15
+ "@types/koa-bodyparser": "^4.3.4",
16
"@types/koa-mount": "^4.0.1",
17
"@types/koa-static": "^4.0.2",
18
"@types/node": "^16.11.12",
src/apis.ts
+21
-4
@@ -1,7 +1,24 @@
1
+import glob from 'fast-glob'
2
+
3
export default {
2
- files_list(){
3
- return {
4
- list: ['a','b']
5
- }
4
+ async files_list(params:any) {
5
+ const res = await glob('.' + (params.path || '/') + '*', {
6
+ stats: true,
7
+ dot: true,
8
+ markDirectories: true,
9
+ onlyFiles: false,
10
+ })
11
+ const list = res.map(x => {
12
+ const o = x.stats
13
+ const folder = x.path.endsWith('/')
14
+ return {
15
+ n: x.name,
16
+ c: o?.ctime,
17
+ m: o?.mtime,
18
+ s: folder ? undefined : o?.size,
19
+ d: folder || undefined,
20
+ }
21
+ })
22
+ return { list }
23
}
24
}
\ No newline at end of file
src/index.ts
+7
-4
@@ -2,11 +2,13 @@ import Koa from 'koa'
2
import serve from 'koa-static'
3
import send from 'koa-send'
4
import mount from 'koa-mount'
5
+import bodyParser from 'koa-bodyparser'
6
import apis from './apis'
7
8
const srv = new Koa()
9
srv.use(preventCrossDir())
10
srv.use(serveRoot())
11
+srv.use(bodyParser())
12
srv.use(mount('/~/api/', api(apis)))
13
srv.use(mount('/~/', serve('frontend')))
14
@@ -23,22 +25,23 @@ function preventCrossDir() : Koa.Middleware {
25
26
function serveRoot() : Koa.Middleware {
27
return async (ctx, next) => {
26
- if (ctx.method === 'GET' && ctx.path === '/')
28
+ if (ctx.method === 'GET' && ctx.path.endsWith('/'))
29
await send(ctx, 'frontend/index.html')
30
await next()
31
}
32
}
33
32
-type ApiHandler = (ctx:any) => any
34
+type ApiHandler = (params?:any, ctx?:any) => any
35
type ApiHandlers = Record<string, ApiHandler>
36
37
function api(apis: ApiHandlers) : Koa.Middleware {
38
return async (ctx, next) => {
37
- console.log('API',ctx.method, ctx.path)
39
+ const params = ctx.request.body
40
+ console.log('API', ctx.method, ctx.path, params)
41
// @ts-ignore
42
ctx.assert(ctx.path in apis, 404, 'invalid api')
43
const cb = (apis as any)[ctx.path]
41
- const res = await cb(ctx)
44
+ const res = await cb(params, ctx)
45
if (res)
46
ctx.body = res
47
await next()