Forráskód Böngészése

[HyperExpress] Upgrade version 6.8.0 (#8328)

* Upgrade HyperExpress version to 6.8.0

* Refactor(app.js): escape unsafe html using regex

* Refactor(postgres.js): change max connections pool

* Refactor(mysql.js): change mysql2 to mariadb
Imam Fahrur Rofi 2 éve
szülő
commit
133dade52e

+ 1 - 1
frameworks/JavaScript/hyperexpress/README.md

@@ -10,7 +10,7 @@ The tests were run with:
 
 - [hyper-express](https://github.com/kartikk221/hyper-express)
 - [postgres](https://github.com/porsager/postgres)
-- [mysql2](https://github.com/sidorares/node-mysql2)
+- [mariadb](https://github.com/mariadb-corporation/mariadb-connector-nodejs)
 - [lru-cache](https://github.com/isaacs/node-lru-cache)
 
 ## Database

+ 7 - 2
frameworks/JavaScript/hyperexpress/app.js

@@ -1,4 +1,3 @@
-import { escape } from 'html-escaper'
 import { Server } from 'hyper-express'
 import { LRUCache } from 'lru-cache'
 import cluster, { isWorker } from 'node:cluster'
@@ -10,6 +9,12 @@ const generateRandomNumber = () => Math.ceil(Math.random() * maxRows)
 
 const parseQueries = (i) => Math.min(Math.max(parseInt(i, 10) || 1, 1), maxQuery)
 
+const escapeHTMLRules = { '&': '&#38;', '<': '&#60;', '>': '&#62;', '"': '&#34;', "'": '&#39;', '/': '&#47;' }
+
+const unsafeHTMLMatcher = /[&<>"'\/]/g
+
+const escapeHTMLCode = (text) => text ? text.replace(unsafeHTMLMatcher, function (m) { return escapeHTMLRules[m] || m; }) : ''
+
 const cache = new LRUCache({
   max: maxRows
 })
@@ -99,7 +104,7 @@ if (db) {
       fortunes.sort((a, b) => a.message.localeCompare(b.message))
 
       let i = 0, html = '<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>'
-      for (; i < fortunes.length; i++) html += `<tr><td>${fortunes[i].id}</td><td>${escape(fortunes[i].message)}</td></tr>`
+      for (; i < fortunes.length; i++) html += `<tr><td>${fortunes[i].id}</td><td>${escapeHTMLCode(fortunes[i].message)}</td></tr>`
       html += '</table></body></html>'
 
       response.atomic(() => {

+ 7 - 25
frameworks/JavaScript/hyperexpress/database/mysql.js

@@ -1,33 +1,15 @@
-import { createPool, createConnection } from 'mysql2/promise'
-import { isWorker } from 'node:cluster'
+import { createPool } from 'mariadb'
 import { cpus } from 'node:os'
 import { clientOpts } from '../config.js'
 
-const client = await createConnection(clientOpts)
+const pool = createPool({ ...clientOpts, connectionLimit: cpus().length * 2 + 1 })
 
-const res = await client.query('SHOW VARIABLES LIKE "max_connections"')
+const execute = (text, values) => pool.execute(text, values || undefined)
 
-let maxConnections = 150
+export const fortunes = () => execute('SELECT id, message FROM fortune')
 
-if (isWorker) {
-    maxConnections = cpus().length > 2 ? Math.ceil(res[0][0].Value * 0.96 / cpus().length) : maxConnections
-}
+export const find = (id) => execute('SELECT id, randomNumber FROM world WHERE id = ?', [id]).then(arr => arr[0])
 
-await client.end()
+export const getAllWorlds = () => execute('SELECT id, randomNumber FROM world')
 
-const pool = createPool(Object.assign({ ...clientOpts }, {
-    connectionLimit: maxConnections,
-    idleTimeout: 600000
-}))
-
-const execute = async (text, values) => (await pool.execute(text, values || undefined))[0]
-
-export const fortunes = async () => execute('SELECT * FROM fortune')
-
-export const find = async (id) => execute('SELECT id, randomNumber FROM world WHERE id = ?', [id]).then(arr => arr[0])
-
-export const getAllWorlds = async () => execute('SELECT * FROM world')
-
-export const update = async (obj) => execute('UPDATE world SET randomNumber = ? WHERE id = ?', [obj.randomNumber, obj.id])
-
-await Promise.all([...Array(maxConnections).keys()].map(fortunes))
+export const update = (obj) => execute('UPDATE world SET randomNumber = ? WHERE id = ?', [obj.randomNumber, obj.id])

+ 3 - 5
frameworks/JavaScript/hyperexpress/database/postgres.js

@@ -1,14 +1,12 @@
 import postgres from 'postgres'
 import { clientOpts } from '../config.js'
 
-const sql = postgres(clientOpts)
+const sql = postgres({ ...clientOpts, max: 1 })
 
-export const fortunes = async () => sql`SELECT * FROM fortune`
+export const fortunes = async () => sql`SELECT id, message FROM fortune`
 
 export const find = async (id) => sql`SELECT id, randomNumber FROM world WHERE id = ${id}`.then((arr) => arr[0])
 
-export const getAllWorlds = async () => sql`SELECT * FROM world`
+export const getAllWorlds = async () => sql`SELECT id, randomNumber FROM world`
 
 export const update = async (obj) => sql`UPDATE world SET randomNumber = ${obj.randomNumber} WHERE id = ${obj.id}`
-
-await Promise.all([...Array(150).keys()].map(fortunes))

+ 74 - 166
frameworks/JavaScript/hyperexpress/package-lock.json

@@ -5,13 +5,13 @@
   "requires": true,
   "packages": {
     "": {
+      "name": "hyperexpress",
       "version": "0.0.1",
       "license": "MIT",
       "dependencies": {
-        "html-escaper": "^3.0.3",
-        "hyper-express": "^6.7.1",
+        "hyper-express": "^6.8.0",
         "lru-cache": "^10.0.0",
-        "mysql2": "^3.5.0",
+        "mariadb": "^3.2.0",
         "postgres": "^3.3.5"
       }
     },
@@ -62,6 +62,11 @@
         "@types/send": "*"
       }
     },
+    "node_modules/@types/geojson": {
+      "version": "7946.0.10",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
+      "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA=="
+    },
     "node_modules/@types/http-errors": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz",
@@ -153,23 +158,10 @@
         "node": ">=0.10"
       }
     },
-    "node_modules/generate-function": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
-      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
-      "dependencies": {
-        "is-property": "^1.0.2"
-      }
-    },
-    "node_modules/html-escaper": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
-      "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
-    },
     "node_modules/hyper-express": {
-      "version": "6.7.1",
-      "resolved": "https://registry.npmjs.org/hyper-express/-/hyper-express-6.7.1.tgz",
-      "integrity": "sha512-QjcHXsMZ/ujoTOp6yI9r1OOw14CloghO4iHxlRyUEmTwhVW4p+2Ak8iNrpsdDUV/MczhYNGkQ5Rw3lm+yGSoeA==",
+      "version": "6.8.0",
+      "resolved": "https://registry.npmjs.org/hyper-express/-/hyper-express-6.8.0.tgz",
+      "integrity": "sha512-PKOfkyVLmxTfFmlvQgoWN6AqxnEGQpLr94BFh0rkkXlEYGxJX+TF9R2b1qE0MRhKgWttWoTWl73xmxo5vlGjvw==",
       "dependencies": {
         "@types/busboy": "^0.3.1",
         "@types/express": "^4.17.13",
@@ -182,7 +174,7 @@
         "range-parser": "^1.2.1",
         "type-is": "^1.6.18",
         "typed-emitter": "^2.1.0",
-        "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.25.0"
+        "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.31.0"
       }
     },
     "node_modules/iconv-lite": {
@@ -196,16 +188,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/is-property": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
-      "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
-    },
-    "node_modules/long": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
-      "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
-    },
     "node_modules/lru-cache": {
       "version": "10.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz",
@@ -214,6 +196,34 @@
         "node": "14 || >=16.14"
       }
     },
+    "node_modules/mariadb": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.2.0.tgz",
+      "integrity": "sha512-IH2nidQat1IBMxP5gjuNxG6dADtz1PESEC6rKrcATen5v3ngFyZITjehyYiwNfz3zUNQupfYmVntz93M+Pz8pQ==",
+      "dependencies": {
+        "@types/geojson": "^7946.0.10",
+        "@types/node": "^17.0.45",
+        "denque": "^2.1.0",
+        "iconv-lite": "^0.6.3",
+        "lru-cache": "^7.14.0"
+      },
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/mariadb/node_modules/@types/node": {
+      "version": "17.0.45",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+      "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+    },
+    "node_modules/mariadb/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -241,51 +251,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/mysql2": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.5.0.tgz",
-      "integrity": "sha512-WKlxITp5D8Xx8vsREf/cF0MB7QtqkAgedxtMA0iD9D0ugxmeBdph7J7xaLXdIZXWWmRyNGaCFTUiGo144XdL5g==",
-      "dependencies": {
-        "denque": "^2.1.0",
-        "generate-function": "^2.3.1",
-        "iconv-lite": "^0.6.3",
-        "long": "^5.2.1",
-        "lru-cache": "^8.0.0",
-        "named-placeholders": "^1.1.3",
-        "seq-queue": "^0.0.5",
-        "sqlstring": "^2.3.2"
-      },
-      "engines": {
-        "node": ">= 8.0"
-      }
-    },
-    "node_modules/mysql2/node_modules/lru-cache": {
-      "version": "8.0.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
-      "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
-      "engines": {
-        "node": ">=16.14"
-      }
-    },
-    "node_modules/named-placeholders": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
-      "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
-      "dependencies": {
-        "lru-cache": "^7.14.1"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
-    "node_modules/named-placeholders/node_modules/lru-cache": {
-      "version": "7.18.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/negotiator": {
       "version": "0.6.3",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -325,19 +290,6 @@
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
-    "node_modules/seq-queue": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
-      "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
-    },
-    "node_modules/sqlstring": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
-      "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
     "node_modules/streamsearch": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
@@ -368,9 +320,6 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
       "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
-      "dependencies": {
-        "rxjs": "*"
-      },
       "optionalDependencies": {
         "rxjs": "*"
       }
@@ -428,6 +377,11 @@
         "@types/send": "*"
       }
     },
+    "@types/geojson": {
+      "version": "7946.0.10",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
+      "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA=="
+    },
     "@types/http-errors": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz",
@@ -504,23 +458,10 @@
       "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
       "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
     },
-    "generate-function": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
-      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
-      "requires": {
-        "is-property": "^1.0.2"
-      }
-    },
-    "html-escaper": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
-      "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
-    },
     "hyper-express": {
-      "version": "6.7.1",
-      "resolved": "https://registry.npmjs.org/hyper-express/-/hyper-express-6.7.1.tgz",
-      "integrity": "sha512-QjcHXsMZ/ujoTOp6yI9r1OOw14CloghO4iHxlRyUEmTwhVW4p+2Ak8iNrpsdDUV/MczhYNGkQ5Rw3lm+yGSoeA==",
+      "version": "6.8.0",
+      "resolved": "https://registry.npmjs.org/hyper-express/-/hyper-express-6.8.0.tgz",
+      "integrity": "sha512-PKOfkyVLmxTfFmlvQgoWN6AqxnEGQpLr94BFh0rkkXlEYGxJX+TF9R2b1qE0MRhKgWttWoTWl73xmxo5vlGjvw==",
       "requires": {
         "@types/busboy": "^0.3.1",
         "@types/express": "^4.17.13",
@@ -533,7 +474,7 @@
         "range-parser": "^1.2.1",
         "type-is": "^1.6.18",
         "typed-emitter": "^2.1.0",
-        "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.25.0"
+        "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.31.0"
       }
     },
     "iconv-lite": {
@@ -544,21 +485,35 @@
         "safer-buffer": ">= 2.1.2 < 3.0.0"
       }
     },
-    "is-property": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
-      "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
-    },
-    "long": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
-      "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
-    },
     "lru-cache": {
       "version": "10.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz",
       "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw=="
     },
+    "mariadb": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.2.0.tgz",
+      "integrity": "sha512-IH2nidQat1IBMxP5gjuNxG6dADtz1PESEC6rKrcATen5v3ngFyZITjehyYiwNfz3zUNQupfYmVntz93M+Pz8pQ==",
+      "requires": {
+        "@types/geojson": "^7946.0.10",
+        "@types/node": "^17.0.45",
+        "denque": "^2.1.0",
+        "iconv-lite": "^0.6.3",
+        "lru-cache": "^7.14.0"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "17.0.45",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+          "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+        },
+        "lru-cache": {
+          "version": "7.18.3",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+          "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
+        }
+      }
+    },
     "media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -577,43 +532,6 @@
         "mime-db": "1.52.0"
       }
     },
-    "mysql2": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.5.0.tgz",
-      "integrity": "sha512-WKlxITp5D8Xx8vsREf/cF0MB7QtqkAgedxtMA0iD9D0ugxmeBdph7J7xaLXdIZXWWmRyNGaCFTUiGo144XdL5g==",
-      "requires": {
-        "denque": "^2.1.0",
-        "generate-function": "^2.3.1",
-        "iconv-lite": "^0.6.3",
-        "long": "^5.2.1",
-        "lru-cache": "^8.0.0",
-        "named-placeholders": "^1.1.3",
-        "seq-queue": "^0.0.5",
-        "sqlstring": "^2.3.2"
-      },
-      "dependencies": {
-        "lru-cache": {
-          "version": "8.0.5",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
-          "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA=="
-        }
-      }
-    },
-    "named-placeholders": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
-      "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
-      "requires": {
-        "lru-cache": "^7.14.1"
-      },
-      "dependencies": {
-        "lru-cache": {
-          "version": "7.18.3",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-          "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
-        }
-      }
-    },
     "negotiator": {
       "version": "0.6.3",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -643,16 +561,6 @@
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
-    "seq-queue": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
-      "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
-    },
-    "sqlstring": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
-      "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
-    },
     "streamsearch": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
@@ -683,7 +591,7 @@
     },
     "uWebSockets.js": {
       "version": "git+ssh://[email protected]/uNetworking/uWebSockets.js.git#e6ecc2102d68d99dc35969b0898fbd201e0f252b",
-      "from": "uWebSockets.js@github:uNetworking/uWebSockets.js#v20.25.0"
+      "from": "uWebSockets.js@github:uNetworking/uWebSockets.js#v20.31.0"
     }
   }
 }

+ 2 - 3
frameworks/JavaScript/hyperexpress/package.json

@@ -8,10 +8,9 @@
   "author": "",
   "license": "MIT",
   "dependencies": {
-    "html-escaper": "^3.0.3",
-    "hyper-express": "^6.7.1",
+    "hyper-express": "^6.8.0",
     "lru-cache": "^10.0.0",
-    "mysql2": "^3.5.0",
+    "mariadb": "^3.2.0",
     "postgres": "^3.3.5"
   },
   "type": "module"