From 6a4dcae8d31fa5a37d69e4ff5badc36809ad75ed Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Sun, 1 Jun 2025 16:29:37 +0200 Subject: [PATCH] Take advantage of full middleware order control in order to be able to resolve priority conflicts with parametrized urls and custom urls --- package-lock.json | 624 +++++++++++++++++++++++---- package.json | 14 +- src/back/index.ts | 26 +- src/back/routes/index.ts | 24 +- src/back/test_utils/with-prod-app.ts | 26 +- 5 files changed, 612 insertions(+), 102 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54e882a..3e07500 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,9 @@ "@sealcode/add-to-head": "^1.0.0", "@sealcode/crud-ui": "^0.0.17", "@sealcode/file-manager": "^1.0.2", - "@sealcode/jdd": "^0.7.6", - "@sealcode/jdd-editor": "^0.1.22", - "@sealcode/sealgen": "^0.17.29", + "@sealcode/jdd": "^0.7.7", + "@sealcode/jdd-editor": "^0.1.23", + "@sealcode/sealgen": "^0.17.31", "@sealcode/simplemde": "^1.12.1", "@sealcode/ts-predicates": "^0.6.2", "@types/kill-port": "^2.0.0", @@ -30,14 +30,17 @@ "escape-goat": "^4.0.0", "get-port": "^7.0.0", "js-convert-case": "^4.2.0", + "koa-mount": "^4.2.0", + "koa-qs": "^3.0.0", "koa-responsive-image-router": "^0.2.37", + "koa-static": "^5.0.0", "locreq": "^3.0.0", "meilisearch": "^0.41.0", "multiple-scripts-tmux": "^1.0.4", "nodemon": "^3.0.1", "object-path": "^0.11.8", "qs": "^6.12.0", - "sealious": "^0.19.41", + "sealious": "^0.20.0", "slug": "^9.1.0", "stimulus": "^3.2.2", "tempstream": "^0.4.6", @@ -49,6 +52,9 @@ "@sealcode/ansi-html-stream": "^1.0.1", "@types/hotwired__turbo": "^8.0.2", "@types/koa__router": "^12.0.4", + "@types/koa-mount": "^4.0.5", + "@types/koa-qs": "^2.0.3", + "@types/koa-static": "^4.0.4", "@types/node": "^20.8.4", "@types/object-path": "^0.11.4", "@types/slug": "^5.0.9", @@ -497,12 +503,133 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@esbuild/linux-x64": { + "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], - "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], "optional": true, "os": [ "linux" @@ -511,6 +638,216 @@ "node": ">=12" } }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -936,9 +1273,9 @@ } }, "node_modules/@sealcode/jdd": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@sealcode/jdd/-/jdd-0.7.6.tgz", - "integrity": "sha512-YGXAbf+evGjjG7CG6g1wwUZrBUmece1x6oaVBWFISfsNLkVFC5WXXaBWUZftKF9gHoneBL/YZQdZHWnFmtsxTA==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@sealcode/jdd/-/jdd-0.7.7.tgz", + "integrity": "sha512-L99aj9q6V1sRqFmMmtwKuzS6wNId22mKxJQc0pQH1StumYVpDfiSmtknPD6ZNLRWMGtmN7PYqal3cqBk+X4vTQ==", "dependencies": { "@sealcode/file-manager": "^1.0.2", "@sealcode/ts-predicates": "^0.5.3", @@ -955,23 +1292,23 @@ "uuid": "^9.0.1" }, "peerDependencies": { - "sealious": "^0.19.36" + "sealious": "^0.20" } }, "node_modules/@sealcode/jdd-editor": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@sealcode/jdd-editor/-/jdd-editor-0.1.22.tgz", - "integrity": "sha512-/30o7C6v/P7M8KUCEBPuCN73Q+W1kXT5h4NtR/f8bTieGDTB0yjbG3zFdE/UeSrAznJdr4CXG3uePOm+NIOK4A==", + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@sealcode/jdd-editor/-/jdd-editor-0.1.23.tgz", + "integrity": "sha512-PUogLAYskZ4LtbOwixP/KyexTUoWT8Z/Ht4r+k1spa6+4t+z0MK15AD6Oj3Gs8vfr20/YHZjMHiG+5NHvsDdDg==", "dependencies": { "@koa/router": "^13.1.0", - "@sealcode/jdd": "^0.7.6", + "@sealcode/jdd": "^0.7.7", "@sealcode/sealcodemirror": "^5.70.0-beta5", - "@sealcode/sealgen": "^0.17.4", + "@sealcode/sealgen": "^0.17.31", "@types/object-path": "^0.11.4", "@types/throttle-debounce": "^5.0.2", "@types/turndown": "^5.0.5", "object-path": "^0.11.8", - "sealious": "^0.19.36", + "sealious": "^0.20.0", "stimulus": "^3.2.2", "tempstream": "^0.4.6", "throttle-debounce": "^5.0.2", @@ -1015,9 +1352,9 @@ "integrity": "sha512-pDsGlk2KokQkwzsJDBUWJFDRpEoxxth6TMQGDJyCTmWnd1Vn+cQb5moXDKaf7cXnWb9Y6QtdNX/fPzM/3RH2Cg==" }, "node_modules/@sealcode/sealgen": { - "version": "0.17.29", - "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.17.29.tgz", - "integrity": "sha512-fE2gXogW5Rz/yRWNZHNk41z9tA6JKlHYvQxxB1oqAsvowWAUT/V8ip4MVfjhwgW1LbiAg9X5Mav0BoSAxNol+g==", + "version": "0.17.31", + "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.17.31.tgz", + "integrity": "sha512-QvlwmLlbGVJBE10Oa4sfJ1/3X2IBilK43qOZBD8Q3ZDkaiuGPtYgYghTFtKYg8BqjvuVgfkhPmL+CYZ5NmkmOg==", "dependencies": { "@koa/router": "^12.0.1", "@sealcode/file-manager": "^1.0.2", @@ -1051,12 +1388,13 @@ "peerDependencies": { "koa": "^2.13.0", "koa-responsive-image-router": "^0.2.24", - "sealious": "^0.19.8" + "sealious": "^0.20" } }, "node_modules/@sealcode/sealgen/node_modules/@sealcode/ts-predicates": { "version": "0.4.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/@sealcode/ts-predicates/-/ts-predicates-0.4.3.tgz", + "integrity": "sha512-UNSEacu7Ye8q0N8AJCJy37oJvv3w2OXKGkUnP7xO5lOY9DQviDPRDQhVaZdJ3/xMzXLm4UE3389ihctrPaov/A==" }, "node_modules/@sealcode/sealgen/node_modules/prettier": { "version": "2.8.8", @@ -1182,10 +1520,6 @@ "@types/node": "*" } }, - "node_modules/@types/bluebird": { - "version": "3.5.42", - "license": "MIT" - }, "node_modules/@types/body-parser": { "version": "1.19.5", "license": "MIT", @@ -1374,14 +1708,16 @@ }, "node_modules/@types/koa-mount": { "version": "4.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/koa-mount/-/koa-mount-4.0.5.tgz", + "integrity": "sha512-pV1njJ7r94iqAFzT9D5sGSYKUHFGudCLAnmr4WFli7V5tJf5MAgRQK9leTPJ4gjvgr+hnTf86fZsKoFN358c7w==", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/koa-qs": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/koa-qs/-/koa-qs-2.0.3.tgz", + "integrity": "sha512-HS4oAQaUKUZJPHggg3DeHiuUwSSotieNRuS2ZlUZO14216Fhf7QDNx8mjR/ZwXaSBr/R46KFtE0OAvsF3yP44A==", "dependencies": { "@types/koa": "*" } @@ -1395,7 +1731,8 @@ }, "node_modules/@types/koa-static": { "version": "4.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.4.tgz", + "integrity": "sha512-j1AUzzl7eJYEk9g01hNTlhmipFh8RFbOQmaMNLvLcNNAkPw0bdTs3XTa3V045XFlrWN0QYnblbDJv2RzawTn6A==", "dependencies": { "@types/koa": "*", "@types/koa-send": "*" @@ -2426,10 +2763,6 @@ "node": ">= 6" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT" - }, "node_modules/boolbase": { "version": "1.0.0", "license": "ISC" @@ -2899,7 +3232,8 @@ }, "node_modules/charenc": { "version": "0.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "engines": { "node": "*" } @@ -3382,7 +3716,8 @@ }, "node_modules/crypt": { "version": "0.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "engines": { "node": "*" } @@ -3876,8 +4211,9 @@ } }, "node_modules/destr": { - "version": "2.0.3", - "license": "MIT" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==" }, "node_modules/destroy": { "version": "1.2.0", @@ -4398,8 +4734,9 @@ }, "node_modules/esbuild": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5913,7 +6250,8 @@ }, "node_modules/globalyzer": { "version": "0.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" }, "node_modules/globby": { "version": "11.1.0", @@ -5943,7 +6281,8 @@ }, "node_modules/globrex": { "version": "0.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, "node_modules/glogg": { "version": "1.0.2", @@ -5957,13 +6296,14 @@ } }, "node_modules/google-fonts-helper": { - "version": "3.5.0", - "license": "MIT", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/google-fonts-helper/-/google-fonts-helper-3.7.3.tgz", + "integrity": "sha512-dENZeK6RMvkCOFoKbLbS+pyoDgpmk4U6BYmfXnztMar2d8SjEG6valxql/Lkyi7bu5F+3FTdE+gAEYSYZ5zzMA==", "dependencies": { "deepmerge": "^4.3.1", "hookable": "^5.5.3", - "ofetch": "^1.3.3", - "ufo": "^1.4.0" + "ofetch": "^1.4.1", + "ufo": "^1.5.4" } }, "node_modules/gopd": { @@ -6363,7 +6703,8 @@ }, "node_modules/hookable": { "version": "5.5.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" }, "node_modules/html-entities": { "version": "2.5.2", @@ -6712,7 +7053,8 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-bzip2": { "version": "1.0.0", @@ -7092,7 +7434,8 @@ }, "node_modules/is-what": { "version": "4.1.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", "engines": { "node": ">=12.13" }, @@ -7464,7 +7807,8 @@ }, "node_modules/kleur": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "engines": { "node": ">=6" } @@ -7533,8 +7877,9 @@ } }, "node_modules/koa-mount": { - "version": "4.0.0", - "license": "MIT", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/koa-mount/-/koa-mount-4.2.0.tgz", + "integrity": "sha512-2iHQc7vbA9qLeVq5gKAYh3m5DOMMlMfIKjW/REPAS18Mf63daCJHHVXY9nbu7ivrnYn5PiPC4CE523Tf5qvjeQ==", "dependencies": { "debug": "^4.0.1", "koa-compose": "^4.1.0" @@ -7545,7 +7890,8 @@ }, "node_modules/koa-qs": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/koa-qs/-/koa-qs-3.0.0.tgz", + "integrity": "sha512-05IB5KirwMs3heWW26iTz46HuMAtrlrRMus/aNH1BRDocLyF/099EtCB0MIfQpRuT0TISvaTsWwSy2gctIWiGA==", "dependencies": { "merge-descriptors": "^1.0.1", "qs": "^6.9.4" @@ -7728,7 +8074,8 @@ }, "node_modules/koa-static": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dependencies": { "debug": "^3.1.0", "koa-send": "^5.0.0" @@ -8146,7 +8493,8 @@ }, "node_modules/md5": { "version": "2.3.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -8214,7 +8562,8 @@ }, "node_modules/merge": { "version": "2.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" }, "node_modules/merge-descriptors": { "version": "1.0.3", @@ -9449,8 +9798,9 @@ } }, "node_modules/node-fetch-native": { - "version": "1.6.4", - "license": "MIT" + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==" }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", @@ -9691,12 +10041,13 @@ } }, "node_modules/ofetch": { - "version": "1.3.4", - "license": "MIT", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", "dependencies": { "destr": "^2.0.3", - "node-fetch-native": "^1.6.3", - "ufo": "^1.5.3" + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" } }, "node_modules/on-finished": { @@ -10094,6 +10445,87 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, + "node_modules/pg": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz", + "integrity": "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==", + "dependencies": { + "pg-connection-string": "^2.9.0", + "pg-pool": "^3.10.0", + "pg-protocol": "^1.10.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.5" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.5.tgz", + "integrity": "sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.0.tgz", + "integrity": "sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.0.tgz", + "integrity": "sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.0.tgz", + "integrity": "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/pick-port": { "version": "2.1.0", "license": "MIT", @@ -10221,6 +10653,41 @@ "version": "0.2.1", "license": "ISC" }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prebuild-install": { "version": "7.1.2", "license": "MIT", @@ -10357,7 +10824,8 @@ }, "node_modules/prompts": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -10562,7 +11030,8 @@ }, "node_modules/recursive-readdir": { "version": "2.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { "minimatch": "^3.0.5" }, @@ -11019,14 +11488,13 @@ } }, "node_modules/sealious": { - "version": "0.19.41", - "resolved": "https://registry.npmjs.org/sealious/-/sealious-0.19.41.tgz", - "integrity": "sha512-D2KhetKsOiXJB90Rr5ayVB6H/2dBFTfQRIwJ79qOLUzLRLkR7NDpzGz+RIKUJMsaNA+MfIIBMPM8h6Uuf3x2Uw==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/sealious/-/sealious-0.20.0.tgz", + "integrity": "sha512-uoVXfjFvsLcKwjTbADkxgwIUJ6MV9LXOABrwCQkarVwHTMks2cwtWSQF0eDZ+VZdfy+rr5WroepUpUe+b3wt6A==", "dependencies": { "@koa/router": "^12.0.1", "@sealcode/file-manager": "^1.0.1", "@sealcode/ts-predicates": "^0.4.3", - "@types/bluebird": "^3.5.30", "@types/boom": "^7.3.0", "@types/clone": "^0.1.30", "@types/color": "^3.0.1", @@ -11044,7 +11512,6 @@ "@types/object-hash": "^1.3.3", "@types/sanitize-html": "^2.11.0", "@types/uuid": "^8.3.0", - "bluebird": "^3.4.6", "boom": "^7.3.0", "chalk": "^4.1.0", "clone": "^1.0.2", @@ -11070,6 +11537,7 @@ "nanoid": "^5.0.9", "nodemailer": "^6.4.6", "object-hash": "^2.0.3", + "pg": "^8.13.1", "pretty-ms": "^7.0.0", "qs": "^6.12.0", "sanitize-html": "^1.13.0", @@ -11450,7 +11918,8 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/slash": { "version": "3.0.0", @@ -11586,6 +12055,14 @@ "memory-pager": "^1.0.2" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -12580,7 +13057,8 @@ }, "node_modules/tiny-glob": { "version": "0.2.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" @@ -13049,8 +13527,9 @@ "license": "BSD-3-Clause" }, "node_modules/ufo": { - "version": "1.5.3", - "license": "MIT" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==" }, "node_modules/uglify-js": { "version": "3.17.4", @@ -13653,8 +14132,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.16.0", - "license": "MIT", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index 9b7b2fa..cf5a89e 100644 --- a/package.json +++ b/package.json @@ -76,9 +76,9 @@ "@sealcode/add-to-head": "^1.0.0", "@sealcode/crud-ui": "^0.0.17", "@sealcode/file-manager": "^1.0.2", - "@sealcode/jdd": "^0.7.6", - "@sealcode/jdd-editor": "^0.1.22", - "@sealcode/sealgen": "^0.17.29", + "@sealcode/jdd": "^0.7.7", + "@sealcode/jdd-editor": "^0.1.23", + "@sealcode/sealgen": "^0.17.31", "@sealcode/simplemde": "^1.12.1", "@sealcode/ts-predicates": "^0.6.2", "@types/kill-port": "^2.0.0", @@ -91,14 +91,17 @@ "escape-goat": "^4.0.0", "get-port": "^7.0.0", "js-convert-case": "^4.2.0", + "koa-mount": "^4.2.0", + "koa-qs": "^3.0.0", "koa-responsive-image-router": "^0.2.37", + "koa-static": "^5.0.0", "locreq": "^3.0.0", "meilisearch": "^0.41.0", "multiple-scripts-tmux": "^1.0.4", "nodemon": "^3.0.1", "object-path": "^0.11.8", "qs": "^6.12.0", - "sealious": "^0.19.41", + "sealious": "^0.20.0", "slug": "^9.1.0", "stimulus": "^3.2.2", "tempstream": "^0.4.6", @@ -110,6 +113,9 @@ "@sealcode/ansi-html-stream": "^1.0.1", "@types/hotwired__turbo": "^8.0.2", "@types/koa__router": "^12.0.4", + "@types/koa-mount": "^4.0.5", + "@types/koa-qs": "^2.0.3", + "@types/koa-static": "^4.0.4", "@types/node": "^20.8.4", "@types/object-path": "^0.11.4", "@types/slug": "^5.0.9", diff --git a/src/back/index.ts b/src/back/index.ts index 02071d4..66e2f3f 100644 --- a/src/back/index.ts +++ b/src/back/index.ts @@ -1,12 +1,15 @@ +import Router from "@koa/router"; import kill from "kill-port"; -import _locreq from "locreq"; +import { Middlewares } from "sealious"; + +import { default as Koa } from "koa"; +import installQS from "koa-qs"; + import TheApp from "./app.js"; import { PORT, SEALIOUS_SANITY } from "./config.js"; import { mainRouter } from "./routes/index.js"; import { waitForMeilisearch } from "./services/meilisearch.js"; -const locreq = _locreq(new URL("./", import.meta.url).pathname); - export const the_app = new TheApp(); void (async function () { @@ -26,13 +29,22 @@ void (async function () { } try { - the_app.HTTPServer.addStaticRoute("/", locreq.resolve("public")); + const koa_app = new Koa(); + const router = new Router(); + installQS(koa_app); + koa_app.use(Middlewares.handleError()); + koa_app.context.$app = the_app; + the_app.on("started", () => { + mainRouter(the_app, koa_app, router); + }); await the_app.start(); - mainRouter(the_app, the_app.HTTPServer.router); - // eslint-disable-next-line no-console - console.log("Population finished"); + koa_app.listen(PORT); + the_app.Logger.info( + "STARTED", + `App running. URL set in manifest: ${the_app.manifest.base_url}` + ); if (SEALIOUS_SANITY) { console.error("Exiting with error code 0"); diff --git a/src/back/routes/index.ts b/src/back/routes/index.ts index c74c216..1135d9e 100644 --- a/src/back/routes/index.ts +++ b/src/back/routes/index.ts @@ -1,11 +1,16 @@ import type Router from "@koa/router"; -import { imageRouter, RESPONSIVE_IMAGES_URL_PATH } from "../image-router.js"; -import mountAutoRoutes from "./routes.js"; -import { customUrlView } from "./middlewares/customUrlView.js"; -import type TheApp from "../app.js"; +import type { default as Koa } from "koa"; +import mount from "koa-mount"; +import Static from "koa-static"; import { Middlewares } from "sealious"; +import type TheApp from "../app.js"; +import { imageRouter, RESPONSIVE_IMAGES_URL_PATH } from "../image-router.js"; +import { customUrlView } from "./middlewares/customUrlView.js"; +import mountAutoRoutes from "./routes.js"; +import _locreq from "locreq"; +const locreq = _locreq(new URL("./", import.meta.url).pathname); -export const mainRouter = (app: TheApp, router: Router): void => { +export const mainRouter = (app: TheApp, koa_app: Koa, router: Router): void => { const started_at = Date.now(); // necessary to detect aplication restarts router.get("(.*)", async (ctx, next) => { @@ -25,6 +30,12 @@ export const mainRouter = (app: TheApp, router: Router): void => { await next(); }); + koa_app.use(mount("/", Static(locreq.resolve("public")))); + koa_app.use(Middlewares.extractContext()); + koa_app.use(customUrlView(app)); + app.initRouter(router); + koa_app.use(router.routes()); + router.use(Middlewares.extractContext()); router.get("/status.json", Middlewares.extractContext(), async (ctx) => { ctx.body = { status: ctx.$app.status, started_at }; @@ -32,8 +43,5 @@ export const mainRouter = (app: TheApp, router: Router): void => { router.use(RESPONSIVE_IMAGES_URL_PATH, imageRouter.getRoutes()); - app.HTTPServer.koa.use(Middlewares.extractContext()); - app.HTTPServer.koa.use(customUrlView(app)); - mountAutoRoutes(router); }; diff --git a/src/back/test_utils/with-prod-app.ts b/src/back/test_utils/with-prod-app.ts index 30d986a..637ff94 100644 --- a/src/back/test_utils/with-prod-app.ts +++ b/src/back/test_utils/with-prod-app.ts @@ -1,17 +1,15 @@ -import _locreq from "locreq"; -import { v4 as uuid } from "uuid"; - -const locreq = _locreq(import.meta.dirname); -import { SMTPMailer } from "sealious"; -import { TestUtils } from "sealious"; -import TheApp from "../app.js"; -import { mainRouter } from "../routes/index.js"; import getPort from "get-port"; +import { default as Koa } from "koa"; +import { SMTPMailer, TestUtils, Middlewares } from "sealious"; +import { v4 as uuid } from "uuid"; +import TheApp from "../app.js"; import { MAILCATCHER_API_PORT, MAILCATCHER_HOST, MAILCATCHER_SMTP_PORT, } from "../config.js"; +import { mainRouter } from "../routes/index.js"; +import Router from "@koa/router"; const port_numbers = async function* () { yield await getPort(); @@ -44,9 +42,14 @@ export async function withProdApp( password: "any", }); - mainRouter(app, app.HTTPServer.router); - - app.HTTPServer.addStaticRoute("/", locreq.resolve("public")); + const koa_app = new Koa(); + const router = new Router(); + koa_app.use(Middlewares.handleError()); + koa_app.context.$app = app; + const server = koa_app.listen(port); + app.on("started", () => { + mainRouter(app, koa_app, router); + }); await app.start(); const base_url = `http://127.0.0.1:${port}`; @@ -59,6 +62,7 @@ export async function withProdApp( async function stop() { await app.removeAllData(); await app.stop(); + server.close(); } try {