diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d1a48bf91..67f5f05956 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -238,7 +238,7 @@ jobs: POSTGRES_IMAGE: postgis/postgis:15-3.4 NODE_VERSION: 22.4.1 - name: PostgreSQL 16, PostGIS 3.4 - POSTGRES_IMAGE: postgis/postgis:15-3.4 + POSTGRES_IMAGE: postgis/postgis:16-3.4 NODE_VERSION: 22.4.1 fail-fast: false name: ${{ matrix.name }} diff --git a/package-lock.json b/package-lock.json index 85d4639dbf..325724b6b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,8 +42,8 @@ "otpauth": "9.2.2", "parse": "5.3.0", "path-to-regexp": "6.2.1", - "pg-monitor": "2.0.0", - "pg-promise": "11.7.8", + "pg-monitor": "2.1.0", + "pg-promise": "11.9.1", "pluralize": "8.0.0", "punycode": "2.3.1", "rate-limit-redis": "4.2.0", @@ -7057,6 +7057,21 @@ "node": ">=6" } }, + "node_modules/cli-color": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.64", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -7692,19 +7707,17 @@ } }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/d/node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -8568,9 +8581,9 @@ } }, "node_modules/es5-ext": { - "version": "0.10.63", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.63.tgz", - "integrity": "sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", @@ -8599,12 +8612,26 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, "node_modules/escalade": { @@ -12905,6 +12932,24 @@ "node": ">= 0.6" } }, + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "dependencies": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -17101,9 +17146,9 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/pg": { - "version": "8.11.5", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.5.tgz", - "integrity": "sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", "dependencies": { "pg-connection-string": "^2.6.4", "pg-pool": "^3.6.2", @@ -17146,65 +17191,24 @@ } }, "node_modules/pg-minify": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-1.6.4.tgz", - "integrity": "sha512-cf6hBt1YqzqPX0OznXKSv4U7e4o7eUU4zp2zQsbJ+4OCNNr7EnnAVWkIz4k0dv6UN4ouS1ZL4WlXxCrZHHl69g==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-1.6.5.tgz", + "integrity": "sha512-u0UE8veaCnMfJmoklqneeBBopOAPG3/6DHqGVHYAhz8DkJXh9dnjPlz25fRxn4e+6XVzdOp7kau63Rp52fZ3WQ==", "engines": { "node": ">=14.0.0" } }, "node_modules/pg-monitor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pg-monitor/-/pg-monitor-2.0.0.tgz", - "integrity": "sha512-UqjhroM701sRrJHhXeF1OwNBGxkN9R0YgkVU8A46wWn3RwK/K7QDylChMoDxo8TmGp86CBP4ZSf+RK9vD8XyVA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pg-monitor/-/pg-monitor-2.1.0.tgz", + "integrity": "sha512-+yMzUg7oxGuj+4CQODresSFz3unIVYKDhyPp7Vrb4L34yJacVZXicFkai3s/is+mzD5KE7uKljQ7uJrL8PsTxw==", "dependencies": { - "cli-color": "2.0.3" + "cli-color": "2.0.4" }, "engines": { "node": ">=14" } }, - "node_modules/pg-monitor/node_modules/cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pg-monitor/node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/pg-monitor/node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, "node_modules/pg-pool": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", @@ -17214,13 +17218,13 @@ } }, "node_modules/pg-promise": { - "version": "11.7.8", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.7.8.tgz", - "integrity": "sha512-s5pcLp8QLIFNhnEsxaqBtDh7LsOG3hjJbVOVpYlWPqg/g1LIixGMtbNgbxW1HkTSY5rKT9tyE0J+dw2X7bD3rQ==", + "version": "11.9.1", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.9.1.tgz", + "integrity": "sha512-qvMmyDvWd64X0a25hCuWV40GLMbgeYf4z7ZmzxQqGHtUIlzMtxcMtaBHAMr7XVOL62wFv2ZVKW5pFruD/4ZAOg==", "dependencies": { "assert-options": "0.8.1", - "pg": "8.11.5", - "pg-minify": "1.6.4", + "pg": "8.12.0", + "pg-minify": "1.6.5", "spex": "3.3.0" }, "engines": { @@ -20104,12 +20108,15 @@ } }, "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/to-buffer": { @@ -20299,9 +20306,9 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" }, "node_modules/type-check": { "version": "0.4.0", @@ -26201,6 +26208,18 @@ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, + "cli-color": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.64", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -26663,19 +26682,12 @@ } }, "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - }, - "dependencies": { - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - } + "es5-ext": "^0.10.64", + "type": "^2.7.2" } }, "dashdash": { @@ -27321,9 +27333,9 @@ } }, "es5-ext": { - "version": "0.10.63", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.63.tgz", - "integrity": "sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -27348,12 +27360,23 @@ } }, "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, "escalade": { @@ -30551,6 +30574,21 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "requires": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -33434,9 +33472,9 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "pg": { - "version": "8.11.5", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.5.tgz", - "integrity": "sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", "requires": { "pg-cloudflare": "^1.1.1", "pg-connection-string": "^2.6.4", @@ -33463,56 +33501,16 @@ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" }, "pg-minify": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-1.6.4.tgz", - "integrity": "sha512-cf6hBt1YqzqPX0OznXKSv4U7e4o7eUU4zp2zQsbJ+4OCNNr7EnnAVWkIz4k0dv6UN4ouS1ZL4WlXxCrZHHl69g==" + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-1.6.5.tgz", + "integrity": "sha512-u0UE8veaCnMfJmoklqneeBBopOAPG3/6DHqGVHYAhz8DkJXh9dnjPlz25fRxn4e+6XVzdOp7kau63Rp52fZ3WQ==" }, "pg-monitor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pg-monitor/-/pg-monitor-2.0.0.tgz", - "integrity": "sha512-UqjhroM701sRrJHhXeF1OwNBGxkN9R0YgkVU8A46wWn3RwK/K7QDylChMoDxo8TmGp86CBP4ZSf+RK9vD8XyVA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pg-monitor/-/pg-monitor-2.1.0.tgz", + "integrity": "sha512-+yMzUg7oxGuj+4CQODresSFz3unIVYKDhyPp7Vrb4L34yJacVZXicFkai3s/is+mzD5KE7uKljQ7uJrL8PsTxw==", "requires": { - "cli-color": "2.0.3" - }, - "dependencies": { - "cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - } + "cli-color": "2.0.4" } }, "pg-pool": { @@ -33522,13 +33520,13 @@ "requires": {} }, "pg-promise": { - "version": "11.7.8", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.7.8.tgz", - "integrity": "sha512-s5pcLp8QLIFNhnEsxaqBtDh7LsOG3hjJbVOVpYlWPqg/g1LIixGMtbNgbxW1HkTSY5rKT9tyE0J+dw2X7bD3rQ==", + "version": "11.9.1", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.9.1.tgz", + "integrity": "sha512-qvMmyDvWd64X0a25hCuWV40GLMbgeYf4z7ZmzxQqGHtUIlzMtxcMtaBHAMr7XVOL62wFv2ZVKW5pFruD/4ZAOg==", "requires": { "assert-options": "0.8.1", - "pg": "8.11.5", - "pg-minify": "1.6.4", + "pg": "8.12.0", + "pg-minify": "1.6.5", "spex": "3.3.0" } }, @@ -35641,12 +35639,12 @@ } }, "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" } }, "to-buffer": { @@ -35790,9 +35788,9 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" }, "type-check": { "version": "0.4.0", diff --git a/package.json b/package.json index 32fde3a740..3312438c68 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,8 @@ "otpauth": "9.2.2", "parse": "5.3.0", "path-to-regexp": "6.2.1", - "pg-monitor": "2.0.0", - "pg-promise": "11.7.8", + "pg-monitor": "2.1.0", + "pg-promise": "11.9.1", "pluralize": "8.0.0", "punycode": "2.3.1", "rate-limit-redis": "4.2.0", diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index ef6e017065..33632b8ab0 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -4,7 +4,7 @@ const UserController = require('../lib/Controllers/UserController').UserControll const Config = require('../lib/Config'); const ParseServer = require('../lib/index').ParseServer; const triggers = require('../lib/triggers'); -const { resolvingPromise, sleep } = require('./support/testUtils'); +const { resolvingPromise, sleep } = require('../lib/TestUtils'); const validatorFail = () => { throw 'you are not authorized'; }; diff --git a/spec/batch.spec.js b/spec/batch.spec.js index 8367c70f61..2a2be68d5b 100644 --- a/spec/batch.spec.js +++ b/spec/batch.spec.js @@ -1,6 +1,5 @@ const batch = require('../lib/batch'); const request = require('../lib/request'); -const TestUtils = require('../lib/TestUtils'); const originalURL = '/parse/batch'; const serverURL = 'http://localhost:1234/parse'; @@ -18,9 +17,13 @@ const headers = { }; describe('batch', () => { + let createSpy; + beforeEach(async () => { + createSpy = spyOn(databaseAdapter, 'createObject').and.callThrough(); + }); + it('should return the proper url', () => { const internalURL = batch.makeBatchRoutingPathFunction(originalURL)('/parse/classes/Object'); - expect(internalURL).toEqual('/classes/Object'); }); @@ -133,8 +136,6 @@ describe('batch', () => { }); it('should handle a batch request without transaction', async () => { - spyOn(databaseAdapter, 'createObject').and.callThrough(); - const response = await request({ method: 'POST', headers: headers, @@ -154,7 +155,6 @@ describe('batch', () => { ], }), }); - expect(response.data.length).toEqual(2); expect(response.data[0].success.objectId).toBeDefined(); expect(response.data[0].success.createdAt).toBeDefined(); @@ -162,15 +162,13 @@ describe('batch', () => { expect(response.data[1].success.createdAt).toBeDefined(); const query = new Parse.Query('MyObject'); const results = await query.find(); - expect(databaseAdapter.createObject.calls.count()).toBe(2); - expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toEqual(null); - expect(databaseAdapter.createObject.calls.argsFor(1)[3]).toEqual(null); + expect(createSpy.calls.count()).toBe(2); + expect(createSpy.calls.argsFor(0)[3]).toEqual(null); + expect(createSpy.calls.argsFor(1)[3]).toEqual(null); expect(results.map(result => result.get('key')).sort()).toEqual(['value1', 'value2']); }); it('should handle a batch request with transaction = false', async () => { - spyOn(databaseAdapter, 'createObject').and.callThrough(); - const response = await request({ method: 'POST', headers: headers, @@ -196,11 +194,12 @@ describe('batch', () => { expect(response.data[0].success.createdAt).toBeDefined(); expect(response.data[1].success.objectId).toBeDefined(); expect(response.data[1].success.createdAt).toBeDefined(); + const query = new Parse.Query('MyObject'); const results = await query.find(); - expect(databaseAdapter.createObject.calls.count()).toBe(2); - expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toEqual(null); - expect(databaseAdapter.createObject.calls.argsFor(1)[3]).toEqual(null); + expect(createSpy.calls.count()).toBe(2); + expect(createSpy.calls.argsFor(0)[3]).toEqual(null); + expect(createSpy.calls.argsFor(1)[3]).toEqual(null); expect(results.map(result => result.get('key')).sort()).toEqual(['value1', 'value2']); }); @@ -209,24 +208,11 @@ describe('batch', () => { process.env.PARSE_SERVER_TEST_DB === 'postgres' ) { describe('transactions', () => { - beforeEach(async () => { - await TestUtils.destroyAllDataPermanently(true); - if (process.env.MONGODB_TOPOLOGY === 'replicaset') { - await reconfigureServer({ - databaseAdapter: undefined, - databaseURI: - 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase?replicaSet=replicaset', - }); - } else { - await reconfigureServer(); - } - }); - it('should handle a batch request with transaction = true', async () => { const myObject = new Parse.Object('MyObject'); // This is important because transaction only works on pre-existing collections await myObject.save(); await myObject.destroy(); - spyOn(databaseAdapter, 'createObject').and.callThrough(); + createSpy.calls.reset(); const response = await request({ method: 'POST', headers: headers, @@ -254,10 +240,10 @@ describe('batch', () => { expect(response.data[1].success.createdAt).toBeDefined(); const query = new Parse.Query('MyObject'); const results = await query.find(); - expect(databaseAdapter.createObject.calls.count() % 2).toBe(0); - for (let i = 0; i + 1 < databaseAdapter.createObject.calls.length; i = i + 2) { - expect(databaseAdapter.createObject.calls.argsFor(i)[3]).toBe( - databaseAdapter.createObject.calls.argsFor(i + 1)[3] + expect(createSpy.calls.count()).toBe(2); + for (let i = 0; i + 1 < createSpy.calls.length; i = i + 2) { + expect(createSpy.calls.argsFor(i)[3]).toBe( + createSpy.calls.argsFor(i + 1)[3] ); } expect(results.map(result => result.get('key')).sort()).toEqual(['value1', 'value2']); @@ -265,9 +251,11 @@ describe('batch', () => { it('should not save anything when one operation fails in a transaction', async () => { const myObject = new Parse.Object('MyObject'); // This is important because transaction only works on pre-existing collections - await myObject.save(); + await myObject.save({ key: 'stringField' }); await myObject.destroy(); + createSpy.calls.reset(); try { + // Saving a number to a string field should fail await request({ method: 'POST', headers: headers, @@ -386,8 +374,7 @@ describe('batch', () => { const myObject2 = new Parse.Object('MyObject2'); // This is important because transaction only works on pre-existing collections await myObject2.save(); await myObject2.destroy(); - - spyOn(databaseAdapter, 'createObject').and.callThrough(); + createSpy.calls.reset(); let myObjectCalls = 0; Parse.Cloud.beforeSave('MyObject', async () => { diff --git a/spec/support/testUtils.js b/spec/support/testUtils.js deleted file mode 100644 index 8cd394648c..0000000000 --- a/spec/support/testUtils.js +++ /dev/null @@ -1,18 +0,0 @@ -// Create Deferred Promise -function resolvingPromise() { - let res; - let rej; - const promise = new Promise((resolve, reject) => { - res = resolve; - rej = reject; - }); - promise.resolve = res; - promise.reject = rej; - return promise; -} - -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -module.exports = { resolvingPromise, sleep }; diff --git a/src/TestUtils.js b/src/TestUtils.js index 6d4cfb0f14..912a459519 100644 --- a/src/TestUtils.js +++ b/src/TestUtils.js @@ -26,3 +26,19 @@ export function destroyAllDataPermanently(fast) { }) ); } + +export function resolvingPromise() { + let res; + let rej; + const promise = new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }); + promise.resolve = res; + promise.reject = rej; + return promise; +} + +export function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +}