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()