From 5c651ad3e85b6327917b2c17ef216130e1c280a1 Mon Sep 17 00:00:00 2001 From: Asif Date: Sun, 12 Jul 2026 15:19:23 +0300 Subject: [PATCH 1/5] feat: update-libraries --- package-lock.json | 1532 ++++++++++++----- package.json | 37 +- src/containerConfig.ts | 17 +- src/index.ts | 13 +- tests/integration/retiler.spec.ts | 14 +- .../jobQueueProvider/pgBossJobQueue.spec.ts | 16 +- .../mapProvider/arcgisMapProvider.spec.ts | 10 +- tests/unit/mapProvider/wmsMapProvider.spec.ts | 14 +- tests/unit/mapSplitterProvider/sharp.spec.ts | 10 +- tests/unit/tileProcessor.spec.ts | 18 +- tests/unit/tilesStorageProvider/fs.spec.ts | 10 +- tests/unit/tilesStorageProvider/s3.spec.ts | 10 +- 12 files changed, 1167 insertions(+), 534 deletions(-) diff --git a/package-lock.json b/package-lock.json index 091fca8..d00b0b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,17 +12,20 @@ "@aws-sdk/client-s3": "^3.850.0", "@godaddy/terminus": "^4.12.1", "@map-colonies/cleanup-registry": "^1.1.0", - "@map-colonies/config": "^3.0.0", + "@map-colonies/config": "^4.0.1", "@map-colonies/detiler-client": "^1.3.0", "@map-colonies/detiler-common": "^1.3.0", - "@map-colonies/error-express-handler": "^3.0.0", - "@map-colonies/express-access-log-middleware": "^3.0.1", - "@map-colonies/js-logger": "^2.0.0", - "@map-colonies/read-pkg": "^1.0.0", - "@map-colonies/schemas": "^1.22.0", + "@map-colonies/error-express-handler": "^4.0.0", + "@map-colonies/express-access-log-middleware": "^4.1.0", + "@map-colonies/js-logger": "^5.0.0", + "@map-colonies/read-pkg": "^2.0.0", + "@map-colonies/schemas": "^1.21.0", "@map-colonies/telemetry": "^10.0.1", "@map-colonies/tile-calc": "^0.1.5", - "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/resources": "^1.30.1", + "@opentelemetry/sdk-metrics": "^1.30.1", + "@opentelemetry/sdk-node": "^0.57.2", "ajv": "^8.17.1", "axios": "^1.10.0", "compression": "^1.8.1", @@ -37,13 +40,13 @@ "tsyringe": "^4.10.0" }, "devDependencies": { - "@commitlint/cli": "^19.8.1", + "@commitlint/cli": "^20.4.1", "@commitlint/config-conventional": "^19.8.1", "@faker-js/faker": "^9.9.0", "@jest/globals": "^30.0.5", - "@map-colonies/eslint-config": "^6.0.0", - "@map-colonies/prettier-config": "0.0.1", - "@map-colonies/tsconfig": "^1.0.1", + "@map-colonies/eslint-config": "^8.0.0", + "@map-colonies/prettier-config": "^1.0.0", + "@map-colonies/tsconfig": "^2.0.0", "@smithy/types": "^4.3.1", "@swc/core": "^1.11.11", "@swc/jest": "^0.2.37", @@ -56,7 +59,7 @@ "@types/supertest": "^6.0.2", "copyfiles": "^2.4.1", "cross-env": "^10.1.0", - "eslint": "^9.23.0", + "eslint": "^9.39.2", "eslint-plugin-jest": "^28.11.0", "husky": "^9.1.7", "jest": "^29.7.0", @@ -65,12 +68,12 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21", "nock": "^13.5.6", - "prettier": "^3.5.3", + "prettier": "^3.8.3", "pretty-quick": "^4.1.1", - "rimraf": "^6.0.1", - "supertest": "^7.1.0", - "ts-jest": "^29.2.6", - "tsc-alias": "^1.8.11", + "rimraf": "^6.1.3", + "supertest": "^7.2.2", + "ts-jest": "^29.4.11", + "tsc-alias": "^1.8.17", "typescript": "^5.8.2" } }, @@ -1062,17 +1065,17 @@ "license": "MIT" }, "node_modules/@commitlint/cli": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", - "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", + "version": "20.5.3", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.5.3.tgz", + "integrity": "sha512-OJdL0EXWD5y9LPa0nr/geOwzaS8BsdaybKkcloB0JgsguGxNv2R+hC2FTPqrAcprg35zF33KOQerY0x8W1aesA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^19.8.1", - "@commitlint/lint": "^19.8.1", - "@commitlint/load": "^19.8.1", - "@commitlint/read": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/format": "^20.5.0", + "@commitlint/lint": "^20.5.3", + "@commitlint/load": "^20.5.3", + "@commitlint/read": "^20.5.0", + "@commitlint/types": "^20.5.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, @@ -1083,6 +1086,20 @@ "node": ">=v18" } }, + "node_modules/@commitlint/cli/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@commitlint/config-conventional": { "version": "19.8.1", "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", @@ -1098,41 +1115,65 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", - "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.5.0.tgz", + "integrity": "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.5.0", "ajv": "^8.11.0" }, "engines": { "node": ">=v18" } }, + "node_modules/@commitlint/config-validator/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@commitlint/ensure": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", - "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", + "version": "20.5.3", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.5.3.tgz", + "integrity": "sha512-4i4AgNvH62owG9MwSiWKrle7HGNpBHHdLnWFIp5fTsHUYe5kRuh15t08L/0pdbbrRk8JKXQxxN4hZQcn+szkrw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" + "@commitlint/types": "^20.5.0", + "es-toolkit": "^1.46.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/execute-rule": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", - "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", "dev": true, "license": "MIT", "engines": { @@ -1140,75 +1181,130 @@ } }, "node_modules/@commitlint/format": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", - "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.5.0.tgz", + "integrity": "sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", - "chalk": "^5.3.0" + "@commitlint/types": "^20.5.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/is-ignored": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", - "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.5.0.tgz", + "integrity": "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.5.0", "semver": "^7.6.0" }, "engines": { "node": ">=v18" } }, + "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@commitlint/lint": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", - "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", + "version": "20.5.3", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.5.3.tgz", + "integrity": "sha512-M7JbWBNr2gXKaPc4i/KipsuW1gkDHpj35KPjWtKy3Z+2AQw5wu1gBi1LIO0uoaij67CqY4K8PxPZSGens4evCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^20.5.0", + "@commitlint/parse": "^20.5.0", + "@commitlint/rules": "^20.5.3", + "@commitlint/types": "^20.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^19.8.1", - "@commitlint/parse": "^19.8.1", - "@commitlint/rules": "^19.8.1", - "@commitlint/types": "^19.8.1" + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", - "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", + "version": "20.5.3", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.5.3.tgz", + "integrity": "sha512-1FDZWuKyu98Myb8i7Tp31jPU2rZpOwAdYRyJcy2KoGg7Xk2A+bgHN8smhMaaNSNkmE8fwt53BokywZq8Gv/5XQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/execute-rule": "^19.8.1", - "@commitlint/resolve-extends": "^19.8.1", - "@commitlint/types": "^19.8.1", - "chalk": "^5.3.0", - "cosmiconfig": "^9.0.0", + "@commitlint/config-validator": "^20.5.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.5.3", + "@commitlint/types": "^20.5.0", + "cosmiconfig": "^9.0.1", "cosmiconfig-typescript-loader": "^6.1.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" + "es-toolkit": "^1.46.0", + "is-plain-obj": "^4.1.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/message": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", - "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz", + "integrity": "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==", "dev": true, "license": "MIT", "engines": { @@ -1216,30 +1312,44 @@ } }, "node_modules/@commitlint/parse": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", - "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.5.0.tgz", + "integrity": "sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.8.1", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" + "@commitlint/types": "^20.5.0", + "conventional-changelog-angular": "^8.2.0", + "conventional-commits-parser": "^6.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/read": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", - "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.5.0.tgz", + "integrity": "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/top-level": "^19.8.1", - "@commitlint/types": "^19.8.1", - "git-raw-commits": "^4.0.0", + "@commitlint/top-level": "^20.4.3", + "@commitlint/types": "^20.5.0", + "git-raw-commits": "^5.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" }, @@ -1247,44 +1357,86 @@ "node": ">=v18" } }, + "node_modules/@commitlint/read/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@commitlint/resolve-extends": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", - "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", + "version": "20.5.3", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.5.3.tgz", + "integrity": "sha512-+ogW9v/u9JqpvAgTrLra/YTFo0KkjU6iNblF89pPsj4NebNc+DAWctsludwezI8YnsjBmfHpApSwcXprN/f/ew==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/types": "^19.8.1", - "global-directory": "^4.0.1", + "@commitlint/config-validator": "^20.5.0", + "@commitlint/types": "^20.5.0", + "es-toolkit": "^1.46.0", + "global-directory": "^5.0.0", "import-meta-resolve": "^4.0.0", - "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0" }, "engines": { "node": ">=v18" } }, + "node_modules/@commitlint/resolve-extends/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@commitlint/rules": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", - "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", + "version": "20.5.3", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.5.3.tgz", + "integrity": "sha512-MPlMnb9D3wbszYMp+1hPtuhtPJndRo6I6yfkZVA4+jR8w7Kqp0u2u/Y+gzbaItx5Lltq5rw7FSZQWJMoXUC4NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^20.5.3", + "@commitlint/message": "^20.4.3", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules/node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^19.8.1", - "@commitlint/message": "^19.8.1", - "@commitlint/to-lines": "^19.8.1", - "@commitlint/types": "^19.8.1" + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", - "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", "dev": true, "license": "MIT", "engines": { @@ -1292,13 +1444,13 @@ } }, "node_modules/@commitlint/top-level": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", - "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.3.tgz", + "integrity": "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^7.0.0" + "escalade": "^3.2.0" }, "engines": { "node": ">=v18" @@ -1318,6 +1470,33 @@ "node": ">=v18" } }, + "node_modules/@conventional-changelog/git-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.7.0.tgz", + "integrity": "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/child-process-utils": "^1.0.0", + "@simple-libs/stream-utils": "^1.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.4.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", @@ -3395,9 +3574,9 @@ } }, "node_modules/@map-colonies/config": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@map-colonies/config/-/config-3.0.2.tgz", - "integrity": "sha512-0cLGqMGwbdVFflVR0TTcelwotwJc1hmil8bVhn5CcaYjMyOR61E8gnnIEExpPeQIfXJ4ri6hlbO8sHM4YMo3aA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@map-colonies/config/-/config-4.0.1.tgz", + "integrity": "sha512-NIc+N7dOiSIe/9eoMwHkLvPFlSZcNh8BSR/f8QhEGnjLDGPeFE45lVXuI0QuvnbLrJxTr0rH3O6y+9JIKEK9JQ==", "license": "ISC", "dependencies": { "@apideck/better-ajv-errors": "^0.3.6", @@ -3415,7 +3594,7 @@ "undici": "^7.3.0" }, "engines": { - "node": ">=20.18.1" + "node": ">=24.0.0" }, "peerDependencies": { "@map-colonies/schemas": "^1.9.0", @@ -3468,41 +3647,46 @@ "license": "ISC" }, "node_modules/@map-colonies/error-express-handler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@map-colonies/error-express-handler/-/error-express-handler-3.0.0.tgz", - "integrity": "sha512-8E2tNLGtmJcG/wpS0rkBbGpDyHJVbU50/pCXNf65u6hSCDTJYTSHcINfl3snMyLmgrug1oTSX8A9qZLHjb82mg==", - "license": "ISC", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@map-colonies/error-express-handler/-/error-express-handler-4.0.0.tgz", + "integrity": "sha512-3vDxDN0IlBy6gRBIyh5/fiKRQeJV2DZDJDEckPoBCADtWSdtzKhM+F+c3HdSru/8tm4lPYeDS9JVeOPJk419Ag==", "dependencies": { "http-status-codes": "^2.3.0" }, "engines": { - "node": ">=20" + "node": ">=24" } }, "node_modules/@map-colonies/eslint-config": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@map-colonies/eslint-config/-/eslint-config-6.0.0.tgz", - "integrity": "sha512-yXh/bMsDnDa1pbMBpBqIe+iySAygiXdSgFMvCDZwr/+y7JUgODikDCMD2LfdP7n+2DDNTNmCc+qu70361wVzfg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@map-colonies/eslint-config/-/eslint-config-8.1.0.tgz", + "integrity": "sha512-j4v8zQAAsRm4LRbJ588NmJXER80SC3zC5Cc+tC7sSDsbqIYJ4I/1ROmaAhGAlBzXy+lmJSM6Wne+BPdHosij0Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint/js": "^9.19.0", + "@map-colonies/eslint-plugin": "^0.1.0", + "@typescript-eslint/parser": "^8.23.0", "eslint-config-prettier": "^10.0.1", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import-x": "^4.6.1", + "eslint-import-resolver-typescript": "^4.0.0", + "eslint-plugin-import-x": "^4.16.1", + "eslint-plugin-unicorn": "^63.0.0", "typescript-eslint": "^8.23.0" }, "engines": { - "node": ">=20" + "node": ">=24" }, "peerDependencies": { + "@vitest/eslint-plugin": "^1.6.7", "eslint": "^9.19.0", - "eslint-plugin-jest": "^28.11.0", + "eslint-plugin-jest": "^28.11.0 || ^29.0.0", "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.1.0", - "globals": "^15.14.0" + "eslint-plugin-react-hooks": "^5.1.0 || ^7.0.0", + "globals": "^15.14.0 || ^17.0.0" }, "peerDependenciesMeta": { + "@vitest/eslint-plugin": { + "optional": true + }, "eslint-plugin-jest": { "optional": true }, @@ -3517,50 +3701,133 @@ } } }, + "node_modules/@map-colonies/eslint-plugin": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@map-colonies/eslint-plugin/-/eslint-plugin-0.1.0.tgz", + "integrity": "sha512-huiwOJS8YbgCfORIzzXdQjtoC8VdsPhYx0/pu+uPqfML2RfO8wjzkWfIrVo6vyFS2YnnaSUR6tkTy0YwEr620g==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^8.53.0" + }, + "engines": { + "node": ">=24" + }, + "peerDependencies": { + "eslint": "^9.39.0" + } + }, "node_modules/@map-colonies/express-access-log-middleware": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@map-colonies/express-access-log-middleware/-/express-access-log-middleware-3.0.1.tgz", - "integrity": "sha512-05lBhi6TmvmkXlI9F8yp+SYPu36/Kk8A2NMWivK5Qzu3znsmliwxPLeHVtwiokefm07PSQUVTvH5qy8WKLC8qg==", - "license": "ISC", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@map-colonies/express-access-log-middleware/-/express-access-log-middleware-4.1.0.tgz", + "integrity": "sha512-qtuKfNOE9WmEkLD175SI26xO+X8mloxlTE8JrR/gypaqIa8+XdGYNynDKrQK+83t5vMfToMLXhTzmGtT8HgXAg==", "dependencies": { + "@opentelemetry/semantic-conventions": "^1.38.0", "http-status-codes": "^2.3.0", - "pino-http": "^10.3.0" + "pino-http": "^11.0.0" }, "engines": { - "node": ">=20" + "node": ">=24" } }, "node_modules/@map-colonies/js-logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@map-colonies/js-logger/-/js-logger-2.0.0.tgz", - "integrity": "sha512-8G7JVvrBoFxjlBNJYK1dbt01dkcPmw72M9pI6xYWfC/3J/s6r9oki9+DCrWRUet0l8IofyPmakOt4kdZhAIJ9w==", - "license": "ISC", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@map-colonies/js-logger/-/js-logger-5.0.0.tgz", + "integrity": "sha512-kPEJwJo+bzZprq6Q91+ozJQpP2sPvgjfUF2BMxuXQXXmfY+USU2XcZJdfU4dowV5E275XhFTG9nQT2gJZvdQbg==", "dependencies": { - "pino": "^9.4.0", - "pino-caller": "^3.4.0", - "pino-pretty": "^13.0.0" + "@map-colonies/read-pkg": "^2.0.0", + "@opentelemetry/resource-detector-container": "^0.8.4", + "@opentelemetry/resources": "^2.6.0", + "@opentelemetry/semantic-conventions": "^1.40.0", + "pino": "^10.1.0", + "pino-caller": "^4.0.0", + "pino-opentelemetry-transport": "^2.0.0", + "pino-pretty": "^13.1.2" }, "engines": { - "node": ">=20" + "node": ">=24" + } + }, + "node_modules/@map-colonies/js-logger/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@map-colonies/js-logger/node_modules/@opentelemetry/resource-detector-container": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.8.11.tgz", + "integrity": "sha512-O7dMPH13+JZu+swtCsdq5702Fa2Q4MSHmwMoLxyqgWuPPtmDmao4s+V1ovfg225zW67quNDXFKdLf1q5/Elb9w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@map-colonies/js-logger/node_modules/@opentelemetry/resources": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "node_modules/@map-colonies/prettier-config": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@map-colonies/prettier-config/-/prettier-config-0.0.1.tgz", - "integrity": "sha512-7LqtlfqkqHMeowhed4TcM4LLk5JipdBILxtmhRg6t96Tsoh8QOw3FTgroGb81XvZHfkvQlYetxGno2Eiu2o1RA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@map-colonies/prettier-config/-/prettier-config-1.0.0.tgz", + "integrity": "sha512-IQnP63LimwfnIX9N/BVC3Th5hVhBw+LwNQUz5s7lZoxOSM2AJWwT/E/rjvnh3lnEgQa0m0nJJJLzyVAjWODDGA==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=24" + } }, "node_modules/@map-colonies/read-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@map-colonies/read-pkg/-/read-pkg-1.0.0.tgz", - "integrity": "sha512-powpYwGoy1x+uYa9wvBIwTQBufv2Rzm35IiYlsyZbh8yIq3e2PIxwonAmZ6hleaDAuu35BS5STAnWCUTcMKBiQ==", - "license": "ISC", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@map-colonies/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha512-rMASq2JeRuaWYGqPN68+FwQa4ZSVJBFpttRypUX6RflZK0svZNNCQSWleqz9iJGw5oVDRILNpAb4HRHm/7rszA==", "dependencies": { - "type-fest": "^4.33.0" + "type-fest": "^5.0.0" + }, + "engines": { + "node": ">=24" + } + }, + "node_modules/@map-colonies/read-pkg/node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" }, "engines": { "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@map-colonies/schemas": { @@ -3624,16 +3891,13 @@ "license": "ISC" }, "node_modules/@map-colonies/tsconfig": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@map-colonies/tsconfig/-/tsconfig-1.0.1.tgz", - "integrity": "sha512-IEWIV0bx3XG07aVmNrSn5gr/39T37dImLTFsUtxeslU5o2S4cgvCMdl/0K2moMJh6Cfr8uRiX6UTop4jLVE8eA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@map-colonies/tsconfig/-/tsconfig-2.0.0.tgz", + "integrity": "sha512-5ZisHUuqbrVMgA+4I2QWZ5m3wWulOQMttuUcdq6I2MdaUtWk7zBiOGYY3v201FZQGuEIBSNAxGG9qXVT+kCifw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "typescript": ">= 5.5.2" + "node": ">=24" } }, "node_modules/@napi-rs/wasm-runtime": { @@ -3706,16 +3970,6 @@ "node": ">= 8" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, "node_modules/@opentelemetry/api": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", @@ -5192,6 +5446,35 @@ "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", "license": "BSD-3-Clause" }, + "node_modules/@simple-libs/child-process-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", + "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@simple-libs/stream-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", + "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, "node_modules/@sinclair/typebox": { "version": "0.34.49", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", @@ -7441,6 +7724,19 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/builtin-modules": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.3.0.tgz", + "integrity": "sha512-hMQUl2bUFG339QygPM97E+mc8OY1IAchORZxm4a/frcYwKzozMzRVDBwHW0NjOqGElLm2O37AVQE8ikxlZHrMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -7533,6 +7829,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -7603,6 +7906,29 @@ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "license": "MIT" }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -7798,16 +8124,16 @@ } }, "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", + "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", "dev": true, "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/conventional-changelog-conventionalcommits": { @@ -7824,22 +8150,20 @@ } }, "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", + "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" + "@simple-libs/stream-utils": "^1.2.0", + "meow": "^13.0.0" }, "bin": { - "conventional-commits-parser": "cli.mjs" + "conventional-commits-parser": "dist/cli/index.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/convert-source-map": { @@ -7932,6 +8256,20 @@ "node": ">=10" } }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -8140,19 +8478,6 @@ "node": ">= 8" } }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -8443,6 +8768,17 @@ "node": ">= 0.4" } }, + "node_modules/es-toolkit": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.49.0.tgz", + "integrity": "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==", + "dev": true, + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -8573,22 +8909,22 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.5.tgz", + "integrity": "sha512-nbE5XLph6TLtGYcu/U6e6ZVXyKBhbDWK5cLGk76eJ7NdZpwf1P9EFkpt1Z01mNZNrrilsAYWKH6zUkL4reoXbw==", "dev": true, "license": "ISC", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^16.17.0 || >=18.6.0" }, "funding": { "url": "https://opencollective.com/eslint-import-resolver-typescript" @@ -8608,9 +8944,9 @@ } }, "node_modules/eslint-plugin-import-x": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.17.0.tgz", - "integrity": "sha512-aM7V25Bg6YuYxtEhwjafzfS0NTMds1D2PMQI0K4KqJxQJRtkP4CO+MQTWRdBq2qAnmPxTxLevhXUBtByxJqS1w==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.17.1.tgz", + "integrity": "sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==", "dev": true, "license": "MIT", "dependencies": { @@ -8655,9 +8991,9 @@ } }, "node_modules/eslint-plugin-import-x/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -8709,6 +9045,69 @@ } } }, + "node_modules/eslint-plugin-unicorn": { + "version": "63.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-63.0.0.tgz", + "integrity": "sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.0", + "change-case": "^5.4.4", + "ci-info": "^4.3.1", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.46.0", + "find-up-simple": "^1.0.1", + "globals": "^16.4.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.13.0", + "semver": "^7.7.3", + "strip-indent": "^4.1.1" + }, + "engines": { + "node": "^20.10.0 || >=21.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=9.38.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-scope": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", @@ -9233,17 +9632,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, "engines": { "node": ">=18" }, @@ -9541,22 +9935,21 @@ } }, "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.1.tgz", + "integrity": "sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==", + "deprecated": "Deprecated and no longer maintained. Use @conventional-changelog/git-client instead.", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" + "@conventional-changelog/git-client": "^2.6.0", + "meow": "^13.0.0" }, "bin": { - "git-raw-commits": "cli.mjs" + "git-raw-commits": "src/cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/glob": { @@ -9595,29 +9988,16 @@ } }, "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz", + "integrity": "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==", "dev": true, "license": "MIT", "dependencies": { - "ini": "4.1.1" + "ini": "6.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "extraneous": true, - "license": "MIT", - "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9923,6 +10303,19 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9942,13 +10335,13 @@ "license": "ISC" }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/ipaddr.js": { @@ -9980,6 +10373,22 @@ "node": ">=8" } }, + "node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^5.0.0" + }, + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-bun-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", @@ -10083,6 +10492,19 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-retry-allowed": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", @@ -10107,19 +10529,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -13391,16 +13800,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", @@ -13410,23 +13809,6 @@ "node": ">=0.10.0" } }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -13477,22 +13859,6 @@ "dev": true, "license": "MIT" }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lodash": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", @@ -13505,20 +13871,6 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -13533,41 +13885,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true, - "license": "MIT" - }, "node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -13645,13 +13962,13 @@ } }, "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=16.10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14097,62 +14414,334 @@ "node": ">= 0.8.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "node_modules/otlp-logger": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/otlp-logger/-/otlp-logger-1.1.13.tgz", + "integrity": "sha512-r53tPnMLprtQSMOJUkj4Az4tR8NL+U+8C7M8BV1ZA9y7cDfAbWQp2mRL/eYS/O786oAi9KnN9hKsZ5cFKNchKw==", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "@opentelemetry/api-logs": "^0.206.0", + "@opentelemetry/exporter-logs-otlp-grpc": "^0.206.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.206.0", + "@opentelemetry/exporter-logs-otlp-proto": "^0.206.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/sdk-logs": "^0.206.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/api-logs": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.206.0.tgz", + "integrity": "sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.1.0.tgz", + "integrity": "sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", + "node_modules/otlp-logger/node_modules/@opentelemetry/exporter-logs-otlp-grpc": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.206.0.tgz", + "integrity": "sha512-kJKxKBaGwqWop95d6tcluz260IWwIgOG0BH8oVm6429tg8LxY2PJb7Om8d5s+5vOFM8DkUYCnIpn9d/13/RcKQ==", + "license": "Apache-2.0", "dependencies": { - "p-limit": "^4.0.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-exporter-base": "0.206.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.206.0", + "@opentelemetry/otlp-transformer": "0.206.0", + "@opentelemetry/sdk-logs": "0.206.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^18.19.0 || >=20.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", + "node_modules/otlp-logger/node_modules/@opentelemetry/exporter-logs-otlp-http": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.206.0.tgz", + "integrity": "sha512-VWcHEnS+1kN+sQTAdCgSn2anqHPxY1/e52fhpe2mcSnEaXI1srFf3RU5DAu7hzQO6T9DPQzOKG8kc76vCtyYDw==", + "license": "Apache-2.0", "dependencies": { - "yocto-queue": "^1.0.0" + "@opentelemetry/api-logs": "0.206.0", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-exporter-base": "0.206.0", + "@opentelemetry/otlp-transformer": "0.206.0", + "@opentelemetry/sdk-logs": "0.206.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^18.19.0 || >=20.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "node_modules/otlp-logger/node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.206.0.tgz", + "integrity": "sha512-CsYNXJwkn1qCXJGE+/JvvYucAjL8rpaxa2hnl+tDP6M5E0O3UVa8zG4ZUEebjr5J5Nc32egvslEZx5rgNOp3lQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.206.0", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-exporter-base": "0.206.0", + "@opentelemetry/otlp-transformer": "0.206.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/sdk-logs": "0.206.0", + "@opentelemetry/sdk-trace-base": "2.1.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/exporter-logs-otlp-proto/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.206.0.tgz", + "integrity": "sha512-Rv54oSNKMHYS5hv+H5EGksfBUtvPQWFTK+Dk6MjJun9tOijCsFJrhRFvAqg5d67TWSMn+ZQYRKIeXh5oLVrpAQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-transformer": "0.206.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.206.0.tgz", + "integrity": "sha512-IA8EDbrB8OKtidMqErBY8sUc9mh03LOXuNPwp4/rdPrxSt45g1gBuZMovRXdEWfRyKKbF2E7MdipT2m11bs6SQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/otlp-exporter-base": "0.206.0", + "@opentelemetry/otlp-transformer": "0.206.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.206.0.tgz", + "integrity": "sha512-Li2Cik1WnmNbU2mmTnw7DxvRiXhMcnAuTfAclP8y/zy7h5+GrLDpTZ+Z0XUs+Q3MLkb/h3ry4uFrC/z+2a6X7g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.206.0", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/sdk-logs": "0.206.0", + "@opentelemetry/sdk-metrics": "2.1.0", + "@opentelemetry/sdk-trace-base": "2.1.0", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/resources": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.9.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/sdk-logs": { + "version": "0.206.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.206.0.tgz", + "integrity": "sha512-SQ2yTmqe4Mw9RI3a/glVkfjWPsXh6LySvnljXubiZq4zu+UP8NMJt2j82ZsYb+KpD7Eu+/41/7qlJnjdeVjz7Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.206.0", + "@opentelemetry/core": "2.1.0", + "@opentelemetry/resources": "2.1.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/sdk-metrics": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.1.0.tgz", + "integrity": "sha512-J9QX459mzqHLL9Y6FZ4wQPRZG4TOpMCyPOh6mkr/humxE1W2S3Bvf4i75yiMW9uyed2Kf5rxmLhTm/UK8vNkAw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/resources": "2.1.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz", + "integrity": "sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/resources": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/otlp-logger/node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.1.0.tgz", + "integrity": "sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.1.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14216,16 +14805,6 @@ "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -14453,63 +15032,73 @@ } }, "node_modules/pino": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", - "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz", + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==", "license": "MIT", "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", + "pino-abstract-transport": "^3.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" + "thread-stream": "^4.0.0" }, "bin": { "pino": "bin.js" } }, "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", "license": "MIT", "dependencies": { "split2": "^4.0.0" } }, "node_modules/pino-caller": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pino-caller/-/pino-caller-3.4.0.tgz", - "integrity": "sha512-2aEjlmhLA7J3lGBXKDSxtlfDY+cBzGh5PnLFP6ZUhvyqCnqKfv28ulpSch6uymGIdo7fzxXHK2hvR5FrdzbhTg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-caller/-/pino-caller-4.0.0.tgz", + "integrity": "sha512-z0i/iYp4zH02uIQG8LwFK5dMKTdAYgwZM9LSzoOATJ0H5LTeJ3OZeNBpGget9DpnNaewIt5NkN5YGNvkCZ+JbQ==", "license": "MIT", "dependencies": { "source-map-support": "^0.5.13" }, "engines": { "node": ">6.0.0" - }, - "peerDependencies": { - "pino": "*" } }, "node_modules/pino-http": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-10.5.0.tgz", - "integrity": "sha512-hD91XjgaKkSsdn8P7LaebrNzhGTdB086W3pyPihX0EzGPjq5uBJBXo4N5guqNaK6mUjg9aubMF7wDViYek9dRA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-11.0.0.tgz", + "integrity": "sha512-wqg5XIAGRRIWtTk8qPGxkbrfiwEWz1lgedVLvhLALudKXvg1/L2lTFgTGPJ4Z2e3qcRmxoFxDuSdMdMGNM6I1g==", "license": "MIT", "dependencies": { "get-caller-file": "^2.0.5", - "pino": "^9.0.0", + "pino": "^10.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0" } }, + "node_modules/pino-opentelemetry-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-opentelemetry-transport/-/pino-opentelemetry-transport-2.0.0.tgz", + "integrity": "sha512-tWoq02WEtnCWfr63Co1n0sGlDpkBz2YUovSAsSBv/+jwKUIn/PjxwRileGViKrH/K3e+oc71nGl6yUdgQlrVkg==", + "license": "MIT", + "dependencies": { + "otlp-logger": "^1.1.4", + "pino-abstract-transport": "^3.0.0" + }, + "peerDependencies": { + "pino": "^10.0.0" + } + }, "node_modules/pino-pretty": { "version": "13.1.3", "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz", @@ -14534,15 +15123,6 @@ "pino-pretty": "bin.js" } }, - "node_modules/pino-pretty/node_modules/pino-abstract-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", - "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, "node_modules/pino-pretty/node_modules/strip-json-comments": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", @@ -14663,6 +15243,16 @@ "node": ">=12" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -15103,6 +15693,29 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regjsparser": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15674,13 +16287,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "license": "MIT" - }, "node_modules/stable-hash-x": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", @@ -15806,6 +16412,19 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", + "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -15968,33 +16587,22 @@ "node": ">=8" } }, - "node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/thread-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.2.0.tgz", - "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz", + "integrity": "sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==", "license": "MIT", "dependencies": { - "real-require": "^0.2.0" + "real-require": "^1.0.0" + }, + "engines": { + "node": ">=20" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, + "node_modules/thread-stream/node_modules/real-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz", + "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==", "license": "MIT" }, "node_modules/through2": { @@ -16286,6 +16894,7 @@ "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -16374,19 +16983,6 @@ "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "license": "MIT" }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", diff --git a/package.json b/package.json index 47321e3..a58a2ee 100644 --- a/package.json +++ b/package.json @@ -31,17 +31,20 @@ "@aws-sdk/client-s3": "^3.850.0", "@godaddy/terminus": "^4.12.1", "@map-colonies/cleanup-registry": "^1.1.0", - "@map-colonies/config": "^3.0.0", + "@map-colonies/config": "^4.0.1", "@map-colonies/detiler-client": "^1.3.0", "@map-colonies/detiler-common": "^1.3.0", - "@map-colonies/error-express-handler": "^3.0.0", - "@map-colonies/express-access-log-middleware": "^3.0.1", - "@map-colonies/js-logger": "^2.0.0", - "@map-colonies/read-pkg": "^1.0.0", - "@map-colonies/schemas": "^1.22.0", + "@map-colonies/error-express-handler": "^4.0.0", + "@map-colonies/express-access-log-middleware": "^4.1.0", + "@map-colonies/js-logger": "^5.0.0", + "@map-colonies/read-pkg": "^2.0.0", + "@map-colonies/schemas": "^1.21.0", "@map-colonies/telemetry": "^10.0.1", "@map-colonies/tile-calc": "^0.1.5", - "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/resources": "^1.30.1", + "@opentelemetry/sdk-node": "^0.57.2", + "@opentelemetry/sdk-metrics": "^1.30.1", "ajv": "^8.17.1", "axios": "^1.10.0", "compression": "^1.8.1", @@ -56,13 +59,13 @@ "tsyringe": "^4.10.0" }, "devDependencies": { - "@commitlint/cli": "^19.8.1", + "@commitlint/cli": "^20.4.1", "@commitlint/config-conventional": "^19.8.1", "@faker-js/faker": "^9.9.0", "@jest/globals": "^30.0.5", - "@map-colonies/eslint-config": "^6.0.0", - "@map-colonies/prettier-config": "0.0.1", - "@map-colonies/tsconfig": "^1.0.1", + "@map-colonies/eslint-config": "^8.0.0", + "@map-colonies/prettier-config": "^1.0.0", + "@map-colonies/tsconfig": "^2.0.0", "@smithy/types": "^4.3.1", "@swc/core": "^1.11.11", "@swc/jest": "^0.2.37", @@ -75,7 +78,7 @@ "@types/supertest": "^6.0.2", "copyfiles": "^2.4.1", "cross-env": "^10.1.0", - "eslint": "^9.23.0", + "eslint": "^9.39.2", "eslint-plugin-jest": "^28.11.0", "husky": "^9.1.7", "jest": "^29.7.0", @@ -84,12 +87,12 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21", "nock": "^13.5.6", - "prettier": "^3.5.3", + "prettier": "^3.8.3", "pretty-quick": "^4.1.1", - "rimraf": "^6.0.1", - "supertest": "^7.1.0", - "ts-jest": "^29.2.6", - "tsc-alias": "^1.8.11", + "rimraf": "^6.1.3", + "supertest": "^7.2.2", + "ts-jest": "^29.4.11", + "tsc-alias": "^1.8.17", "typescript": "^5.8.2" } } diff --git a/src/containerConfig.ts b/src/containerConfig.ts index 47a2f21..60a8bd5 100644 --- a/src/containerConfig.ts +++ b/src/containerConfig.ts @@ -1,5 +1,5 @@ import { DependencyContainer, Lifecycle, instancePerContainerCachingFactory } from 'tsyringe'; -import jsLogger, { Logger } from '@map-colonies/js-logger'; +import { jsLogger, Logger } from '@map-colonies/js-logger'; import { getOtelMixin } from '@map-colonies/telemetry'; import { HealthCheck } from '@godaddy/terminus'; import axios from 'axios'; @@ -49,20 +49,20 @@ export const registerExternalValues = async (options?: RegisterOptions): Promise try { const dependencies: InjectionObject[] = [ + { token: SERVICES.CONFIG, provider: { useValue: getConfig() } }, { token: SERVICES.LOGGER, provider: { - useFactory: instancePerContainerCachingFactory((container) => { - const queueName = container.resolve(QUEUE_NAME); + useFactory: instancePerContainerCachingFactory(async (container) => { const config = container.resolve(SERVICES.CONFIG); const loggerConfig = config.get('telemetry.logger'); - const logger = jsLogger({ ...loggerConfig, mixin: getOtelMixin(), base: { queue: queueName } }); - const cleanupRegistryLogger = logger.child({ subComponent: 'cleanupRegistry' }); - cleanupRegistry.on('itemFailed', (id, error, msg) => cleanupRegistryLogger.error({ msg, itemId: id, err: error })); - cleanupRegistry.on('finished', (status) => cleanupRegistryLogger.info({ msg: `cleanup registry finished cleanup`, status })); - return logger; + return await jsLogger({ ...loggerConfig, mixin: getOtelMixin() }); }), }, + postInjectionHook: async (deps: DependencyContainer): Promise => { + const logger = await deps.resolve>(SERVICES.LOGGER); + deps.register(SERVICES.LOGGER, { useValue: logger }); + }, }, { token: SERVICES.CLEANUP_REGISTRY, @@ -76,7 +76,6 @@ export const registerExternalValues = async (options?: RegisterOptions): Promise cleanupRegistry.on('finished', (status) => cleanupRegistryLogger.info({ msg: `cleanup registry finished cleanup`, status })); }, }, - { token: SERVICES.CONFIG, provider: { useValue: getConfig() } }, { token: SERVICES.TRACER, provider: { diff --git a/src/index.ts b/src/index.ts index 9abb7e6..1649f59 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,15 +2,16 @@ import 'reflect-metadata'; import { createServer } from 'node:http'; import express from 'express'; -import { Registry } from 'prom-client'; -import { Logger } from '@map-colonies/js-logger'; -import { DependencyContainer } from 'tsyringe'; -import { CleanupRegistry } from '@map-colonies/cleanup-registry'; +import type { Registry } from 'prom-client'; +import type { Logger } from '@map-colonies/js-logger'; +import type { DependencyContainer } from 'tsyringe'; +import type { CleanupRegistry } from '@map-colonies/cleanup-registry'; import { collectMetricsExpressMiddleware } from '@map-colonies/telemetry/prom-metrics'; -import { createTerminus, HealthCheck } from '@godaddy/terminus'; +import type { HealthCheck } from '@godaddy/terminus'; +import { createTerminus } from '@godaddy/terminus'; import { CONSUME_AND_PROCESS_FACTORY, ExitCodes, HEALTHCHECK, METRICS_REGISTRY, ON_SIGNAL, SERVICES } from './common/constants'; import { registerExternalValues } from './containerConfig'; -import { ConfigType } from './common/config'; +import type { ConfigType } from './common/config'; let depContainer: DependencyContainer | undefined; diff --git a/tests/integration/retiler.spec.ts b/tests/integration/retiler.spec.ts index ac8ae3b..f8600c6 100644 --- a/tests/integration/retiler.spec.ts +++ b/tests/integration/retiler.spec.ts @@ -2,7 +2,7 @@ import * as fsPromises from 'fs/promises'; import { setTimeout as setTimeoutPromise } from 'node:timers/promises'; import { Registry } from 'prom-client'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { trace } from '@opentelemetry/api'; import { DependencyContainer } from 'tsyringe'; import { PgBoss } from 'pg-boss'; @@ -85,8 +85,10 @@ describe('retiler', function () { let mapBuffer2048x2048: Buffer; let mapBuffer512x512: Buffer; let determineKey: (tile: Required) => string; + let logger: Logger; beforeAll(async () => { + logger = await jsLogger({ enabled: false }); await initConfig(true); config = getConfig(); mapUrl = config.get('app.map.url'); @@ -135,7 +137,7 @@ describe('retiler', function () { }, }, }, - { token: SERVICES.LOGGER, provider: { useValue: jsLogger({ enabled: false }) } }, + { token: SERVICES.LOGGER, provider: { useValue: logger } }, { token: SERVICES.TRACER, provider: { useValue: trace.getTracer('testTracer') } }, { token: METRICS_REGISTRY, provider: { useValue: new Registry() } }, { token: TILES_STORAGE_LAYOUT, provider: { useValue: { format: '{z}/{x}/{y}.png', shouldFlipY: true } } }, @@ -883,7 +885,7 @@ describe('retiler', function () { }, }, }, - { token: SERVICES.LOGGER, provider: { useValue: jsLogger({ enabled: false }) } }, + { token: SERVICES.LOGGER, provider: { useValue: logger } }, { token: SERVICES.TRACER, provider: { useValue: trace.getTracer('testTracer') } }, { token: METRICS_REGISTRY, provider: { useValue: new Registry() } }, { token: TILES_STORAGE_LAYOUT, provider: { useValue: { format: '{z}/{x}/{y}.png', shouldFlipY: true } } }, @@ -1039,7 +1041,7 @@ describe('retiler', function () { }, }, }, - { token: SERVICES.LOGGER, provider: { useValue: jsLogger({ enabled: false }) } }, + { token: SERVICES.LOGGER, provider: { useValue: logger } }, { token: SERVICES.TRACER, provider: { useValue: trace.getTracer('testTracer') } }, { token: METRICS_REGISTRY, provider: { useValue: new Registry() } }, { token: TILES_STORAGE_LAYOUT, provider: { useValue: { format: '{z}/{x}/{y}.png', shouldFlipY: true } } }, @@ -1158,7 +1160,7 @@ describe('retiler', function () { }, }, }, - { token: SERVICES.LOGGER, provider: { useValue: jsLogger({ enabled: false }) } }, + { token: SERVICES.LOGGER, provider: { useValue: logger } }, { token: SERVICES.TRACER, provider: { useValue: trace.getTracer('testTracer') } }, { token: METRICS_REGISTRY, provider: { useValue: new Registry() } }, { token: TILES_STORAGE_LAYOUT, provider: { useValue: { format: '{z}/{x}/{y}.png', shouldFlipY: true } } }, @@ -1286,7 +1288,7 @@ describe('retiler', function () { }, }, }, - { token: SERVICES.LOGGER, provider: { useValue: jsLogger({ enabled: false }) } }, + { token: SERVICES.LOGGER, provider: { useValue: logger } }, { token: SERVICES.TRACER, provider: { useValue: trace.getTracer('testTracer') } }, { token: METRICS_REGISTRY, provider: { useValue: new Registry() } }, { token: TILES_STORAGE_LAYOUT, provider: { useValue: { format: '{z}/{x}/{y}.png', shouldFlipY: true } } }, diff --git a/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts b/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts index 3b7275b..eeecacd 100644 --- a/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts +++ b/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts @@ -1,6 +1,6 @@ import { setTimeout as setTimeoutPromise } from 'node:timers/promises'; import { Registry } from 'prom-client'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { PgBoss } from 'pg-boss'; import { serializeError } from 'serialize-error'; import { type Tracer } from '@opentelemetry/api'; @@ -21,7 +21,10 @@ describe('PgBossJobQueueProvider', () => { fetch: jest.Mock; }; - beforeAll(() => { + let logger: Logger; + + beforeAll(async () => { + logger = await jsLogger({ enabled: false }); pgbossMock = { on: jest.fn(), start: jest.fn(), @@ -43,14 +46,7 @@ describe('PgBossJobQueueProvider', () => { ), startSpan: jest.fn(), }; - provider = new PgBossJobQueueProvider( - pgbossMock as unknown as PgBoss, - jsLogger({ enabled: false }), - tracerMock, - 'queue-name', - 50, - new Registry() - ); + provider = new PgBossJobQueueProvider(pgbossMock as unknown as PgBoss, logger, tracerMock, 'queue-name', 50, new Registry()); }); afterEach(function () { diff --git a/tests/unit/mapProvider/arcgisMapProvider.spec.ts b/tests/unit/mapProvider/arcgisMapProvider.spec.ts index bcbe603..3fdc9f4 100644 --- a/tests/unit/mapProvider/arcgisMapProvider.spec.ts +++ b/tests/unit/mapProvider/arcgisMapProvider.spec.ts @@ -1,9 +1,15 @@ import { AxiosError, AxiosInstance } from 'axios'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { ArcgisMapProvider } from '../../../src/retiler/mapProvider/arcgis/arcgisMapProvider'; jest.mock('axios'); +let logger: Logger; + +beforeAll(async () => { + logger = await jsLogger({ enabled: false }); +}); + describe('arcgisMapProvider', () => { describe('#getMap', () => { let arcgisProv: ArcgisMapProvider; @@ -11,7 +17,7 @@ describe('arcgisMapProvider', () => { beforeEach(function () { mockedClient = { get: jest.fn() } as unknown as jest.Mocked; - arcgisProv = new ArcgisMapProvider(mockedClient, jsLogger({ enabled: false }), 'http://url.com', 'png32'); + arcgisProv = new ArcgisMapProvider(mockedClient, logger, 'http://url.com', 'png32'); }); afterEach(function () { diff --git a/tests/unit/mapProvider/wmsMapProvider.spec.ts b/tests/unit/mapProvider/wmsMapProvider.spec.ts index 549296e..2ab66e0 100644 --- a/tests/unit/mapProvider/wmsMapProvider.spec.ts +++ b/tests/unit/mapProvider/wmsMapProvider.spec.ts @@ -1,10 +1,16 @@ import { AxiosError, AxiosInstance } from 'axios'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { WmsMapProvider } from '../../../src/retiler/mapProvider/wms/wmsMapProvider'; import { WmsConfig, WmsRequestParams } from '../../../src/retiler/mapProvider/wms/requestParams'; jest.mock('axios'); +let logger: Logger; + +beforeAll(async () => { + logger = await jsLogger({ enabled: false }); +}); + describe('wmsMapProvider', () => { describe('#getMap', () => { let mockedClient: jest.Mocked; @@ -19,7 +25,7 @@ describe('wmsMapProvider', () => { it('should resolve into a buffer if the request has completed with wms version 1.1.1', async function () { const wmsConfig: WmsConfig = { version: '1.1.1', layers: 'someLayer', styles: 'someStyle' }; - const wmsProv = new WmsMapProvider(mockedClient, jsLogger({ enabled: false }), 'http://url.com', 'image/png', wmsConfig); + const wmsProv = new WmsMapProvider(mockedClient, logger, 'http://url.com', 'image/png', wmsConfig); const response = { data: Buffer.from('test'), headers: { 'content-type': 'image/png' } }; mockedClient.get.mockResolvedValue(response); @@ -46,7 +52,7 @@ describe('wmsMapProvider', () => { it('should resolve into a buffer if the request has completed with wms version 1.3.0', async function () { const wmsConfig: WmsConfig = { version: '1.3.0', layers: 'someLayer', styles: 'someStyle' }; - const wmsProv = new WmsMapProvider(mockedClient, jsLogger({ enabled: false }), 'http://url.com', 'image/png', wmsConfig); + const wmsProv = new WmsMapProvider(mockedClient, logger, 'http://url.com', 'image/png', wmsConfig); const response = { data: Buffer.from('test'), headers: { 'content-type': 'image/png' } }; mockedClient.get.mockResolvedValue(response); @@ -71,7 +77,7 @@ describe('wmsMapProvider', () => { }); it('should throw an error if the request has failed', async function () { - const wmsProv = new WmsMapProvider(mockedClient, jsLogger({ enabled: false }), 'http://url.com', 'image/png', { + const wmsProv = new WmsMapProvider(mockedClient, logger, 'http://url.com', 'image/png', { version: '1.1.1', layers: '', styles: '', diff --git a/tests/unit/mapSplitterProvider/sharp.spec.ts b/tests/unit/mapSplitterProvider/sharp.spec.ts index 0560538..9787e1e 100644 --- a/tests/unit/mapSplitterProvider/sharp.spec.ts +++ b/tests/unit/mapSplitterProvider/sharp.spec.ts @@ -1,17 +1,23 @@ import { readFile } from 'fs/promises'; import sharp from 'sharp'; import { faker } from '@faker-js/faker'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { Tile } from '@map-colonies/tile-calc'; import { SharpMapSplitter } from '../../../src/retiler/mapSplitterProvider/sharp'; import { createBlankBuffer } from '../../integration/helpers'; +let logger: Logger; + +beforeAll(async () => { + logger = await jsLogger({ enabled: false }); +}); + describe('SharpMapSplitter', () => { describe('#splitMap', () => { let splitter: SharpMapSplitter; beforeEach(function () { - splitter = new SharpMapSplitter(jsLogger({ enabled: false })); + splitter = new SharpMapSplitter(logger); }); afterEach(function () { diff --git a/tests/unit/tileProcessor.spec.ts b/tests/unit/tileProcessor.spec.ts index c41c12b..a24317f 100644 --- a/tests/unit/tileProcessor.spec.ts +++ b/tests/unit/tileProcessor.spec.ts @@ -1,7 +1,7 @@ import { readFile } from 'fs/promises'; import { Tracer } from '@opentelemetry/api'; import { IDetilerClient } from '@map-colonies/detiler-client'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { AxiosInstance } from 'axios'; import { Registry } from 'prom-client'; import { ConfigType } from '../../src/common/config'; @@ -14,6 +14,12 @@ import { createBlankBuffer } from '../integration/helpers'; const REMOTE_STATE_TIMESTAMP = '2024-01-15T21:20:36Z'; +let logger: Logger; + +beforeAll(async () => { + logger = await jsLogger({ enabled: false }); +}); + describe('TileProcessor', () => { let processor: TileProcessor; let processorWithMultiStores: TileProcessor; @@ -97,7 +103,7 @@ describe('TileProcessor', () => { }; processor = new TileProcessor( - jsLogger({ enabled: false }), + logger, tracerMock, mapProv, mapSplitterProv, @@ -110,7 +116,7 @@ describe('TileProcessor', () => { ); processorWithMultiStores = new TileProcessor( - jsLogger({ enabled: false }), + logger, tracerMock, mapProv, mapSplitterProv, @@ -264,7 +270,7 @@ describe('TileProcessor', () => { it('should call all the processing functions in a row and resolve without errors if detiler is not configured', async () => { const processor = new TileProcessor( - jsLogger({ enabled: false }), + logger, tracerMock, mapProv, mapSplitterProv, @@ -382,7 +388,7 @@ describe('TileProcessor', () => { } as unknown as ConfigType; const tileProcessorWithForce = new TileProcessor( - jsLogger({ enabled: false }), + logger, tracerMock, mapProv, mapSplitterProv, @@ -647,7 +653,7 @@ describe('TileProcessor', () => { } as unknown as ConfigType; const tileProcessorWithNoProceeding = new TileProcessor( - jsLogger({ enabled: false }), + logger, tracerMock, mapProv, mapSplitterProv, diff --git a/tests/unit/tilesStorageProvider/fs.spec.ts b/tests/unit/tilesStorageProvider/fs.spec.ts index ded7ab4..6000000 100644 --- a/tests/unit/tilesStorageProvider/fs.spec.ts +++ b/tests/unit/tilesStorageProvider/fs.spec.ts @@ -1,6 +1,6 @@ import * as fs from 'fs'; import * as fsPromises from 'fs/promises'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { FsTilesStorage } from '../../../src/retiler/tilesStorageProvider/fs'; import { FS_FILE_NOT_FOUND_ERROR_CODE } from '../../../src/retiler/tilesStorageProvider/constants'; @@ -12,11 +12,17 @@ jest.mock('@map-colonies/read-pkg', () => ({ }), })); +let logger: Logger; + +beforeAll(async () => { + logger = await jsLogger({ enabled: false }); +}); + describe('FsTilesStorage', () => { let storage: FsTilesStorage; beforeEach(function () { - storage = new FsTilesStorage(jsLogger({ enabled: false }), 'test-path', { format: 'test/{z}/{x}/{y}.png', shouldFlipY: true }); + storage = new FsTilesStorage(logger, 'test-path', { format: 'test/{z}/{x}/{y}.png', shouldFlipY: true }); }); afterEach(function () { diff --git a/tests/unit/tilesStorageProvider/s3.spec.ts b/tests/unit/tilesStorageProvider/s3.spec.ts index 840ae61..59f7f9f 100644 --- a/tests/unit/tilesStorageProvider/s3.spec.ts +++ b/tests/unit/tilesStorageProvider/s3.spec.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/naming-convention */ // due to client-s3 import { S3Client } from '@aws-sdk/client-s3'; -import jsLogger from '@map-colonies/js-logger'; +import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { S3TilesStorage } from '../../../src/retiler/tilesStorageProvider/s3'; // eslint-disable-next-line @typescript-eslint/no-unsafe-return @@ -16,13 +16,19 @@ jest.mock('@aws-sdk/client-s3', () => ({ })), })); +let logger: Logger; + +beforeAll(async () => { + logger = await jsLogger({ enabled: false }); +}); + describe('S3TilesStorage', () => { let storage: S3TilesStorage; let mockedS3Client: jest.Mocked; beforeEach(function () { mockedS3Client = new S3Client({}) as jest.Mocked; - storage = new S3TilesStorage(mockedS3Client, jsLogger({ enabled: false }), 'test-bucket', { format: 'test/{z}/{x}/{y}.png', shouldFlipY: true }); + storage = new S3TilesStorage(mockedS3Client, logger, 'test-bucket', { format: 'test/{z}/{x}/{y}.png', shouldFlipY: true }); }); afterEach(function () { From c6477e63a2145dc3e1243ef685dc2ec5267b0d14 Mon Sep 17 00:00:00 2001 From: Asif Date: Sun, 12 Jul 2026 15:23:19 +0300 Subject: [PATCH 2/5] feat: update-libraries --- .github/workflows/pull_request.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index 63607a7..92b60f7 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -15,7 +15,7 @@ jobs: strategy: matrix: - node: [22.x, 24.x] + node: [24.x] steps: - name: Check out TS Project Git repository @@ -48,11 +48,11 @@ jobs: tests: name: Run Tests runs-on: ubuntu-latest - container: node:22-bullseye + container: node:24-bullseye strategy: matrix: - node: [22.x, 24.x] + node: [24.x] services: # Label used to access the service container From 165a95e647c3e8c94ba036051f450399f28c3028 Mon Sep 17 00:00:00 2001 From: Asif Date: Sun, 12 Jul 2026 15:29:23 +0300 Subject: [PATCH 3/5] feat: update-libraries --- src/app.ts | 10 +++---- src/common/dependencyRegistration.ts | 5 ++-- src/common/metrics.ts | 2 +- src/common/tracing.ts | 3 ++- src/common/tracing/util.ts | 3 ++- src/common/validation.ts | 3 ++- src/containerConfig.ts | 20 ++++++++------ src/retiler/interfaces.ts | 2 +- src/retiler/jobQueueProvider/pgbossFactory.ts | 2 +- src/retiler/mapProvider/wms/requestParams.ts | 4 +-- src/retiler/mapProvider/wms/wmsMapProvider.ts | 1 - src/retiler/tilesStorageProvider/factory.ts | 16 ++++++------ src/retiler/tilesStorageProvider/fs.ts | 16 ++++++------ src/retiler/tilesStorageProvider/s3.ts | 2 +- .../tilesStorageProvider/validation.ts | 4 +-- src/retiler/types.ts | 2 +- src/retiler/util.ts | 3 ++- tests/integration/helpers.ts | 2 +- tests/integration/retiler.spec.ts | 26 ++++++++++--------- tests/unit/jest.d.ts | 2 +- .../jobQueueProvider/pgBossJobQueue.spec.ts | 2 +- .../mapProvider/arcgisMapProvider.spec.ts | 2 +- tests/unit/mapProvider/wmsMapProvider.spec.ts | 4 +-- tests/unit/tileProcessor.spec.ts | 12 ++++----- tests/unit/tilesStorageProvider/fs.spec.ts | 4 +-- 25 files changed, 81 insertions(+), 71 deletions(-) diff --git a/src/app.ts b/src/app.ts index 9fd1166..6a8fad2 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,11 +1,11 @@ -import { Logger } from '@map-colonies/js-logger'; -import { FactoryFunction } from 'tsyringe'; +import type { Logger } from '@map-colonies/js-logger'; +import type { FactoryFunction } from 'tsyringe'; import { JOB_QUEUE_PROVIDER, SERVICES, TILES_STORAGE_PROVIDERS } from './common/constants'; import { timerify } from './common/util'; -import { JobQueueProvider, TilesStorageProvider } from './retiler/interfaces'; +import type { JobQueueProvider, TilesStorageProvider } from './retiler/interfaces'; import { TileProcessor } from './retiler/tileProcessor'; -import { TileWithMetadata } from './retiler/types'; -import { ConfigType } from './common/config'; +import type { TileWithMetadata } from './retiler/types'; +import type { ConfigType } from './common/config'; export const consumeAndProcessFactory: FactoryFunction<() => Promise> = (container) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars -- used for tiles storage providers factory initialization before the tiles processor diff --git a/src/common/dependencyRegistration.ts b/src/common/dependencyRegistration.ts index 15a378e..3aa2d64 100644 --- a/src/common/dependencyRegistration.ts +++ b/src/common/dependencyRegistration.ts @@ -1,5 +1,6 @@ -import { ClassProvider, container as defaultContainer, FactoryProvider, InjectionToken, ValueProvider, RegistrationOptions } from 'tsyringe'; -import { constructor, DependencyContainer } from 'tsyringe/dist/typings/types'; +import type { ClassProvider, FactoryProvider, InjectionToken, ValueProvider, RegistrationOptions } from 'tsyringe'; +import { container as defaultContainer } from 'tsyringe'; +import type { constructor, DependencyContainer } from 'tsyringe/dist/typings/types'; export type Providers = ValueProvider | FactoryProvider | ClassProvider | constructor; diff --git a/src/common/metrics.ts b/src/common/metrics.ts index 2f4431a..d4cd682 100644 --- a/src/common/metrics.ts +++ b/src/common/metrics.ts @@ -1,4 +1,4 @@ -import { Histogram } from 'prom-client'; +import type { Histogram } from 'prom-client'; export const enum ProcessKind { FETCH = 'fetch', diff --git a/src/common/tracing.ts b/src/common/tracing.ts index 53db906..72a8b90 100644 --- a/src/common/tracing.ts +++ b/src/common/tracing.ts @@ -1,4 +1,5 @@ -import { Tracing, TracingOptions } from '@map-colonies/telemetry'; +import type { TracingOptions } from '@map-colonies/telemetry'; +import { Tracing } from '@map-colonies/telemetry'; import { IGNORED_INCOMING_TRACE_ROUTES, IGNORED_OUTGOING_TRACE_ROUTES } from './constants'; let tracing: Tracing | undefined; diff --git a/src/common/tracing/util.ts b/src/common/tracing/util.ts index 56e03ef..c6eddc0 100644 --- a/src/common/tracing/util.ts +++ b/src/common/tracing/util.ts @@ -1,4 +1,5 @@ -import { trace as traceAPI, Attributes, Context, Span, SpanStatusCode } from '@opentelemetry/api'; +import type { Attributes, Context, Span } from '@opentelemetry/api'; +import { trace as traceAPI, SpanStatusCode } from '@opentelemetry/api'; import { SERVICE_NAME } from '../constants'; export const promisifySpan = async (fn: () => Promise, span: Span): Promise => { diff --git a/src/common/validation.ts b/src/common/validation.ts index c450eff..77c9f73 100644 --- a/src/common/validation.ts +++ b/src/common/validation.ts @@ -1,4 +1,5 @@ -import { Ajv, ErrorObject, JSONSchemaType } from 'ajv'; +import type { ErrorObject, JSONSchemaType } from 'ajv'; +import { Ajv } from 'ajv'; const GENERAL_VALIDATION_ERROR = 'invalid content'; diff --git a/src/containerConfig.ts b/src/containerConfig.ts index 60a8bd5..4c3c5c2 100644 --- a/src/containerConfig.ts +++ b/src/containerConfig.ts @@ -1,13 +1,15 @@ -import { DependencyContainer, Lifecycle, instancePerContainerCachingFactory } from 'tsyringe'; -import { jsLogger, Logger } from '@map-colonies/js-logger'; +import type { DependencyContainer } from 'tsyringe'; +import { Lifecycle, instancePerContainerCachingFactory } from 'tsyringe'; +import type { Logger } from '@map-colonies/js-logger'; +import { jsLogger } from '@map-colonies/js-logger'; import { getOtelMixin } from '@map-colonies/telemetry'; -import { HealthCheck } from '@godaddy/terminus'; +import type { HealthCheck } from '@godaddy/terminus'; import axios from 'axios'; import { Registry } from 'prom-client'; import { trace } from '@opentelemetry/api'; import { CleanupRegistry } from '@map-colonies/cleanup-registry'; import { DetilerClient } from '@map-colonies/detiler-client'; -import { PgBoss } from 'pg-boss'; +import type { PgBoss } from 'pg-boss'; import { JOB_QUEUE_PROVIDER, MAP_PROVIDER, @@ -27,9 +29,10 @@ import { ON_SIGNAL, HEALTHCHECK, } from './common/constants'; -import { InjectionObject, registerDependencies } from './common/dependencyRegistration'; +import type { InjectionObject } from './common/dependencyRegistration'; +import { registerDependencies } from './common/dependencyRegistration'; import { getTracing } from './common/tracing'; -import { JobQueueProvider } from './retiler/interfaces'; +import type { JobQueueProvider } from './retiler/interfaces'; import { PgBossJobQueueProvider } from './retiler/jobQueueProvider/pgBossJobQueue'; import { getPgBossHealthCheckFunction, pgBossFactory } from './retiler/jobQueueProvider/pgbossFactory'; import { ArcgisMapProvider } from './retiler/mapProvider/arcgis/arcgisMapProvider'; @@ -37,7 +40,8 @@ import { SharpMapSplitter } from './retiler/mapSplitterProvider/sharp'; import { consumeAndProcessFactory } from './app'; import { WmsMapProvider } from './retiler/mapProvider/wms/wmsMapProvider'; import { tilesStorageProvidersFactory } from './retiler/tilesStorageProvider/factory'; -import { ConfigType, getConfig } from './common/config'; +import type { ConfigType } from './common/config'; +import { getConfig } from './common/config'; export interface RegisterOptions { override?: InjectionObject[]; @@ -56,7 +60,7 @@ export const registerExternalValues = async (options?: RegisterOptions): Promise useFactory: instancePerContainerCachingFactory(async (container) => { const config = container.resolve(SERVICES.CONFIG); const loggerConfig = config.get('telemetry.logger'); - return await jsLogger({ ...loggerConfig, mixin: getOtelMixin() }); + return jsLogger({ ...loggerConfig, mixin: getOtelMixin() }); }), }, postInjectionHook: async (deps: DependencyContainer): Promise => { diff --git a/src/retiler/interfaces.ts b/src/retiler/interfaces.ts index 2bab3ca..4075445 100644 --- a/src/retiler/interfaces.ts +++ b/src/retiler/interfaces.ts @@ -1,4 +1,4 @@ -import { MapSplitResult, TileWithBuffer, TileWithMetadata } from './types'; +import type { MapSplitResult, TileWithBuffer, TileWithMetadata } from './types'; export interface JobQueueProvider { activeQueueName: string; diff --git a/src/retiler/jobQueueProvider/pgbossFactory.ts b/src/retiler/jobQueueProvider/pgbossFactory.ts index fd57974..1f9cde0 100644 --- a/src/retiler/jobQueueProvider/pgbossFactory.ts +++ b/src/retiler/jobQueueProvider/pgbossFactory.ts @@ -1,4 +1,4 @@ -import { readFileSync } from 'fs'; +import { readFileSync } from 'node:fs'; import { PgBoss, type ConstructorOptions } from 'pg-boss'; import { type HealthCheck } from '@godaddy/terminus'; import { type VectorRetilerSchemaType } from '../../common/config'; diff --git a/src/retiler/mapProvider/wms/requestParams.ts b/src/retiler/mapProvider/wms/requestParams.ts index 864604e..5fd3aef 100644 --- a/src/retiler/mapProvider/wms/requestParams.ts +++ b/src/retiler/mapProvider/wms/requestParams.ts @@ -1,5 +1,5 @@ -import { BoundingBox } from '@map-colonies/tile-calc'; -import { WmsVersion } from '../../types'; +import type { BoundingBox } from '@map-colonies/tile-calc'; +import type { WmsVersion } from '../../types'; export interface WmsConfig { version: WmsVersion; diff --git a/src/retiler/mapProvider/wms/wmsMapProvider.ts b/src/retiler/mapProvider/wms/wmsMapProvider.ts index fd502e9..9c8cff0 100644 --- a/src/retiler/mapProvider/wms/wmsMapProvider.ts +++ b/src/retiler/mapProvider/wms/wmsMapProvider.ts @@ -46,7 +46,6 @@ export class WmsMapProvider implements MapProvider { requestConfig ); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const contentType = response.headers['Content-Type'] ?? response.headers['content-type']; const isXml = typeof contentType === 'string' && contentType.toLowerCase().includes('xml'); if (isXml) { diff --git a/src/retiler/tilesStorageProvider/factory.ts b/src/retiler/tilesStorageProvider/factory.ts index e31a3a2..90a2837 100644 --- a/src/retiler/tilesStorageProvider/factory.ts +++ b/src/retiler/tilesStorageProvider/factory.ts @@ -1,14 +1,14 @@ -import { createHash } from 'crypto'; +import { createHash } from 'node:crypto'; import { S3Client } from '@aws-sdk/client-s3'; -import { Logger } from '@map-colonies/js-logger'; -import { FactoryFunction } from 'tsyringe'; -import { CleanupRegistry } from '@map-colonies/cleanup-registry'; -import { HttpRequest } from '@smithy/types'; -import { ConfigType } from '@src/common/config'; +import type { Logger } from '@map-colonies/js-logger'; +import type { FactoryFunction } from 'tsyringe'; +import type { CleanupRegistry } from '@map-colonies/cleanup-registry'; +import type { HttpRequest } from '@smithy/types'; +import type { ConfigType } from '@src/common/config'; import { validate } from '../../common/validation'; import { SERVICES } from '../../common/constants'; -import { TilesStorageProvider } from '../interfaces'; -import { StorageProviderConfig } from './interfaces'; +import type { TilesStorageProvider } from '../interfaces'; +import type { StorageProviderConfig } from './interfaces'; import { S3TilesStorage } from './s3'; import { FsTilesStorage } from './fs'; import { TILES_STORAGE_PROVIDERS_SCHEMA } from './validation'; diff --git a/src/retiler/tilesStorageProvider/fs.ts b/src/retiler/tilesStorageProvider/fs.ts index f001ba4..77db00d 100644 --- a/src/retiler/tilesStorageProvider/fs.ts +++ b/src/retiler/tilesStorageProvider/fs.ts @@ -1,14 +1,14 @@ -import { join, dirname } from 'path'; -import { writeFile, mkdir, unlink } from 'fs/promises'; -import { existsSync } from 'fs'; -import { Logger } from '@map-colonies/js-logger'; -import { Tile } from '@map-colonies/tile-calc'; +import { join, dirname } from 'node:path'; +import { writeFile, mkdir, unlink } from 'node:fs/promises'; +import { existsSync } from 'node:fs'; +import type { Logger } from '@map-colonies/js-logger'; +import type { Tile } from '@map-colonies/tile-calc'; import format from 'string-format'; import { timerify } from '../../common/util'; -import { TilesStorageProvider } from '../interfaces'; -import { TileWithBuffer, TileWithMetadata } from '../types'; +import type { TilesStorageProvider } from '../interfaces'; +import type { TileWithBuffer, TileWithMetadata } from '../types'; import { getFlippedY } from '../util'; -import { TileStoragLayout } from './interfaces'; +import type { TileStoragLayout } from './interfaces'; import { FS_FILE_NOT_FOUND_ERROR_CODE } from './constants'; export class FsTilesStorage implements TilesStorageProvider { diff --git a/src/retiler/tilesStorageProvider/s3.ts b/src/retiler/tilesStorageProvider/s3.ts index be04d33..e0c5504 100644 --- a/src/retiler/tilesStorageProvider/s3.ts +++ b/src/retiler/tilesStorageProvider/s3.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ // s3-client object commands arguments -import crypto from 'crypto'; +import crypto from 'node:crypto'; import { DeleteObjectsCommand, ObjectIdentifier, PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; import { EndpointV2 } from '@smithy/types'; import { type Logger } from '@map-colonies/js-logger'; diff --git a/src/retiler/tilesStorageProvider/validation.ts b/src/retiler/tilesStorageProvider/validation.ts index 596ea0c..ce87dfa 100644 --- a/src/retiler/tilesStorageProvider/validation.ts +++ b/src/retiler/tilesStorageProvider/validation.ts @@ -1,5 +1,5 @@ -import { JSONSchemaType } from 'ajv'; -import { StorageProviderConfig } from './interfaces'; +import type { JSONSchemaType } from 'ajv'; +import type { StorageProviderConfig } from './interfaces'; export const TILES_STORAGE_PROVIDERS_SCHEMA: JSONSchemaType = { type: 'array', diff --git a/src/retiler/types.ts b/src/retiler/types.ts index 1f97f5e..b7d6b15 100644 --- a/src/retiler/types.ts +++ b/src/retiler/types.ts @@ -1,4 +1,4 @@ -import { Tile } from '@map-colonies/tile-calc'; +import type { Tile } from '@map-colonies/tile-calc'; export interface TileMetadata { parent: string; diff --git a/src/retiler/util.ts b/src/retiler/util.ts index 355481c..fe95966 100644 --- a/src/retiler/util.ts +++ b/src/retiler/util.ts @@ -1,4 +1,5 @@ -import { Tile, validateTile, TILEGRID_WORLD_CRS84, SCALE_FACTOR } from '@map-colonies/tile-calc'; +import type { Tile } from '@map-colonies/tile-calc'; +import { validateTile, TILEGRID_WORLD_CRS84, SCALE_FACTOR } from '@map-colonies/tile-calc'; export const isTileInBounds = (tile: Tile): boolean => { try { diff --git a/tests/integration/helpers.ts b/tests/integration/helpers.ts index fdaf6e0..13a23aa 100644 --- a/tests/integration/helpers.ts +++ b/tests/integration/helpers.ts @@ -1,5 +1,5 @@ import { setInterval as setIntervalPromise } from 'node:timers/promises'; -import { PgBoss, type JobWithMetadata } from 'pg-boss'; +import type { PgBoss, type JobWithMetadata } from 'pg-boss'; import sharp from 'sharp'; const WAIT_FOR_JOB_INTERVAL_MS = 10; diff --git a/tests/integration/retiler.spec.ts b/tests/integration/retiler.spec.ts index f8600c6..52e2e0e 100644 --- a/tests/integration/retiler.spec.ts +++ b/tests/integration/retiler.spec.ts @@ -1,18 +1,20 @@ /* eslint-disable @typescript-eslint/naming-convention */ -import * as fsPromises from 'fs/promises'; +import * as fsPromises from 'node:fs/promises'; import { setTimeout as setTimeoutPromise } from 'node:timers/promises'; import { Registry } from 'prom-client'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { trace } from '@opentelemetry/api'; -import { DependencyContainer } from 'tsyringe'; -import { PgBoss } from 'pg-boss'; -import nock, { Interceptor, Scope } from 'nock'; -import { Tile } from '@map-colonies/tile-calc'; +import type { DependencyContainer } from 'tsyringe'; +import type { PgBoss } from 'pg-boss'; +import type { Interceptor, Scope } from 'nock'; +import nock from 'nock'; +import type { Tile } from '@map-colonies/tile-calc'; import format from 'string-format'; import httpStatusCodes from 'http-status-codes'; -import { CleanupRegistry } from '@map-colonies/cleanup-registry'; +import type { CleanupRegistry } from '@map-colonies/cleanup-registry'; import sharp from 'sharp'; -import { ConfigType, getConfig, initConfig } from '@src/common/config'; +import type { ConfigType } from '@src/common/config'; +import { getConfig, initConfig } from '@src/common/config'; import { registerExternalValues } from '../../src/containerConfig'; import { consumeAndProcessFactory } from '../../src/app'; @@ -25,10 +27,10 @@ import { TILES_STORAGE_LAYOUT, TILES_STORAGE_PROVIDERS, } from '../../src/common/constants'; -import { PgBossJobQueueProvider } from '../../src/retiler/jobQueueProvider/pgBossJobQueue'; -import { TilesStorageProvider } from '../../src/retiler/interfaces'; +import type { PgBossJobQueueProvider } from '../../src/retiler/jobQueueProvider/pgBossJobQueue'; +import type { TilesStorageProvider } from '../../src/retiler/interfaces'; import { getFlippedY } from '../../src/retiler/util'; -import { TileStoragLayout } from '../../src/retiler/tilesStorageProvider/interfaces'; +import type { TileStoragLayout } from '../../src/retiler/tilesStorageProvider/interfaces'; import { FS_FILE_NOT_FOUND_ERROR_CODE } from '../../src/retiler/tilesStorageProvider/constants'; import { createBlankBuffer, LONG_RUNNING_TEST, waitForJobToBeResolved } from './helpers'; @@ -64,9 +66,9 @@ jest.mock('@aws-sdk/client-s3', () => ({ endpointProvider: jest.fn().mockReturnValue('test-endpoint'), }, })), - // eslint-disable-next-line @typescript-eslint/no-unsafe-return + PutObjectCommand: jest.fn().mockImplementation((input: unknown) => input), - // eslint-disable-next-line @typescript-eslint/no-unsafe-return + DeleteObjectsCommand: jest.fn().mockImplementation((input: unknown) => input), })); diff --git a/tests/unit/jest.d.ts b/tests/unit/jest.d.ts index 002ccdd..a2f3ef5 100644 --- a/tests/unit/jest.d.ts +++ b/tests/unit/jest.d.ts @@ -1,4 +1,4 @@ -import { Tile } from '@map-colonies/tile-calc'; +import type { Tile } from '@map-colonies/tile-calc'; declare global { namespace jest { diff --git a/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts b/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts index eeecacd..9860d70 100644 --- a/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts +++ b/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts @@ -1,7 +1,7 @@ import { setTimeout as setTimeoutPromise } from 'node:timers/promises'; import { Registry } from 'prom-client'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; -import { PgBoss } from 'pg-boss'; +import type { PgBoss } from 'pg-boss'; import { serializeError } from 'serialize-error'; import { type Tracer } from '@opentelemetry/api'; import { PgBossJobQueueProvider } from '../../../src/retiler/jobQueueProvider/pgBossJobQueue'; diff --git a/tests/unit/mapProvider/arcgisMapProvider.spec.ts b/tests/unit/mapProvider/arcgisMapProvider.spec.ts index 3fdc9f4..5e345c0 100644 --- a/tests/unit/mapProvider/arcgisMapProvider.spec.ts +++ b/tests/unit/mapProvider/arcgisMapProvider.spec.ts @@ -1,4 +1,4 @@ -import { AxiosError, AxiosInstance } from 'axios'; +import type { AxiosError, AxiosInstance } from 'axios'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { ArcgisMapProvider } from '../../../src/retiler/mapProvider/arcgis/arcgisMapProvider'; diff --git a/tests/unit/mapProvider/wmsMapProvider.spec.ts b/tests/unit/mapProvider/wmsMapProvider.spec.ts index 2ab66e0..855bad8 100644 --- a/tests/unit/mapProvider/wmsMapProvider.spec.ts +++ b/tests/unit/mapProvider/wmsMapProvider.spec.ts @@ -1,7 +1,7 @@ -import { AxiosError, AxiosInstance } from 'axios'; +import type { AxiosError, AxiosInstance } from 'axios'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { WmsMapProvider } from '../../../src/retiler/mapProvider/wms/wmsMapProvider'; -import { WmsConfig, WmsRequestParams } from '../../../src/retiler/mapProvider/wms/requestParams'; +import type { WmsConfig, WmsRequestParams } from '../../../src/retiler/mapProvider/wms/requestParams'; jest.mock('axios'); diff --git a/tests/unit/tileProcessor.spec.ts b/tests/unit/tileProcessor.spec.ts index a24317f..d8eb051 100644 --- a/tests/unit/tileProcessor.spec.ts +++ b/tests/unit/tileProcessor.spec.ts @@ -1,15 +1,15 @@ -import { readFile } from 'fs/promises'; +import { readFile } from 'node:fs/promises'; import { Tracer } from '@opentelemetry/api'; -import { IDetilerClient } from '@map-colonies/detiler-client'; +import type { IDetilerClient } from '@map-colonies/detiler-client'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; -import { AxiosInstance } from 'axios'; +import type { AxiosInstance } from 'axios'; import { Registry } from 'prom-client'; -import { ConfigType } from '../../src/common/config'; -import { MapProvider, MapSplitterProvider, TilesStorageProvider } from '../../src/retiler/interfaces'; +import type { ConfigType } from '../../src/common/config'; +import type { MapProvider, MapSplitterProvider, TilesStorageProvider } from '../../src/retiler/interfaces'; import { TileProcessor } from '../../src/retiler/tileProcessor'; import { timestampToUnix } from '../../src/common/util'; import { MILLISECONDS_IN_SECOND } from '../../src/common/constants'; -import { MapSplitResult } from '../../src/retiler/types'; +import type { MapSplitResult } from '../../src/retiler/types'; import { createBlankBuffer } from '../integration/helpers'; const REMOTE_STATE_TIMESTAMP = '2024-01-15T21:20:36Z'; diff --git a/tests/unit/tilesStorageProvider/fs.spec.ts b/tests/unit/tilesStorageProvider/fs.spec.ts index 6000000..e6bcb75 100644 --- a/tests/unit/tilesStorageProvider/fs.spec.ts +++ b/tests/unit/tilesStorageProvider/fs.spec.ts @@ -1,5 +1,5 @@ -import * as fs from 'fs'; -import * as fsPromises from 'fs/promises'; +import * as fs from 'node:fs'; +import * as fsPromises from 'node:fs/promises'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { FsTilesStorage } from '../../../src/retiler/tilesStorageProvider/fs'; import { FS_FILE_NOT_FOUND_ERROR_CODE } from '../../../src/retiler/tilesStorageProvider/constants'; From 07ba85b08691b420433aba544087b2a1d91d15b5 Mon Sep 17 00:00:00 2001 From: Asif Date: Sun, 12 Jul 2026 16:20:22 +0300 Subject: [PATCH 4/5] feat: update-libraries --- src/retiler/tileProcessor.ts | 4 ++-- tests/integration/helpers.ts | 2 +- tests/integration/retiler.spec.ts | 8 ++++---- tests/unit/jest.d.ts | 2 +- tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts | 1 - tests/unit/mapSplitterProvider/sharp.spec.ts | 4 ++-- tests/unit/tileProcessor.spec.ts | 1 - tests/unit/tilesStorageProvider/fs.spec.ts | 4 ++-- 8 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/retiler/tileProcessor.ts b/src/retiler/tileProcessor.ts index 5448a4a..134deb5 100644 --- a/src/retiler/tileProcessor.ts +++ b/src/retiler/tileProcessor.ts @@ -335,7 +335,7 @@ export class TileProcessor { return result; } catch (error) { - this.logger.error({ msg: 'an error occurred while pre processing, tile will be processed', error }); + this.logger.error({ msg: 'an error occurred while pre processing, tile will be processed', err: error }); result = { shouldSkipProcessing: false, reason: ProcessReason.ERROR_OCCURRED }; @@ -362,7 +362,7 @@ export class TileProcessor { { status: 'rendered', state: tile.state, timestamp } ); } catch (error) { - this.logger.error({ msg: 'an error occurred while post processing, skipping details set', error }); + this.logger.error({ msg: 'an error occurred while post processing, skipping details set', err: error }); if (!this.detilerProceedOnFailure) { throw error; } diff --git a/tests/integration/helpers.ts b/tests/integration/helpers.ts index 13a23aa..520e382 100644 --- a/tests/integration/helpers.ts +++ b/tests/integration/helpers.ts @@ -1,5 +1,5 @@ import { setInterval as setIntervalPromise } from 'node:timers/promises'; -import type { PgBoss, type JobWithMetadata } from 'pg-boss'; +import type { PgBoss, JobWithMetadata } from 'pg-boss'; import sharp from 'sharp'; const WAIT_FOR_JOB_INTERVAL_MS = 10; diff --git a/tests/integration/retiler.spec.ts b/tests/integration/retiler.spec.ts index 52e2e0e..b9a4760 100644 --- a/tests/integration/retiler.spec.ts +++ b/tests/integration/retiler.spec.ts @@ -7,7 +7,7 @@ import { trace } from '@opentelemetry/api'; import type { DependencyContainer } from 'tsyringe'; import type { PgBoss } from 'pg-boss'; import type { Interceptor, Scope } from 'nock'; -import nock from 'nock'; +import nock, { cleanAll } from 'nock'; import type { Tile } from '@map-colonies/tile-calc'; import format from 'string-format'; import httpStatusCodes from 'http-status-codes'; @@ -48,8 +48,8 @@ const cleanupQueue = async (pgBoss: PgBoss, queueName: string): Promise => await pgBoss.stop({ graceful: false }); }; -jest.mock('fs/promises', () => ({ - ...jest.requireActual>('fs/promises'), +jest.mock('node:fs/promises', () => ({ + ...jest.requireActual>('node:fs/promises'), writeFile: jest.fn(), unlink: jest.fn(), })); @@ -111,7 +111,7 @@ describe('retiler', function () { }); afterEach(function () { - nock.cleanAll(); + cleanAll(); jest.clearAllMocks(); s3SendMock.mockResolvedValue({}); (fsPromises.writeFile as unknown as jest.Mock).mockResolvedValue(undefined); diff --git a/tests/unit/jest.d.ts b/tests/unit/jest.d.ts index a2f3ef5..e889cda 100644 --- a/tests/unit/jest.d.ts +++ b/tests/unit/jest.d.ts @@ -3,7 +3,7 @@ import type { Tile } from '@map-colonies/tile-calc'; declare global { namespace jest { interface Matchers { - toContainSameTiles: (expectedTiles: Tile[]) => CustomMatcherResult; + toContainSameTiles: (expectedTiles: Tile[]) => R; } } } diff --git a/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts b/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts index 9860d70..8cc1e6c 100644 --- a/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts +++ b/tests/unit/jobQueueProvider/pgBossJobQueue.spec.ts @@ -3,7 +3,6 @@ import { Registry } from 'prom-client'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; import type { PgBoss } from 'pg-boss'; import { serializeError } from 'serialize-error'; -import { type Tracer } from '@opentelemetry/api'; import { PgBossJobQueueProvider } from '../../../src/retiler/jobQueueProvider/pgBossJobQueue'; import { LONG_RUNNING_TEST } from '../../integration/helpers'; diff --git a/tests/unit/mapSplitterProvider/sharp.spec.ts b/tests/unit/mapSplitterProvider/sharp.spec.ts index 9787e1e..93d319f 100644 --- a/tests/unit/mapSplitterProvider/sharp.spec.ts +++ b/tests/unit/mapSplitterProvider/sharp.spec.ts @@ -1,8 +1,8 @@ -import { readFile } from 'fs/promises'; +import { readFile } from 'node:fs/promises'; import sharp from 'sharp'; import { faker } from '@faker-js/faker'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; -import { Tile } from '@map-colonies/tile-calc'; +import type { Tile } from '@map-colonies/tile-calc'; import { SharpMapSplitter } from '../../../src/retiler/mapSplitterProvider/sharp'; import { createBlankBuffer } from '../../integration/helpers'; diff --git a/tests/unit/tileProcessor.spec.ts b/tests/unit/tileProcessor.spec.ts index d8eb051..4bdff4c 100644 --- a/tests/unit/tileProcessor.spec.ts +++ b/tests/unit/tileProcessor.spec.ts @@ -1,5 +1,4 @@ import { readFile } from 'node:fs/promises'; -import { Tracer } from '@opentelemetry/api'; import type { IDetilerClient } from '@map-colonies/detiler-client'; import { jsLogger, type Logger } from '@map-colonies/js-logger'; import type { AxiosInstance } from 'axios'; diff --git a/tests/unit/tilesStorageProvider/fs.spec.ts b/tests/unit/tilesStorageProvider/fs.spec.ts index e6bcb75..cd5a66c 100644 --- a/tests/unit/tilesStorageProvider/fs.spec.ts +++ b/tests/unit/tilesStorageProvider/fs.spec.ts @@ -4,8 +4,8 @@ import { jsLogger, type Logger } from '@map-colonies/js-logger'; import { FsTilesStorage } from '../../../src/retiler/tilesStorageProvider/fs'; import { FS_FILE_NOT_FOUND_ERROR_CODE } from '../../../src/retiler/tilesStorageProvider/constants'; -jest.mock('fs'); -jest.mock('fs/promises'); +jest.mock('node:fs'); +jest.mock('node:fs/promises'); jest.mock('@map-colonies/read-pkg', () => ({ readPackageJsonSync: jest.fn().mockImplementation(() => { return { name: 'retiler_test' }; From ca80a1e203edd39046d82e0feaf35dbdd149e6c5 Mon Sep 17 00:00:00 2001 From: Asif Date: Sun, 12 Jul 2026 17:14:27 +0300 Subject: [PATCH 5/5] feat: update-libraries --- src/retiler/tilesStorageProvider/factory.ts | 7 ++----- tests/unit/jest.d.ts | 3 ++- tests/unit/tilesStorageProvider/fs.spec.ts | 5 +---- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/retiler/tilesStorageProvider/factory.ts b/src/retiler/tilesStorageProvider/factory.ts index 90a2837..d0c724f 100644 --- a/src/retiler/tilesStorageProvider/factory.ts +++ b/src/retiler/tilesStorageProvider/factory.ts @@ -5,13 +5,11 @@ import type { FactoryFunction } from 'tsyringe'; import type { CleanupRegistry } from '@map-colonies/cleanup-registry'; import type { HttpRequest } from '@smithy/types'; import type { ConfigType } from '@src/common/config'; -import { validate } from '../../common/validation'; import { SERVICES } from '../../common/constants'; import type { TilesStorageProvider } from '../interfaces'; import type { StorageProviderConfig } from './interfaces'; import { S3TilesStorage } from './s3'; import { FsTilesStorage } from './fs'; -import { TILES_STORAGE_PROVIDERS_SCHEMA } from './validation'; interface Args { request: HttpRequest; @@ -24,9 +22,8 @@ export const tilesStorageProvidersFactory: FactoryFunction(storageProvidersConfig, TILES_STORAGE_PROVIDERS_SCHEMA); - if (!isValid) { - throw new Error(`invalid tiles storage providers configuration: ${JSON.stringify(errors)}`); + if (storageProvidersConfig.length === 0) { + throw new Error('invalid tiles storage providers configuration: at least one provider is required'); } const s3ClientsMap = new Map(); diff --git a/tests/unit/jest.d.ts b/tests/unit/jest.d.ts index e889cda..a409230 100644 --- a/tests/unit/jest.d.ts +++ b/tests/unit/jest.d.ts @@ -2,8 +2,9 @@ import type { Tile } from '@map-colonies/tile-calc'; declare global { namespace jest { + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface Matchers { - toContainSameTiles: (expectedTiles: Tile[]) => R; + toContainSameTiles: (expectedTiles: Tile[]) => CustomMatcherResult; } } } diff --git a/tests/unit/tilesStorageProvider/fs.spec.ts b/tests/unit/tilesStorageProvider/fs.spec.ts index cd5a66c..5b0c1d2 100644 --- a/tests/unit/tilesStorageProvider/fs.spec.ts +++ b/tests/unit/tilesStorageProvider/fs.spec.ts @@ -22,11 +22,8 @@ describe('FsTilesStorage', () => { let storage: FsTilesStorage; beforeEach(function () { - storage = new FsTilesStorage(logger, 'test-path', { format: 'test/{z}/{x}/{y}.png', shouldFlipY: true }); - }); - - afterEach(function () { jest.clearAllMocks(); + storage = new FsTilesStorage(logger, 'test-path', { format: 'test/{z}/{x}/{y}.png', shouldFlipY: true }); }); describe('#storeTile', () => {