diff --git a/.githooks/post-receive b/.githooks/post-receive index c8b54d2..d252a2a 100644 --- a/.githooks/post-receive +++ b/.githooks/post-receive @@ -285,8 +285,8 @@ branch="$1" pidfile="$2" logfile="$3" - echo "Running npm tests..." - if ! npm run test:postreceive; then + echo "Running yarn tests..." + if ! yarn test:postreceive; then kill "$(cat "$pidfile")" 2>/dev/null || true echo "Tests failed for branch '$branch'. Application logs from $logfile:" cat "$logfile" diff --git a/.githooks/pre-push copy b/.githooks/pre-push copy index 93153bc..99c00f3 100755 --- a/.githooks/pre-push copy +++ b/.githooks/pre-push copy @@ -14,7 +14,7 @@ sleep 2 -npm run test:prepush +yarn test:prepush TEST_RESULT=$? # Clean up the app process diff --git a/.githooks/pre-receive b/.githooks/pre-receive index 3413108..98ebe5b 100644 --- a/.githooks/pre-receive +++ b/.githooks/pre-receive @@ -139,7 +139,7 @@ pidfile="$2" logfile="$3" echo "Running npm tests..." - if ! npm run test:postreceive; then + if ! yarn test:postreceive; then kill "$(cat "$pidfile")" 2>/dev/null || true echo "Tests failed for branch '$branch'. Application logs from $logfile:" cat "$logfile" diff --git a/.pnp.cjs b/.pnp.cjs index d3faaf2..c94a7f8 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -45,16 +45,18 @@ ["fast-check", "npm:4.2.0"],\ ["fast-glob", "npm:3.3.3"],\ ["gray-matter", "npm:4.0.3"],\ + ["handlebars", "npm:4.7.8"],\ ["hbs", "npm:4.2.0"],\ ["helmet", "npm:8.1.0"],\ ["hpp", "npm:0.2.3"],\ ["js-beautify", "npm:1.15.4"],\ + ["js-yaml", "npm:4.1.0"],\ ["marked", "npm:15.0.11"],\ ["mocha", "npm:11.7.1"],\ - ["mock-fs", "npm:4.13.0"],\ + ["mock-fs", "npm:5.5.0"],\ ["morgan", "npm:1.10.0"],\ ["node-disk-info", "npm:1.3.0"],\ - ["node-fetch", "virtual:8e0a8f128776701faaebe7b201c5fc4a913f6d92a7fb4ce8d119211b8f9b1bdf28acba8bab57899eed398942941fff50583fd7c886bd5f3fa0632c78fcbad2e3#npm:2.7.0"],\ + ["node-fetch", "npm:3.3.2"],\ ["nodemailer", "npm:7.0.3"],\ ["nodemon", "npm:3.1.10"],\ ["path", "npm:0.12.7"],\ @@ -1926,6 +1928,13 @@ }]\ ]],\ ["data-uri-to-buffer", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-10c0.zip/node_modules/data-uri-to-buffer/",\ + "packageDependencies": [\ + ["data-uri-to-buffer", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:6.0.2", {\ "packageLocation": "../../../../home/me/.yarn/berry/cache/data-uri-to-buffer-npm-6.0.2-1725fff558-10c0.zip/node_modules/data-uri-to-buffer/",\ "packageDependencies": [\ @@ -2551,16 +2560,18 @@ ["fast-check", "npm:4.2.0"],\ ["fast-glob", "npm:3.3.3"],\ ["gray-matter", "npm:4.0.3"],\ + ["handlebars", "npm:4.7.8"],\ ["hbs", "npm:4.2.0"],\ ["helmet", "npm:8.1.0"],\ ["hpp", "npm:0.2.3"],\ ["js-beautify", "npm:1.15.4"],\ + ["js-yaml", "npm:4.1.0"],\ ["marked", "npm:15.0.11"],\ ["mocha", "npm:11.7.1"],\ - ["mock-fs", "npm:4.13.0"],\ + ["mock-fs", "npm:5.5.0"],\ ["morgan", "npm:1.10.0"],\ ["node-disk-info", "npm:1.3.0"],\ - ["node-fetch", "virtual:8e0a8f128776701faaebe7b201c5fc4a913f6d92a7fb4ce8d119211b8f9b1bdf28acba8bab57899eed398942941fff50583fd7c886bd5f3fa0632c78fcbad2e3#npm:2.7.0"],\ + ["node-fetch", "npm:3.3.2"],\ ["nodemailer", "npm:7.0.3"],\ ["nodemon", "npm:3.1.10"],\ ["path", "npm:0.12.7"],\ @@ -2790,6 +2801,17 @@ "linkType": "HARD"\ }]\ ]],\ + ["fetch-blob", [\ + ["npm:3.2.0", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/fetch-blob-npm-3.2.0-28e01becfc-10c0.zip/node_modules/fetch-blob/",\ + "packageDependencies": [\ + ["fetch-blob", "npm:3.2.0"],\ + ["node-domexception", "npm:1.0.0"],\ + ["web-streams-polyfill", "npm:3.3.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["file-stream-rotator", [\ ["npm:0.6.1", {\ "packageLocation": "../../../../home/me/.yarn/berry/cache/file-stream-rotator-npm-0.6.1-eab45fb13d-10c0.zip/node_modules/file-stream-rotator/",\ @@ -2946,6 +2968,16 @@ "linkType": "HARD"\ }]\ ]],\ + ["formdata-polyfill", [\ + ["npm:4.0.10", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/formdata-polyfill-npm-4.0.10-e03013c013-10c0.zip/node_modules/formdata-polyfill/",\ + "packageDependencies": [\ + ["fetch-blob", "npm:3.2.0"],\ + ["formdata-polyfill", "npm:4.0.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["forwarded", [\ ["npm:0.2.0", {\ "packageLocation": "../../../../home/me/.yarn/berry/cache/forwarded-npm-0.2.0-6473dabe35-10c0.zip/node_modules/forwarded/",\ @@ -4565,10 +4597,10 @@ }]\ ]],\ ["mock-fs", [\ - ["npm:4.13.0", {\ - "packageLocation": "../../../../home/me/.yarn/berry/cache/mock-fs-npm-4.13.0-480cec1336-10c0.zip/node_modules/mock-fs/",\ + ["npm:5.5.0", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/mock-fs-npm-5.5.0-27a1e1067e-10c0.zip/node_modules/mock-fs/",\ "packageDependencies": [\ - ["mock-fs", "npm:4.13.0"]\ + ["mock-fs", "npm:5.5.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -4733,25 +4765,23 @@ "linkType": "HARD"\ }]\ ]],\ + ["node-domexception", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/node-domexception-npm-1.0.0-e1e813b76f-10c0.zip/node_modules/node-domexception/",\ + "packageDependencies": [\ + ["node-domexception", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["node-fetch", [\ - ["npm:2.7.0", {\ - "packageLocation": "../../../../home/me/.yarn/berry/cache/node-fetch-npm-2.7.0-587d57004e-10c0.zip/node_modules/node-fetch/",\ + ["npm:3.3.2", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/node-fetch-npm-3.3.2-5267e015f2-10c0.zip/node_modules/node-fetch/",\ "packageDependencies": [\ - ["node-fetch", "npm:2.7.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:8e0a8f128776701faaebe7b201c5fc4a913f6d92a7fb4ce8d119211b8f9b1bdf28acba8bab57899eed398942941fff50583fd7c886bd5f3fa0632c78fcbad2e3#npm:2.7.0", {\ - "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-513904ecbf/5/home/me/.yarn/berry/cache/node-fetch-npm-2.7.0-587d57004e-10c0.zip/node_modules/node-fetch/",\ - "packageDependencies": [\ - ["@types/encoding", null],\ - ["encoding", null],\ - ["node-fetch", "virtual:8e0a8f128776701faaebe7b201c5fc4a913f6d92a7fb4ce8d119211b8f9b1bdf28acba8bab57899eed398942941fff50583fd7c886bd5f3fa0632c78fcbad2e3#npm:2.7.0"],\ - ["whatwg-url", "npm:5.0.0"]\ - ],\ - "packagePeers": [\ - "@types/encoding",\ - "encoding"\ + ["data-uri-to-buffer", "npm:4.0.1"],\ + ["fetch-blob", "npm:3.2.0"],\ + ["formdata-polyfill", "npm:4.0.10"],\ + ["node-fetch", "npm:3.3.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -6850,15 +6880,6 @@ "linkType": "HARD"\ }]\ ]],\ - ["tr46", [\ - ["npm:0.0.3", {\ - "packageLocation": "../../../../home/me/.yarn/berry/cache/tr46-npm-0.0.3-de53018915-10c0.zip/node_modules/tr46/",\ - "packageDependencies": [\ - ["tr46", "npm:0.0.3"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["triple-beam", [\ ["npm:1.4.1", {\ "packageLocation": "../../../../home/me/.yarn/berry/cache/triple-beam-npm-1.4.1-d21ba5346a-10c0.zip/node_modules/triple-beam/",\ @@ -7160,22 +7181,11 @@ "linkType": "HARD"\ }]\ ]],\ - ["webidl-conversions", [\ - ["npm:3.0.1", {\ - "packageLocation": "../../../../home/me/.yarn/berry/cache/webidl-conversions-npm-3.0.1-60310f6a2b-10c0.zip/node_modules/webidl-conversions/",\ + ["web-streams-polyfill", [\ + ["npm:3.3.3", {\ + "packageLocation": "../../../../home/me/.yarn/berry/cache/web-streams-polyfill-npm-3.3.3-f24b9f8c34-10c0.zip/node_modules/web-streams-polyfill/",\ "packageDependencies": [\ - ["webidl-conversions", "npm:3.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["whatwg-url", [\ - ["npm:5.0.0", {\ - "packageLocation": "../../../../home/me/.yarn/berry/cache/whatwg-url-npm-5.0.0-374fb45e60-10c0.zip/node_modules/whatwg-url/",\ - "packageDependencies": [\ - ["tr46", "npm:0.0.3"],\ - ["webidl-conversions", "npm:3.0.1"],\ - ["whatwg-url", "npm:5.0.0"]\ + ["web-streams-polyfill", "npm:3.3.3"]\ ],\ "linkType": "HARD"\ }]\ diff --git a/package.json b/package.json index 323acf9..1b2828d 100644 --- a/package.json +++ b/package.json @@ -38,10 +38,12 @@ "express-rate-limit": "^7.5.0", "fast-glob": "^3.3.3", "gray-matter": "^4.0.3", + "handlebars": "^4.7.8", "hbs": "^4.2.0", "helmet": "^8.1.0", "hpp": "^0.2.3", "js-beautify": "^1.15.4", + "js-yaml": "^4.1.0", "marked": "^15.0.11", "morgan": "^1.10.0", "node-disk-info": "^1.3.0", @@ -67,8 +69,8 @@ "chai-as-promised": "^8.0.1", "fast-check": "^4.2.0", "mocha": "^11.7.1", - "mock-fs": "4.13.0", - "node-fetch": "^2.7.0", + "mock-fs": "^5.5.0", + "node-fetch": "^3.3.2", "pm2": "^6.0.6", "postcss": "^8.5.6", "postcss-import": "^16.1.1", diff --git a/scripts/pre-push-tests.sh b/scripts/pre-push-tests.sh index e0155c2..56a4579 100755 --- a/scripts/pre-push-tests.sh +++ b/scripts/pre-push-tests.sh @@ -24,7 +24,7 @@ sleep 2 -npm run test:prepush +yarn test:prepush TEST_RESULT=$? # Clean up the app process diff --git a/test/routes.test.js b/test/routes.test.js index 7ed8826..ee3fd93 100644 --- a/test/routes.test.js +++ b/test/routes.test.js @@ -1,5 +1,5 @@ // test/routes.test.js -const fetch = require("node-fetch"); +const fetch = require("node-fetch").default; const { expect } = require("chai"); const http = require("http"); const https = require("https"); diff --git a/yarn.lock b/yarn.lock index 170c90d..3ca56be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1612,6 +1612,13 @@ languageName: node linkType: hard +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + "data-uri-to-buffer@npm:^6.0.2": version: 6.0.2 resolution: "data-uri-to-buffer@npm:6.0.2" @@ -2061,16 +2068,18 @@ fast-check: "npm:^4.2.0" fast-glob: "npm:^3.3.3" gray-matter: "npm:^4.0.3" + handlebars: "npm:^4.7.8" hbs: "npm:^4.2.0" helmet: "npm:^8.1.0" hpp: "npm:^0.2.3" js-beautify: "npm:^1.15.4" + js-yaml: "npm:^4.1.0" marked: "npm:^15.0.11" mocha: "npm:^11.7.1" - mock-fs: "npm:4.13.0" + mock-fs: "npm:^5.5.0" morgan: "npm:^1.10.0" node-disk-info: "npm:^1.3.0" - node-fetch: "npm:^2.7.0" + node-fetch: "npm:^3.3.2" nodemailer: "npm:^7.0.3" nodemon: "npm:^3.1.10" path: "npm:^0.12.7" @@ -2292,6 +2301,16 @@ languageName: node linkType: hard +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + "file-stream-rotator@npm:^0.6.1": version: 0.6.1 resolution: "file-stream-rotator@npm:0.6.1" @@ -2419,6 +2438,15 @@ languageName: node linkType: hard +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -3912,10 +3940,10 @@ languageName: node linkType: hard -"mock-fs@npm:4.13.0": - version: 4.13.0 - resolution: "mock-fs@npm:4.13.0" - checksum: 10c0/1efe7c65bf48afeb7d0455ff091e81e7b06c43100f161ce1c420d4328f75215bc4aad450a29978a9b41695f51f3c326df4288a105a54b2608df31ebdc3791d3e +"mock-fs@npm:^5.5.0": + version: 5.5.0 + resolution: "mock-fs@npm:5.5.0" + checksum: 10c0/56539c9ab1d29b72c4b3b54f003808c7c51e5c82454a80fc46fd811f40401652da32412bbf26daa4eabff0e44a08eeafbeb6c885c60c1111b5429a4279efbda4 languageName: node linkType: hard @@ -4058,17 +4086,21 @@ languageName: node linkType: hard -"node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 languageName: node linkType: hard @@ -6031,13 +6063,6 @@ languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - "triple-beam@npm:^1.3.0, triple-beam@npm:^1.4.1": version: 1.4.1 resolution: "triple-beam@npm:1.4.1" @@ -6304,20 +6329,10 @@ languageName: node linkType: hard -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f languageName: node linkType: hard