diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3756a9d..dec128a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: pull_request: jobs: - test: + check: runs-on: ubuntu-latest steps: @@ -20,5 +20,11 @@ jobs: - name: Install dependencies run: npm ci + - name: Run lint + run: npm run lint -- --deny-warnings + + - name: Run format + run: npm run format -- --check + - name: Run tests run: npm test diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..e72acc7 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,14 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "printWidth": 100, + "singleQuote": true, + "tabWidth": 2, + "semi": false, + "trailingComma": "all", + "experimentalSortImports": { + "partitionByComment": false, + "sortSideEffects": false, + "order": "asc", + "ignoreCase": true + } +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..bf6a36c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,15 @@ +## Before commit + +Run linter + +```shell +npm run lint +``` + +run formatter + +```shell +npm run format +``` + + diff --git a/README.md b/README.md index 7ec74fc..ec2d75c 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,5 @@ npm run build node dist/bin/start.js ``` + +Please see [CONTRIBUTING](CONTRIBUTING.md) diff --git a/package-lock.json b/package-lock.json index 8d0180c..35ae625 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,8 @@ "arrayify-stream": "^3.0.0", "fetch-sparql-endpoint": "^6.2.0", "memory-level": "^3.1.0", + "oxfmt": "^0.13.0", + "oxlint": "^1.28.0", "rdf-data-factory": "^2.0.2", "typescript": "^5.9.3", "vitest": "^4.0.8" @@ -11799,6 +11801,230 @@ "dev": true, "license": "MIT" }, + "node_modules/@oxfmt/darwin-arm64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/darwin-arm64/-/darwin-arm64-0.13.0.tgz", + "integrity": "sha512-WJKGJp9t8lMG3Vmsyz77qj4GIp2Z/z5KkS4Mpbn7nfiVZLVNdxf9k85vHnuGtBZcuxIAjJIRDgitePFPD+timA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxfmt/darwin-x64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/darwin-x64/-/darwin-x64-0.13.0.tgz", + "integrity": "sha512-b9r+uOrnsFIl8DEimw5G69/aXbY5XURzFz0j6Hr8GiAZIrp2GlMLz0B8zhylAXh882GalZGxtcVbLZt5SSe2jw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxfmt/linux-arm64-gnu": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-arm64-gnu/-/linux-arm64-gnu-0.13.0.tgz", + "integrity": "sha512-v9+rE/d38wBRli0iYvhgGWlgSAgFBJnnK6kefwQ6POu6n6y/tGiQXjWIyvkBqpQhxxavGnk3z3WXP+DAJSC2eA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/linux-arm64-musl": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-arm64-musl/-/linux-arm64-musl-0.13.0.tgz", + "integrity": "sha512-g9A8dOoM/XwToz70aq8XodQZMWwWWPjuTUCI9cxkB1uvpQe4JN6VcHRLMY6Ft1LLh4MIARqq3mCbuXwMVseKiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/linux-x64-gnu": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-x64-gnu/-/linux-x64-gnu-0.13.0.tgz", + "integrity": "sha512-CbMEtJ+0mVWnBHOF+Fx8CYApAs3Iywmo6E+buokXEli98167R2eJ/g7dqNiU6R8hBiO0n4KyoT4KaeYhmQp7KA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/linux-x64-musl": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-x64-musl/-/linux-x64-musl-0.13.0.tgz", + "integrity": "sha512-KqE6qmwLqxbC2I1t65JNqbu87qL4my3Bi1nsmwXzJBW/xFAVNS4OgZnKQwOpW9dDXw8Ng/IoBO24GgOOECkd/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/win32-arm64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/win32-arm64/-/win32-arm64-0.13.0.tgz", + "integrity": "sha512-jVvlnkgdKHT/l13zIG9511KoVwCKGAvQ4CUtiwiP4Nv4K1F586dV4IcOawcRnKpw9KHTV/Q0E8jB5m3tnz2yeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxfmt/win32-x64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@oxfmt/win32-x64/-/win32-x64-0.13.0.tgz", + "integrity": "sha512-HgC7Efv1Eqv8Ag/3LP2WjSvzIFHsxBLBaYOgMhvq4WhZMM3xG9zsb/1A3/pVqdPhvw+Kh62WaYm1WQM9J4l0lQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/darwin-arm64": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.28.0.tgz", + "integrity": "sha512-H7J41/iKbgm7tTpdSnA/AtjEAhxyzNzCMKWtKU5wDuP2v39jrc3fasQEJruk6hj1YXPbJY4N+1nK/jE27GMGDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/darwin-x64": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.28.0.tgz", + "integrity": "sha512-bGsSDEwpyYzNc6FIwhTmbhSK7piREUjMlmWBt7eoR3ract0+RfhZYYG4se1Ngs+4WOFC0B3gbv23fyF+cnbGGQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/linux-arm64-gnu": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.28.0.tgz", + "integrity": "sha512-eNH/evMpV3xAA4jIS8dMLcGkM/LK0WEHM0RO9bxrHPAwfS72jhyPJtd0R7nZhvhG6U1bhn5jhoXbk1dn27XIAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-arm64-musl": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.28.0.tgz", + "integrity": "sha512-ickvpcekNeRLND3llndiZOtJBb6LDZqNnZICIDkovURkOIWPGJGmAxsHUOI6yW6iny9gLmIEIGl/c1b5nFk6Ag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-gnu": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.28.0.tgz", + "integrity": "sha512-DkgAh4LQ8NR3DwTT7/LGMhaMau0RtZkih91Ez5Usk7H7SOxo1GDi84beE7it2Q+22cAzgY4hbw3c6svonQTjxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-musl": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.28.0.tgz", + "integrity": "sha512-VBnMi3AJ2w5p/kgeyrjcGOKNY8RzZWWvlGHjCJwzqPgob4MXu6T+5Yrdi7EVJyIlouL8E3LYPYjmzB9NBi9gZw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/win32-arm64": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.28.0.tgz", + "integrity": "sha512-tomhIks+4dKs8axB+s4GXHy+ZWXhUgptf1XnG5cZg8CzRfX4JFX9k8l2fPUgFwytWnyyvZaaXLRPWGzoZ6yoHQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/win32-x64": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.28.0.tgz", + "integrity": "sha512-4+VO5P/UJ2nq9sj6kQToJxFy5cKs7dGIN2DiUSQ7cqyUi7EKYNQKe+98HFcDOjtm33jQOQnc4kw8Igya5KPozg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rdfjs/types": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", @@ -11809,9 +12035,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.1.tgz", - "integrity": "sha512-bxZtughE4VNVJlL1RdoSE545kc4JxL7op57KKoi59/gwuU5rV6jLWFXXc8jwgFoT6vtj+ZjO+Z2C5nrY0Cl6wA==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", + "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", "cpu": [ "arm" ], @@ -11823,9 +12049,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.1.tgz", - "integrity": "sha512-44a1hreb02cAAfAKmZfXVercPFaDjqXCK+iKeVOlJ9ltvnO6QqsBHgKVPTu+MJHSLLeMEUbeG2qiDYgbFPU48g==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", + "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", "cpu": [ "arm64" ], @@ -11837,9 +12063,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.1.tgz", - "integrity": "sha512-usmzIgD0rf1syoOZ2WZvy8YpXK5G1V3btm3QZddoGSa6mOgfXWkkv+642bfUUldomgrbiLQGrPryb7DXLovPWQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", + "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", "cpu": [ "arm64" ], @@ -11851,9 +12077,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.1.tgz", - "integrity": "sha512-is3r/k4vig2Gt8mKtTlzzyaSQ+hd87kDxiN3uDSDwggJLUV56Umli6OoL+/YZa/KvtdrdyNfMKHzL/P4siOOmg==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", + "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", "cpu": [ "x64" ], @@ -11865,9 +12091,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.1.tgz", - "integrity": "sha512-QJ1ksgp/bDJkZB4daldVmHaEQkG4r8PUXitCOC2WRmRaSaHx5RwPoI3DHVfXKwDkB+Sk6auFI/+JHacTekPRSw==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", + "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", "cpu": [ "arm64" ], @@ -11879,9 +12105,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.1.tgz", - "integrity": "sha512-J6ma5xgAzvqsnU6a0+jgGX/gvoGokqpkx6zY4cWizRrm0ffhHDpJKQgC8dtDb3+MqfZDIqs64REbfHDMzxLMqQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", + "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", "cpu": [ "x64" ], @@ -11893,9 +12119,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.1.tgz", - "integrity": "sha512-JzWRR41o2U3/KMNKRuZNsDUAcAVUYhsPuMlx5RUldw0E4lvSIXFUwejtYz1HJXohUmqs/M6BBJAUBzKXZVddbg==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", + "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", "cpu": [ "arm" ], @@ -11907,9 +12133,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.1.tgz", - "integrity": "sha512-L8kRIrnfMrEoHLHtHn+4uYA52fiLDEDyezgxZtGUTiII/yb04Krq+vk3P2Try+Vya9LeCE9ZHU8CXD6J9EhzHQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", + "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", "cpu": [ "arm" ], @@ -11921,9 +12147,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.1.tgz", - "integrity": "sha512-ysAc0MFRV+WtQ8li8hi3EoFi7us6d1UzaS/+Dp7FYZfg3NdDljGMoVyiIp6Ucz7uhlYDBZ/zt6XI0YEZbUO11Q==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", + "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", "cpu": [ "arm64" ], @@ -11935,9 +12161,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.1.tgz", - "integrity": "sha512-UV6l9MJpDbDZZ/fJvqNcvO1PcivGEf1AvKuTcHoLjVZVFeAMygnamCTDikCVMRnA+qJe+B3pSbgX2+lBMqgBhA==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", + "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", "cpu": [ "arm64" ], @@ -11949,9 +12175,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.1.tgz", - "integrity": "sha512-UDUtelEprkA85g95Q+nj3Xf0M4hHa4DiJ+3P3h4BuGliY4NReYYqwlc0Y8ICLjN4+uIgCEvaygYlpf0hUj90Yg==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", + "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", "cpu": [ "loong64" ], @@ -11963,9 +12189,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.1.tgz", - "integrity": "sha512-vrRn+BYhEtNOte/zbc2wAUQReJXxEx2URfTol6OEfY2zFEUK92pkFBSXRylDM7aHi+YqEPJt9/ABYzmcrS4SgQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", + "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", "cpu": [ "ppc64" ], @@ -11977,9 +12203,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.1.tgz", - "integrity": "sha512-gto/1CxHyi4A7YqZZNznQYrVlPSaodOBPKM+6xcDSCMVZN/Fzb4K+AIkNz/1yAYz9h3Ng+e2fY9H6bgawVq17w==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", + "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", "cpu": [ "riscv64" ], @@ -11991,9 +12217,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.1.tgz", - "integrity": "sha512-KZ6Vx7jAw3aLNjFR8eYVcQVdFa/cvBzDNRFM3z7XhNNunWjA03eUrEwJYPk0G8V7Gs08IThFKcAPS4WY/ybIrQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", + "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", "cpu": [ "riscv64" ], @@ -12005,9 +12231,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.1.tgz", - "integrity": "sha512-HvEixy2s/rWNgpwyKpXJcHmE7om1M89hxBTBi9Fs6zVuLU4gOrEMQNbNsN/tBVIMbLyysz/iwNiGtMOpLAOlvA==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", + "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", "cpu": [ "s390x" ], @@ -12019,9 +12245,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.1.tgz", - "integrity": "sha512-E/n8x2MSjAQgjj9IixO4UeEUeqXLtiA7pyoXCFYLuXpBA/t2hnbIdxHfA7kK9BFsYAoNU4st1rHYdldl8dTqGA==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", + "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", "cpu": [ "x64" ], @@ -12033,9 +12259,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.1.tgz", - "integrity": "sha512-IhJ087PbLOQXCN6Ui/3FUkI9pWNZe/Z7rEIVOzMsOs1/HSAECCvSZ7PkIbkNqL/AZn6WbZvnoVZw/qwqYMo4/w==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", + "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", "cpu": [ "x64" ], @@ -12047,9 +12273,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.1.tgz", - "integrity": "sha512-0++oPNgLJHBblreu0SFM7b3mAsBJBTY0Ksrmu9N6ZVrPiTkRgda52mWR7TKhHAsUb9noCjFvAw9l6ZO1yzaVbA==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", + "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", "cpu": [ "arm64" ], @@ -12061,9 +12287,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.1.tgz", - "integrity": "sha512-VJXivz61c5uVdbmitLkDlbcTk9Or43YC2QVLRkqp86QoeFSqI81bNgjhttqhKNMKnQMWnecOCm7lZz4s+WLGpQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", + "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", "cpu": [ "arm64" ], @@ -12075,9 +12301,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.1.tgz", - "integrity": "sha512-NmZPVTUOitCXUH6erJDzTQ/jotYw4CnkMDjCYRxNHVD9bNyfrGoIse684F9okwzKCV4AIHRbUkeTBc9F2OOH5Q==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", + "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", "cpu": [ "ia32" ], @@ -12089,9 +12315,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.1.tgz", - "integrity": "sha512-2SNj7COIdAf6yliSpLdLG8BEsp5lgzRehgfkP0Av8zKfQFKku6JcvbobvHASPJu4f3BFxej5g+HuQPvqPhHvpQ==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", + "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", "cpu": [ "x64" ], @@ -12103,9 +12329,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.1.tgz", - "integrity": "sha512-rLarc1Ofcs3DHtgSzFO31pZsCh8g05R2azN1q3fF+H423Co87My0R+tazOEvYVKXSLh8C4LerMK41/K7wlklcg==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", + "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", "cpu": [ "x64" ], @@ -12585,9 +12811,9 @@ "license": "Apache-2.0" }, "node_modules/chai": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", - "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", "dev": true, "license": "MIT", "engines": { @@ -13691,6 +13917,67 @@ "fn.name": "1.x.x" } }, + "node_modules/oxfmt": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.13.0.tgz", + "integrity": "sha512-WhWYL1nRxevnezPK3GsGlZ2uPnO+rPlJ1U44TEfET+UwDPhKDVFyqlblduAgu3PFwTMgY/GRbaZwlWugvpfbWQ==", + "dev": true, + "license": "MIT", + "bin": { + "oxfmt": "bin/oxfmt" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxfmt/darwin-arm64": "0.13.0", + "@oxfmt/darwin-x64": "0.13.0", + "@oxfmt/linux-arm64-gnu": "0.13.0", + "@oxfmt/linux-arm64-musl": "0.13.0", + "@oxfmt/linux-x64-gnu": "0.13.0", + "@oxfmt/linux-x64-musl": "0.13.0", + "@oxfmt/win32-arm64": "0.13.0", + "@oxfmt/win32-x64": "0.13.0" + } + }, + "node_modules/oxlint": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.28.0.tgz", + "integrity": "sha512-gE97d0BcIlTTSJrim395B49mIbQ9VO8ZVoHdWai7Svl+lEeUAyCLTN4d7piw1kcB8VfgTp1JFVlAvMPD9GewMA==", + "dev": true, + "license": "MIT", + "bin": { + "oxc_language_server": "bin/oxc_language_server", + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/darwin-arm64": "1.28.0", + "@oxlint/darwin-x64": "1.28.0", + "@oxlint/linux-arm64-gnu": "1.28.0", + "@oxlint/linux-arm64-musl": "1.28.0", + "@oxlint/linux-x64-gnu": "1.28.0", + "@oxlint/linux-x64-musl": "1.28.0", + "@oxlint/win32-arm64": "1.28.0", + "@oxlint/win32-x64": "1.28.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.4.0" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + } + } + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -14418,9 +14705,9 @@ } }, "node_modules/rollup": { - "version": "4.53.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.1.tgz", - "integrity": "sha512-n2I0V0lN3E9cxxMqBCT3opWOiQBzRN7UG60z/WDKqdX2zHUS/39lezBcsckZFsV6fUTSnfqI7kHf60jDAPGKug==", + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", + "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", "dev": true, "license": "MIT", "dependencies": { @@ -14434,28 +14721,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.1", - "@rollup/rollup-android-arm64": "4.53.1", - "@rollup/rollup-darwin-arm64": "4.53.1", - "@rollup/rollup-darwin-x64": "4.53.1", - "@rollup/rollup-freebsd-arm64": "4.53.1", - "@rollup/rollup-freebsd-x64": "4.53.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.1", - "@rollup/rollup-linux-arm-musleabihf": "4.53.1", - "@rollup/rollup-linux-arm64-gnu": "4.53.1", - "@rollup/rollup-linux-arm64-musl": "4.53.1", - "@rollup/rollup-linux-loong64-gnu": "4.53.1", - "@rollup/rollup-linux-ppc64-gnu": "4.53.1", - "@rollup/rollup-linux-riscv64-gnu": "4.53.1", - "@rollup/rollup-linux-riscv64-musl": "4.53.1", - "@rollup/rollup-linux-s390x-gnu": "4.53.1", - "@rollup/rollup-linux-x64-gnu": "4.53.1", - "@rollup/rollup-linux-x64-musl": "4.53.1", - "@rollup/rollup-openharmony-arm64": "4.53.1", - "@rollup/rollup-win32-arm64-msvc": "4.53.1", - "@rollup/rollup-win32-ia32-msvc": "4.53.1", - "@rollup/rollup-win32-x64-gnu": "4.53.1", - "@rollup/rollup-win32-x64-msvc": "4.53.1", + "@rollup/rollup-android-arm-eabi": "4.53.2", + "@rollup/rollup-android-arm64": "4.53.2", + "@rollup/rollup-darwin-arm64": "4.53.2", + "@rollup/rollup-darwin-x64": "4.53.2", + "@rollup/rollup-freebsd-arm64": "4.53.2", + "@rollup/rollup-freebsd-x64": "4.53.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", + "@rollup/rollup-linux-arm-musleabihf": "4.53.2", + "@rollup/rollup-linux-arm64-gnu": "4.53.2", + "@rollup/rollup-linux-arm64-musl": "4.53.2", + "@rollup/rollup-linux-loong64-gnu": "4.53.2", + "@rollup/rollup-linux-ppc64-gnu": "4.53.2", + "@rollup/rollup-linux-riscv64-gnu": "4.53.2", + "@rollup/rollup-linux-riscv64-musl": "4.53.2", + "@rollup/rollup-linux-s390x-gnu": "4.53.2", + "@rollup/rollup-linux-x64-gnu": "4.53.2", + "@rollup/rollup-linux-x64-musl": "4.53.2", + "@rollup/rollup-openharmony-arm64": "4.53.2", + "@rollup/rollup-win32-arm64-msvc": "4.53.2", + "@rollup/rollup-win32-ia32-msvc": "4.53.2", + "@rollup/rollup-win32-x64-gnu": "4.53.2", + "@rollup/rollup-win32-x64-msvc": "4.53.2", "fsevents": "~2.3.2" } }, diff --git a/package.json b/package.json index 1050c60..dcdee58 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,8 @@ "arrayify-stream": "^3.0.0", "fetch-sparql-endpoint": "^6.2.0", "memory-level": "^3.1.0", + "oxfmt": "^0.13.0", + "oxlint": "^1.28.0", "rdf-data-factory": "^2.0.2", "typescript": "^5.9.3", "vitest": "^4.0.8" @@ -21,6 +23,8 @@ }, "scripts": { "build": "tsc", - "test": "vitest" + "test": "vitest", + "lint": "oxlint", + "format": "oxfmt" } } diff --git a/src/bin/start.ts b/src/bin/start.ts index 7e8c4f4..5b48ba1 100644 --- a/src/bin/start.ts +++ b/src/bin/start.ts @@ -1,33 +1,32 @@ +import { MemoryLevel } from 'memory-level' +import { Quadstore } from 'quadstore' +import { DataFactory } from 'rdf-data-factory' -import { QuadstoreHttpServer } from "../lib/index.js"; -import { DataFactory } from 'rdf-data-factory'; -import { MemoryLevel } from 'memory-level'; -import { Quadstore } from "quadstore"; +import { QuadstoreHttpServer } from '../lib/index.js' -(async () => { - - const data_factory = new DataFactory(); - const { namedNode, literal, defaultGraph, quad } = data_factory; +;(async () => { + const data_factory = new DataFactory() + const { namedNode, literal, defaultGraph, quad } = data_factory const quads = [ quad(namedNode('ex://s0'), namedNode('ex://p0'), namedNode('ex://o0'), defaultGraph()), quad(namedNode('ex://s1'), namedNode('ex://p1'), literal('literal'), defaultGraph()), quad(namedNode('ex://s2'), namedNode('ex://p2'), namedNode('ex://o2'), defaultGraph()), - ]; + ] const store = new Quadstore({ backend: new MemoryLevel(), dataFactory: data_factory, - }); + }) - await store.open(); + await store.open() - await store.multiPut(quads); + await store.multiPut(quads) - const server = new QuadstoreHttpServer(store, { + new QuadstoreHttpServer(store, { port: 8080, hostname: '127.0.0.1', - }); + }) console.log(` @@ -35,6 +34,5 @@ import { Quadstore } from "quadstore"; curl "http://127.0.0.1:8080/sparql?query=${encodeURIComponent('SELECT * WHERE { ?s ?p ?o }')}" - `); - -})().catch(console.error); + `) +})().catch(console.error) diff --git a/src/lib/controllers/sparql.ts b/src/lib/controllers/sparql.ts index 541fadd..2f1b8cc 100644 --- a/src/lib/controllers/sparql.ts +++ b/src/lib/controllers/sparql.ts @@ -1,11 +1,10 @@ +import { Context, Hono } from 'hono' +import { accepts } from 'hono/accepts' +import { stream } from 'hono/streaming' +import { Readable } from 'node:stream' +import { Quadstore } from 'quadstore' -import { Readable } from "node:stream"; -import { Context, Hono } from "hono"; -import { stream } from "hono/streaming"; -import { accepts } from "hono/accepts"; -import { Quadstore } from "quadstore"; -import { QueryEngine } from '@comunica/query-sparql-rdfjs'; - +import { QueryEngine } from '@comunica/query-sparql-rdfjs' const negotiateBindingsFormat = (ctx: Context): string => { const result = accepts(ctx, { @@ -16,81 +15,71 @@ const negotiateBindingsFormat = (ctx: Context): string => { 'application/sparql-results+json', ], default: 'application/sparql-results+json', - }); - return result; -}; + }) + return result +} const negotiateQuadsFormat = (ctx: Context): string => { const result = accepts(ctx, { header: 'Accept', - supports: [ - 'application/trig', - 'application/n-quads', - ], + supports: ['application/trig', 'application/n-quads'], default: 'application/n-quads', - }); - return result; -}; + }) + return result +} export const initSparqlController = (app: Hono, store: Quadstore) => { - - const engine = new QueryEngine(); + const engine = new QueryEngine() app.all('/sparql', async (ctx) => { - - let query: any; + let query: any if (ctx.req.method === 'POST') { switch (ctx.req.header('content-type')) { case 'application/sparql-query': case 'application/sparql-update': - query = await ctx.req.text(); - break; + query = await ctx.req.text() + break case 'application/x-www-form-urlencoded': - query = (await ctx.req.parseBody()).query; - break; + query = (await ctx.req.parseBody()).query + break default: - return ctx.json({ error: 'unsupported content-type' }, 400); + return ctx.json({ error: 'unsupported content-type' }, 400) } } else if (ctx.req.method === 'GET') { - query = ctx.req.query('query'); + query = ctx.req.query('query') } else { - return ctx.json({ error: 'unsupported HTTP method' }); + return ctx.json({ error: 'unsupported HTTP method' }) } if (typeof query !== 'string') { - - return ctx.json({ error: 'invalid query' }, 400); + return ctx.json({ error: 'invalid query' }, 400) } const query_result = await engine.query(query, { sources: [store], destination: store, - }); + }) if (query_result.resultType === 'void') { if (ctx.req.method === 'GET') { - return ctx.json({ error: 'unsupported method for update query' }, 405); + return ctx.json({ error: 'unsupported method for update query' }, 405) } - await query_result.execute(); - return ctx.body(null, 204); + await query_result.execute() + return ctx.body(null, 204) } - const result_format = query_result.resultType === 'quads' - ? negotiateQuadsFormat(ctx) - : negotiateBindingsFormat(ctx); + const result_format = + query_result.resultType === 'quads' ? negotiateQuadsFormat(ctx) : negotiateBindingsFormat(ctx) - ctx.header('content-type', result_format); + ctx.header('content-type', result_format) - const string_result = await engine.resultToString(query_result, result_format); + const string_result = await engine.resultToString(query_result, result_format) - ctx.status(200); + ctx.status(200) return stream(ctx, async (stream) => { - await stream.pipe(Readable.toWeb(string_result.data as Readable) as ReadableStream); - }); - - }); - - -}; + await stream.pipe(Readable.toWeb(string_result.data as Readable) as ReadableStream) + }) + }) +} diff --git a/src/lib/debug.ts b/src/lib/debug.ts index 26a45c0..a66ff38 100644 --- a/src/lib/debug.ts +++ b/src/lib/debug.ts @@ -1,4 +1,3 @@ +import Debug from 'debug' -import Debug from 'debug'; - -export const server = Debug('quadstore:http:server'); +export const server = Debug('quadstore:http:server') diff --git a/src/lib/index.ts b/src/lib/index.ts index a7a44d7..1a09f5e 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,104 +1,102 @@ +import { Hono } from 'hono' +import EventEmitter from 'node:events' +import { AddressInfo } from 'node:net' +import { Quadstore } from 'quadstore' -import { Hono } from "hono"; -import { serve, ServerType } from "@hono/node-server"; -import { ServerOptions } from "@hono/node-server/dist/types"; -import { Quadstore } from "quadstore"; -import { server as debug } from "./debug.js"; -import EventEmitter from "node:events"; -import { initSparqlController } from "./controllers/sparql.js"; -import { AddressInfo } from "node:net"; +import { serve, ServerType } from '@hono/node-server' +import { ServerOptions } from '@hono/node-server/dist/types' + +import { initSparqlController } from './controllers/sparql.js' +import { server as debug } from './debug.js' export type Opts = ServerOptions & { - baseUrl?: URL; - maxLimit?: number; - perPageCount?: number; - hostname?: string; - port?: number; -}; + baseUrl?: URL + maxLimit?: number + perPageCount?: number + hostname?: string + port?: number +} export interface Events { - listening: []; - error: [Error]; - close: []; + listening: [] + error: [Error] + close: [] } export class QuadstoreHono extends Hono { constructor(store: Quadstore) { super() - initSparqlController(this, store); + initSparqlController(this, store) } } export class QuadstoreHttpServer extends EventEmitter { - - #app: Hono; - #server: ServerType; - #quadstore: Quadstore; + #app: Hono + #server: ServerType constructor(store: Quadstore, opts: Opts = {}) { - super(); - this.#app = new QuadstoreHono(store); + super() + this.#app = new QuadstoreHono(store) this.#server = serve({ ...opts, hostname: opts.hostname ?? '127.0.0.1', port: opts.port ?? 8080, fetch: this.#app.fetch, - }); - this.#server.on('close', this.#onClose); - this.#server.on('error', this.#onError); - this.#server.on('listening', this.#onListen); - - this.#quadstore = store; + }) + this.#server.on('close', this.#onClose) + this.#server.on('error', this.#onError) + this.#server.on('listening', this.#onListen) this.#app.use(async (ctx, next) => { - const now = Date.now(); - const signature = `[${ctx.req.method}] ${ctx.req.url}`; - debug(`${signature}`); - await next(); - const then = Date.now(); - debug(`${signature} - ${ctx.res.status} (${then - now}ms)`); - }); + const now = Date.now() + const signature = `[${ctx.req.method}] ${ctx.req.url}` + debug(`${signature}`) + await next() + const then = Date.now() + debug(`${signature} - ${ctx.res.status} (${then - now}ms)`) + }) } #onListen = () => { - const { address, port } = this.#server.address() as AddressInfo; - debug('listening on %s:%s', address, port); - this.emit('listening'); - }; + const { address, port } = this.#server.address() as AddressInfo + debug('listening on %s:%s', address, port) + this.emit('listening') + } #onError = (err: Error) => { - this.emit('error', err); - }; + this.emit('error', err) + } #onClose = () => { - this.emit('close'); + this.emit('close') } async listen(): Promise { return new Promise((resolve, reject) => { const onError = (err: Error) => { - cleanup(); - reject(err); - }; + cleanup() + reject(err) + } const onListen = () => { - cleanup(); - resolve(); - }; + cleanup() + resolve() + } const cleanup = () => { - this.#server.removeListener('error', onError); - this.#server.removeListener('listening', onListen); - }; - this.#server.on('error', onError); - this.#server.on('listening', onListen); - this.#server.listen(); - }); + this.#server.removeListener('error', onError) + this.#server.removeListener('listening', onListen) + } + this.#server.on('error', onError) + this.#server.on('listening', onListen) + this.#server.listen() + }) } async close(): Promise { return new Promise((resolve, reject) => { this.#server.close((err) => { - err ? reject(err) : resolve(); - }); - }); + if (err) reject(err) + else resolve() + }) + }) } } diff --git a/tests/integration/sparql.test.ts b/tests/integration/sparql.test.ts index 3d4b797..2b482a0 100644 --- a/tests/integration/sparql.test.ts +++ b/tests/integration/sparql.test.ts @@ -1,9 +1,10 @@ -import { describe, test, expect, beforeEach, beforeAll } from 'vitest' -import { SparqlEndpointFetcher } from 'fetch-sparql-endpoint' -import { DataFactory } from 'rdf-data-factory'; -import { MemoryLevel } from 'memory-level'; -import { Quadstore } from 'quadstore'; import { arrayifyStream } from 'arrayify-stream' +import { SparqlEndpointFetcher } from 'fetch-sparql-endpoint' +import { MemoryLevel } from 'memory-level' +import { Quadstore } from 'quadstore' +import { DataFactory } from 'rdf-data-factory' +import { describe, test, expect, beforeEach, beforeAll } from 'vitest' + import { QuadstoreHono } from '../../src/lib/' async function selectSPO(fetcher: SparqlEndpointFetcher) { @@ -16,17 +17,17 @@ describe('SPARQL', () => { let fetcher: SparqlEndpointFetcher const data_factory = new DataFactory() - const { namedNode, literal, defaultGraph, quad } = data_factory; + const { namedNode, literal, defaultGraph, quad } = data_factory const store = new Quadstore({ backend: new MemoryLevel(), dataFactory: data_factory, - }); + }) const app = new QuadstoreHono(store) beforeAll(async () => { - await store.open(); + await store.open() fetcher = new SparqlEndpointFetcher({ fetch: app.request as typeof fetch }) }) @@ -39,8 +40,8 @@ describe('SPARQL', () => { quad(namedNode('ex://s0'), namedNode('ex://p0'), namedNode('ex://o0'), defaultGraph()), quad(namedNode('ex://s1'), namedNode('ex://p1'), literal('literal'), defaultGraph()), quad(namedNode('ex://s2'), namedNode('ex://p2'), namedNode('ex://o2'), defaultGraph()), - ]; - await store.multiPut(quads); + ] + await store.multiPut(quads) expect(await selectSPO(fetcher)).toHaveLength(3) }) @@ -59,4 +60,3 @@ describe('SPARQL', () => { }) }) }) -