diff --git a/package-lock.json b/package-lock.json
index e5740c36..b6d4fa32 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@formidablejs/framework",
- "version": "0.28.2",
+ "version": "0.28.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@formidablejs/framework",
- "version": "0.28.2",
+ "version": "0.28.3",
"license": "MIT",
"dependencies": {
"@fastify/cookie": "^11.0.2",
@@ -166,22 +166,22 @@
}
},
"node_modules/@babel/core": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz",
- "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz",
+ "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.0",
+ "@babel/generator": "^7.28.3",
"@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.27.3",
- "@babel/helpers": "^7.27.6",
- "@babel/parser": "^7.28.0",
+ "@babel/helper-module-transforms": "^7.28.3",
+ "@babel/helpers": "^7.28.3",
+ "@babel/parser": "^7.28.3",
"@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.0",
- "@babel/types": "^7.28.0",
+ "@babel/traverse": "^7.28.3",
+ "@babel/types": "^7.28.2",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -225,14 +225,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz",
- "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz",
+ "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.0",
- "@babel/types": "^7.28.0",
+ "@babel/parser": "^7.28.3",
+ "@babel/types": "^7.28.2",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -293,15 +293,15 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
- "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+ "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.27.3"
+ "@babel/traverse": "^7.28.3"
},
"engines": {
"node": ">=6.9.0"
@@ -351,27 +351,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
- "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz",
+ "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.27.2",
- "@babel/types": "^7.27.6"
+ "@babel/types": "^7.28.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz",
- "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
+ "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.0"
+ "@babel/types": "^7.28.2"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -635,18 +635,18 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz",
- "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz",
+ "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.0",
+ "@babel/generator": "^7.28.3",
"@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.0",
+ "@babel/parser": "^7.28.3",
"@babel/template": "^7.27.2",
- "@babel/types": "^7.28.0",
+ "@babel/types": "^7.28.2",
"debug": "^4.3.1"
},
"engines": {
@@ -672,9 +672,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz",
- "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==",
+ "version": "7.28.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
+ "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -803,9 +803,9 @@
}
},
"node_modules/@fastify/busboy": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz",
- "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz",
+ "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==",
"license": "MIT"
},
"node_modules/@fastify/cookie": {
@@ -1078,10 +1078,31 @@
"license": "MIT",
"optional": true
},
+ "node_modules/@inquirer/external-editor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz",
+ "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "chardet": "^2.1.0",
+ "iconv-lite": "^0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@ioredis/commands": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz",
- "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz",
+ "integrity": "sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==",
"dev": true,
"license": "MIT"
},
@@ -1124,9 +1145,9 @@
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz",
+ "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -1503,13 +1524,13 @@
}
},
"node_modules/@jest/expect-utils": {
- "version": "30.0.4",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz",
- "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==",
+ "version": "30.1.1",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.1.tgz",
+ "integrity": "sha512-5YUHr27fpJ64dnvtu+tt11ewATynrHkGYD+uSFgRr8V2eFJis/vEXgToyLwccIwqBihVfz9jwio+Zr1ab1Zihw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/get-type": "30.0.1"
+ "@jest/get-type": "30.1.0"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -1745,9 +1766,9 @@
}
},
"node_modules/@jest/get-type": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz",
- "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==",
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2097,9 +2118,9 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
- "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2117,15 +2138,15 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
- "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.29",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
- "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+ "version": "0.3.30",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
+ "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2181,21 +2202,21 @@
}
},
"node_modules/@redis/bloom": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.8.0.tgz",
- "integrity": "sha512-kpKZzAAjGiGYn88Bqq6+ozxPg6kGYWRZH9vnOwGcoSCbrW14SZpZVMYMFSio8FH9ZJUdUcmT/RLGlA1W1t0UWQ==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.8.2.tgz",
+ "integrity": "sha512-855DR0ChetZLarblio5eM0yLwxA9Dqq50t8StXKp5bAtLT0G+rZ+eRzzqxl37sPqQKjUudSYypz55o6nNhbz0A==",
"license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@redis/client": "^5.8.0"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@redis/client": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.0.tgz",
- "integrity": "sha512-ywZjKGoSSAECGYOd9bJpws6d4867SN686obUWT/sRmo1c/Q8V+jWyInvlqwKa0BOvTHHwYeB2WFUEvd6PADeOQ==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.2.tgz",
+ "integrity": "sha512-WtMScno3+eBpTac1Uav2zugXEoXqaU23YznwvFgkPwBQVwEHTDgOG7uEAObtZ/Nyn8SmAMbqkEubJaMOvnqdsQ==",
"license": "MIT",
"dependencies": {
"cluster-key-slot": "1.1.2"
@@ -2205,39 +2226,39 @@
}
},
"node_modules/@redis/json": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.8.0.tgz",
- "integrity": "sha512-xPBpwY6aKoRzMSu67MpwrBiSliON9bfHo9Y/pSPBjW8/KoOm1MzGqwJUO20qdjXpFoKJsDWwxIE1LHdBNzcImw==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.8.2.tgz",
+ "integrity": "sha512-uxpVfas3I0LccBX9rIfDgJ0dBrUa3+0Gc8sEwmQQH0vHi7C1Rx1Qn8Nv1QWz5bohoeIXMICFZRcyDONvum2l/w==",
"license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@redis/client": "^5.8.0"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@redis/search": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.8.0.tgz",
- "integrity": "sha512-lF9pNv9vySmirm1EzCH6YeRjhvH6lLT7tvebYHEM7WTkEQ/7kZWb4athliKESHpxzTQ36U9UbzuedSywHV6OhQ==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.8.2.tgz",
+ "integrity": "sha512-cNv7HlgayavCBXqPXgaS97DRPVWFznuzsAmmuemi2TMCx5scwLiP50TeZvUS06h/MG96YNPe6A0Zt57yayfxwA==",
"license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@redis/client": "^5.8.0"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@redis/time-series": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.8.0.tgz",
- "integrity": "sha512-kPTlW2ACXokjQNXjCD8Pw9mHDoB94AHUlHFahyjxz9lUJUVwiva2Dgfrd2k3JxHhSBqyY2PREIj9YwIUSTSSqQ==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.8.2.tgz",
+ "integrity": "sha512-g2NlHM07fK8H4k+613NBsk3y70R2JIM2dPMSkhIjl2Z17SYvaYKdusz85d7VYOrZBWtDrHV/WD2E3vGu+zni8A==",
"license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@redis/client": "^5.8.0"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@sinclair/typebox": {
@@ -2338,13 +2359,13 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
- "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.20.7"
+ "@babel/types": "^7.28.2"
}
},
"node_modules/@types/body-parser": {
@@ -2395,9 +2416,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
- "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz",
+ "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2480,12 +2501,12 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "24.0.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz",
- "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==",
+ "version": "24.3.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
+ "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
"license": "MIT",
"dependencies": {
- "undici-types": "~7.8.0"
+ "undici-types": "~7.10.0"
}
},
"node_modules/@types/qs": {
@@ -2754,9 +2775,9 @@
}
},
"node_modules/aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz",
+ "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==",
"dev": true,
"license": "ISC",
"optional": true
@@ -2784,15 +2805,15 @@
"license": "MIT"
},
"node_modules/argon2": {
- "version": "0.43.0",
- "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.43.0.tgz",
- "integrity": "sha512-u/HKLcbWShVDhkfwI4hWyiUf3qyX8QhTfaIv2cWE18uqhXCmR5hb6Ed7oqYi2KCQegeAnRhiFzbjzm7i5yl1GA==",
+ "version": "0.43.1",
+ "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.43.1.tgz",
+ "integrity": "sha512-TfOzvDWUaQPurCT1hOwIeFNkgrAJDpbBGBGWDgzDsm11nNhImc13WhdGdCU6K7brkp8VpeY07oGtSex0Wmhg8w==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@phc/format": "^1.0.0",
- "node-addon-api": "^8.3.1",
+ "node-addon-api": "^8.4.0",
"node-gyp-build": "^4.8.4"
},
"engines": {
@@ -2923,9 +2944,9 @@
}
},
"node_modules/babel-preset-current-node-syntax": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
- "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2946,7 +2967,7 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5"
},
"peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@babel/core": "^7.0.0 || ^8.0.0-0"
}
},
"node_modules/babel-preset-jest": {
@@ -3074,9 +3095,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.25.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
- "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
+ "version": "4.25.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz",
+ "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==",
"dev": true,
"funding": [
{
@@ -3094,8 +3115,8 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001726",
- "electron-to-chromium": "^1.5.173",
+ "caniuse-lite": "^1.0.30001737",
+ "electron-to-chromium": "^1.5.211",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.3"
},
@@ -3278,9 +3299,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001726",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz",
- "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==",
+ "version": "1.0.30001737",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz",
+ "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==",
"dev": true,
"funding": [
{
@@ -3325,9 +3346,9 @@
}
},
"node_modules/chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz",
+ "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==",
"license": "MIT"
},
"node_modules/chokidar": {
@@ -3869,9 +3890,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.179",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.179.tgz",
- "integrity": "sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==",
+ "version": "1.5.211",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz",
+ "integrity": "sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==",
"dev": true,
"license": "ISC"
},
@@ -3905,20 +3926,6 @@
"iconv-lite": "^0.6.2"
}
},
- "node_modules/encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/end-of-stream": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
@@ -4429,18 +4436,18 @@
}
},
"node_modules/expect": {
- "version": "30.0.4",
- "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz",
- "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==",
+ "version": "30.1.1",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.1.1.tgz",
+ "integrity": "sha512-OKe7cdic4qbfWd/CcgwJvvCrNX2KWfuMZee9AfJHL1gTYmvqjBjZG1a2NwfhspBzxzlXwsN75WWpKTYfsJpBxg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/expect-utils": "30.0.4",
- "@jest/get-type": "30.0.1",
- "jest-matcher-utils": "30.0.4",
- "jest-message-util": "30.0.2",
- "jest-mock": "30.0.2",
- "jest-util": "30.0.2"
+ "@jest/expect-utils": "30.1.1",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.1.1",
+ "jest-message-util": "30.1.0",
+ "jest-mock": "30.0.5",
+ "jest-util": "30.0.5"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -4474,20 +4481,6 @@
"node": ">= 0.6"
}
},
- "node_modules/external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "license": "MIT",
- "dependencies": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/fast-decode-uri-component": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
@@ -4550,9 +4543,9 @@
}
},
"node_modules/fast-uri": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
- "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
"funding": [
{
"type": "github",
@@ -4566,9 +4559,9 @@
"license": "BSD-3-Clause"
},
"node_modules/fastify": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.4.0.tgz",
- "integrity": "sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.5.0.tgz",
+ "integrity": "sha512-ZWSWlzj3K/DcULCnCjEiC2zn2FBPdlZsSA/pnPa/dbUfLvxkD/Nqmb0XXMXLrWkeM4uQPUvjdJpwtXmTfriXqw==",
"funding": [
{
"type": "github",
@@ -4674,17 +4667,17 @@
}
},
"node_modules/find-my-way": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.2.0.tgz",
- "integrity": "sha512-d3uCir8Hmg7W1Ywp8nKf2lJJYU9Nwinvo+1D39Dn09nz65UKXIxUh7j7K8zeWhxqe1WrkS7FJyON/Q/3lPoc6w==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.3.0.tgz",
+ "integrity": "sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-querystring": "^1.0.0",
- "safe-regex2": "^4.0.0"
+ "safe-regex2": "^5.0.0"
},
"engines": {
- "node": ">=14"
+ "node": ">=20"
}
},
"node_modules/find-up": {
@@ -5090,12 +5083,12 @@
}
},
"node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
@@ -5235,11 +5228,14 @@
}
},
"node_modules/imba-shell/node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
"peerDependencies": {
"picomatch": "^3 || ^4"
},
@@ -5303,9 +5299,9 @@
}
},
"node_modules/imba-shell/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -5318,9 +5314,9 @@
}
},
"node_modules/imba-shell/node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "version": "5.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
+ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5405,16 +5401,16 @@
"license": "ISC"
},
"node_modules/inquirer": {
- "version": "8.2.6",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz",
- "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==",
+ "version": "8.2.7",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz",
+ "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==",
"license": "MIT",
"dependencies": {
+ "@inquirer/external-editor": "^1.0.0",
"ansi-escapes": "^4.2.1",
"chalk": "^4.1.1",
"cli-cursor": "^3.1.0",
"cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
"figures": "^3.0.0",
"lodash": "^4.17.21",
"mute-stream": "0.0.8",
@@ -5440,13 +5436,13 @@
}
},
"node_modules/ioredis": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz",
- "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.7.0.tgz",
+ "integrity": "sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@ioredis/commands": "^1.1.1",
+ "@ioredis/commands": "^1.3.0",
"cluster-key-slot": "^1.1.0",
"debug": "^4.3.4",
"denque": "^2.1.0",
@@ -5483,28 +5479,16 @@
}
},
"node_modules/ip-address": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
- "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
+ "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
"dev": true,
"license": "MIT",
"optional": true,
- "dependencies": {
- "jsbn": "1.1.0",
- "sprintf-js": "^1.1.3"
- },
"engines": {
"node": ">= 12"
}
},
- "node_modules/ip-address/node_modules/sprintf-js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true
- },
"node_modules/ipaddr.js": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
@@ -5727,9 +5711,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
- "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -6133,16 +6117,16 @@
}
},
"node_modules/jest-diff": {
- "version": "30.0.4",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz",
- "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==",
+ "version": "30.1.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.1.tgz",
+ "integrity": "sha512-LUU2Gx8EhYxpdzTR6BmjL1ifgOAQJQELTHOiPv9KITaKjZvJ9Jmgigx01tuZ49id37LorpGc9dPBPlXTboXScw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/diff-sequences": "30.0.1",
- "@jest/get-type": "30.0.1",
+ "@jest/get-type": "30.1.0",
"chalk": "^4.1.2",
- "pretty-format": "30.0.2"
+ "pretty-format": "30.0.5"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -6372,35 +6356,35 @@
}
},
"node_modules/jest-matcher-utils": {
- "version": "30.0.4",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz",
- "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==",
+ "version": "30.1.1",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.1.tgz",
+ "integrity": "sha512-SuH2QVemK48BNTqReti6FtjsMPFsSOD/ZzRxU1TttR7RiRsRSe78d03bb4Cx6D4bQC/80Q8U4VnaaAH9FlbZ9w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/get-type": "30.0.1",
+ "@jest/get-type": "30.1.0",
"chalk": "^4.1.2",
- "jest-diff": "30.0.4",
- "pretty-format": "30.0.2"
+ "jest-diff": "30.1.1",
+ "pretty-format": "30.0.5"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "30.0.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
- "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.1.0.tgz",
+ "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
- "@jest/types": "30.0.1",
+ "@jest/types": "30.0.5",
"@types/stack-utils": "^2.0.3",
"chalk": "^4.1.2",
"graceful-fs": "^4.2.11",
"micromatch": "^4.0.8",
- "pretty-format": "30.0.2",
+ "pretty-format": "30.0.5",
"slash": "^3.0.0",
"stack-utils": "^2.0.6"
},
@@ -6409,9 +6393,9 @@
}
},
"node_modules/jest-message-util/node_modules/@jest/schemas": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
- "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6422,14 +6406,14 @@
}
},
"node_modules/jest-message-util/node_modules/@jest/types": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
- "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz",
+ "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/pattern": "30.0.1",
- "@jest/schemas": "30.0.1",
+ "@jest/schemas": "30.0.5",
"@types/istanbul-lib-coverage": "^2.0.6",
"@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
@@ -6441,31 +6425,31 @@
}
},
"node_modules/jest-message-util/node_modules/@sinclair/typebox": {
- "version": "0.34.37",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz",
- "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==",
+ "version": "0.34.40",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz",
+ "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==",
"dev": true,
"license": "MIT"
},
"node_modules/jest-mock": {
- "version": "30.0.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
- "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz",
+ "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "30.0.1",
+ "@jest/types": "30.0.5",
"@types/node": "*",
- "jest-util": "30.0.2"
+ "jest-util": "30.0.5"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-mock/node_modules/@jest/schemas": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
- "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6476,14 +6460,14 @@
}
},
"node_modules/jest-mock/node_modules/@jest/types": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
- "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz",
+ "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/pattern": "30.0.1",
- "@jest/schemas": "30.0.1",
+ "@jest/schemas": "30.0.5",
"@types/istanbul-lib-coverage": "^2.0.6",
"@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
@@ -6495,9 +6479,9 @@
}
},
"node_modules/jest-mock/node_modules/@sinclair/typebox": {
- "version": "0.34.37",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz",
- "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==",
+ "version": "0.34.40",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz",
+ "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==",
"dev": true,
"license": "MIT"
},
@@ -6995,13 +6979,13 @@
}
},
"node_modules/jest-util": {
- "version": "30.0.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
- "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz",
+ "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "30.0.1",
+ "@jest/types": "30.0.5",
"@types/node": "*",
"chalk": "^4.1.2",
"ci-info": "^4.2.0",
@@ -7013,9 +6997,9 @@
}
},
"node_modules/jest-util/node_modules/@jest/schemas": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
- "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7026,14 +7010,14 @@
}
},
"node_modules/jest-util/node_modules/@jest/types": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
- "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz",
+ "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/pattern": "30.0.1",
- "@jest/schemas": "30.0.1",
+ "@jest/schemas": "30.0.5",
"@types/istanbul-lib-coverage": "^2.0.6",
"@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
@@ -7045,16 +7029,16 @@
}
},
"node_modules/jest-util/node_modules/@sinclair/typebox": {
- "version": "0.34.37",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz",
- "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==",
+ "version": "0.34.40",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz",
+ "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==",
"dev": true,
"license": "MIT"
},
"node_modules/jest-util/node_modules/ci-info": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
- "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz",
+ "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==",
"dev": true,
"funding": [
{
@@ -7068,9 +7052,9 @@
}
},
"node_modules/jest-util/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7248,14 +7232,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsbn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -7315,9 +7291,9 @@
}
},
"node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
@@ -8177,9 +8153,9 @@
}
},
"node_modules/node-addon-api": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.4.0.tgz",
- "integrity": "sha512-D9DI/gXHvVmjHS08SVch0Em8G5S1P+QWtU31appcKT/8wFSPRcdHadIFSAntdMMVM5zz+/DL+bL/gz3UDppqtg==",
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz",
+ "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==",
"license": "MIT",
"engines": {
"node": "^18 || ^20 || >= 21"
@@ -8493,15 +8469,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -8694,9 +8661,9 @@
}
},
"node_modules/pino": {
- "version": "9.7.0",
- "resolved": "https://registry.npmjs.org/pino/-/pino-9.7.0.tgz",
- "integrity": "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.9.0.tgz",
+ "integrity": "sha512-zxsRIQG9HzG+jEljmvmZupOMDUQ0Jpj0yAgE28jQvvrdYTlEaiGwelJpdndMl/MBuRr70heIj83QyqJUWaU8mQ==",
"license": "MIT",
"dependencies": {
"atomic-sleep": "^1.0.0",
@@ -8790,13 +8757,13 @@
}
},
"node_modules/pretty-format": {
- "version": "30.0.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
- "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz",
+ "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/schemas": "30.0.1",
+ "@jest/schemas": "30.0.5",
"ansi-styles": "^5.2.0",
"react-is": "^18.3.1"
},
@@ -8805,9 +8772,9 @@
}
},
"node_modules/pretty-format/node_modules/@jest/schemas": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
- "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8818,9 +8785,9 @@
}
},
"node_modules/pretty-format/node_modules/@sinclair/typebox": {
- "version": "0.34.37",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz",
- "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==",
+ "version": "0.34.40",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz",
+ "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==",
"dev": true,
"license": "MIT"
},
@@ -9026,16 +8993,16 @@
}
},
"node_modules/redis": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/redis/-/redis-5.8.0.tgz",
- "integrity": "sha512-re0MHm1KHbiVIUPDGoUM3jldvjH5EM/wGZ3A33gyUYoC/UnVNKNnZHM5hcJVry7L2O2eJU3nflSXTliv10BTKg==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-5.8.2.tgz",
+ "integrity": "sha512-31vunZj07++Y1vcFGcnNWEf5jPoTkGARgfWI4+Tk55vdwHxhAvug8VEtW7Cx+/h47NuJTEg/JL77zAwC6E0OeA==",
"license": "MIT",
"dependencies": {
- "@redis/bloom": "5.8.0",
- "@redis/client": "5.8.0",
- "@redis/json": "5.8.0",
- "@redis/search": "5.8.0",
- "@redis/time-series": "5.8.0"
+ "@redis/bloom": "5.8.2",
+ "@redis/client": "5.8.2",
+ "@redis/json": "5.8.2",
+ "@redis/search": "5.8.2",
+ "@redis/time-series": "5.8.2"
},
"engines": {
"node": ">= 18"
@@ -9282,9 +9249,9 @@
"license": "MIT"
},
"node_modules/safe-regex2": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.1.tgz",
- "integrity": "sha512-goqsB+bSlOmVX+CiFX2PFc1OV88j5jvBqIM+DgqrucHnUguAUNtiNOs+aTadq2NqsLQ+TQ3UEVG3gtSFcdlkCg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.0.0.tgz",
+ "integrity": "sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==",
"funding": [
{
"type": "github",
@@ -9552,14 +9519,14 @@
}
},
"node_modules/socks": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz",
- "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==",
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz",
+ "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "ip-address": "^9.0.5",
+ "ip-address": "^10.0.1",
"smart-buffer": "^4.2.0"
},
"engines": {
@@ -10089,18 +10056,6 @@
"node": ">=8"
}
},
- "node_modules/tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "license": "MIT",
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -10272,9 +10227,9 @@
"license": "MIT"
},
"node_modules/undici-types": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
- "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
+ "version": "7.10.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
+ "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
"license": "MIT"
},
"node_modules/unique-filename": {
diff --git a/package.json b/package.json
index aa089f2e..b22ac7eb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@formidablejs/framework",
- "version": "0.28.3",
+ "version": "0.28.4",
"description": "Formidable Framework Core",
"author": "Donald Pakkies",
"license": "MIT",
diff --git a/src/Auth/Drivers/Driver.imba b/src/Auth/Drivers/Driver.imba
index 76809ed0..7ad8c7a4 100644
--- a/src/Auth/Drivers/Driver.imba
+++ b/src/Auth/Drivers/Driver.imba
@@ -282,7 +282,7 @@ export default class Driver
if isValid !== true
let errors = {}
- isValid.forEach do(field)
+ for field in isValid
errors[field] = [
"The {field} is invalid or has already taken."
]
diff --git a/src/Database/Database.imba b/src/Database/Database.imba
index 5314ed5d..3047c7f6 100644
--- a/src/Database/Database.imba
+++ b/src/Database/Database.imba
@@ -31,13 +31,13 @@ try
let results\object[] = await this
if columns && Array.isArray(columns) && columns.length > 0
- return results.map do(result)
+ let mappedResults = []
+ for result in results
const object = {}
-
for column in columns
object[column] = result[column]
-
- return object
+ mappedResults.push(object)
+ return mappedResults
if this._hidden && Array.isArray(this._hidden) && this._hidden.length > 0
for result in results
@@ -129,37 +129,56 @@ try
url = url.length > 1 ? url.replace(/\/+$/, '') + '/' : ''
+ params = []
+ keys = Object.keys(query)
+ for key in keys
+ params.push(key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.firstPage) : query[key]))
links.firstPage = {
label: 'First',
active: results.pagination.firstPage === results.pagination.currentPage,
- url: url + '?' + Object.keys(query).map(do(key) key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.firstPage) : query[key])).join('&')
+ url: url + '?' + params.join('&')
}
+ params = []
+ keys = Object.keys(query)
+ for key in keys
+ params.push(key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.prevPage) : query[key]))
links.prevPage = results.pagination.prevPage ? {
label: 'Previous',
active: results.pagination.prevPage === results.pagination.currentPage,
- url: url + '?' + Object.keys(query).map(do(key) key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.prevPage) : query[key])).join('&')
+ url: url + '?' + params.join('&')
} : null
for page in pages
query.page = page
-
+ params = []
+ keys = Object.keys(query)
+ for key in keys
+ params.push(key + '=' + encodeURIComponent(query[key]))
links[page] = {
label: page,
active: page === results.pagination.currentPage,
- url: url + '?' + Object.keys(query).map(do(key) key + '=' + encodeURIComponent(query[key])).join('&')
+ url: url + '?' + params.join('&')
}
+ params = []
+ keys = Object.keys(query)
+ for key in keys
+ params.push(key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.nextPage) : query[key]))
links.nextPage = results.pagination.nextPage ? {
label: 'Next',
active: results.pagination.nextPage === results.pagination.currentPage,
- url: url + '?' + Object.keys(query).map(do(key) key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.nextPage) : query[key])).join('&')
+ url: url + '?' + params.join('&')
} : null
+ params = []
+ keys = Object.keys(query)
+ for key in keys
+ params.push(key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.lastPage) : query[key]))
links.lastPage = {
label: 'Last',
active: results.pagination.lastPage === results.pagination.currentPage,
- url: url + '?' + Object.keys(query).map(do(key) key + '=' + encodeURIComponent(key == 'page' ? (results.pagination.lastPage) : query[key])).join('&')
+ url: url + '?' + params.join('&')
}
results.pagination.links = links
diff --git a/src/Environment/Repository.imba b/src/Environment/Repository.imba
index b7e1f636..ed2ff47a 100644
--- a/src/Environment/Repository.imba
+++ b/src/Environment/Repository.imba
@@ -36,9 +36,12 @@ export default class Repository
const results = output.match(/\$\{(.*?)\}/g)
if !isEmpty(results)
- results.forEach do(variable)
+ for variable in results
output = output.replace(variable, self.variables[variable.slice(2, -1)])
+ # results.forEach do(variable)
+ # output = output.replace(variable, self.variables[variable.slice(2, -1)])
+
if isEmpty(output) then return default
['true', 'false'].includes(output.toLowerCase!) ? output = JSON.parse(output) : (output === 'null' ? null : output)
diff --git a/src/Foundation/Application.imba b/src/Foundation/Application.imba
index 7e5ec81a..e8cb26b3 100644
--- a/src/Foundation/Application.imba
+++ b/src/Foundation/Application.imba
@@ -227,5 +227,5 @@ export default class Application
resolver.register!
if resolver.context && Array.isArray(resolver.context)
- resolver.context.forEach do(context)
+ for context in resolver.context
self.context.inject(context)
diff --git a/src/Foundation/Console.imba b/src/Foundation/Console.imba
index 74ee2409..9b03d7ce 100644
--- a/src/Foundation/Console.imba
+++ b/src/Foundation/Console.imba
@@ -125,7 +125,11 @@ export default class Console
const nodeEnv = args.find do(arg) arg.startsWith('--MODE=')
const nodeEnvValue = nodeEnv ? nodeEnv.split('=')[1] : 'development'
- process.argv = process.argv.filter do(arg) !arg.startsWith('--MODE=')
+ let filteredArgv = []
+ for arg in process.argv
+ if !arg.startsWith('--MODE=')
+ filteredArgv.push(arg)
+ process.argv = filteredArgv
modes.includes(nodeEnvValue)
@@ -148,7 +152,7 @@ export default class Console
let host = 'localhost'
let addr = false
- args.forEach do(arg)
+ for arg in args
port = arg.split('=')[1] if arg.startsWith('--port')
host = arg.split('=')[1] if arg.startsWith('--host') || arg.startsWith('-h')
addr = true if arg == '--addr'
diff --git a/src/Foundation/Console/Commands/DbSeedCommand.imba b/src/Foundation/Console/Commands/DbSeedCommand.imba
index 63de523f..b906cd99 100644
--- a/src/Foundation/Console/Commands/DbSeedCommand.imba
+++ b/src/Foundation/Console/Commands/DbSeedCommand.imba
@@ -63,7 +63,7 @@ export class DbSeedCommand < Command
const root = process.cwd!
Output.group { newLine: false }, do
- results[0].forEach do(seeder)
+ for seeder in results[0]
self.message 'info', "Seeder \x1b[1m[{seeder.substring(root.length + 1)}]\x1b[0m ran successfully."
exit!
diff --git a/src/Foundation/Console/Commands/MigrationCommand.imba b/src/Foundation/Console/Commands/MigrationCommand.imba
index 16fdaefd..309d0f74 100644
--- a/src/Foundation/Console/Commands/MigrationCommand.imba
+++ b/src/Foundation/Console/Commands/MigrationCommand.imba
@@ -52,7 +52,7 @@ export class MigrationCommand < Command
if results[1].length > 0
Output.group { newLine: false }, do
- results[1].forEach do(migration)
+ for migration in results[1]
self.message 'info', "{action === 'rollback' ? 'Rollback' : 'Migrate'}: {migration}"
if exitOnEnd
diff --git a/src/Foundation/Console/Commands/PackagePublishCommand.imba b/src/Foundation/Console/Commands/PackagePublishCommand.imba
index 6b1bc77f..b9b4406f 100644
--- a/src/Foundation/Console/Commands/PackagePublishCommand.imba
+++ b/src/Foundation/Console/Commands/PackagePublishCommand.imba
@@ -64,7 +64,8 @@ export class PackagePublishCommand < Command
def handle
let tags\string[] = self.option('tag').split(',')
- tags.forEach do(optTag) self.persist optTag
+ for optTag in tags
+ self.persist optTag
self.exit!
@@ -75,7 +76,7 @@ export class PackagePublishCommand < Command
if typeof self.publisher[optTag] !== 'object'
return self.write "{optTag} is missing paths."
- Object.keys(self.publisher[optTag].paths).forEach do(entry)
+ for entry in Object.keys(self.publisher[optTag].paths)
const file = join self.package, self.publisher[optTag].paths[entry]
if existsSync(entry) && !self.option('force', false)
diff --git a/src/Foundation/Console/Commands/RouteListCommand.imba b/src/Foundation/Console/Commands/RouteListCommand.imba
index e1dcecce..1cc828aa 100644
--- a/src/Foundation/Console/Commands/RouteListCommand.imba
+++ b/src/Foundation/Console/Commands/RouteListCommand.imba
@@ -24,9 +24,13 @@ export class RouteListCommand < Command
const list = []
const methods = self.option('method') ? (Array.isArray(self.option('method')) ? self.option('method') : [self.option('method')]) : ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD', 'TRACE', 'CONNECT']
- const routes = self.app.routes!.filter(do(route)
- methods.map(do(method) method.toUpperCase!).includes(route.method.toUpperCase!)
- )
+ let normalizedMethods = []
+ for method in methods
+ normalizedMethods.push(method.toUpperCase!)
+ let routes = []
+ for route in self.app.routes!
+ if normalizedMethods.includes(route.method.toUpperCase!)
+ routes.push(route)
if self.option('legacy')
self.table(routes)
diff --git a/src/Foundation/Console/Commands/ShellCommand.imba b/src/Foundation/Console/Commands/ShellCommand.imba
index b46f2249..054126ec 100644
--- a/src/Foundation/Console/Commands/ShellCommand.imba
+++ b/src/Foundation/Console/Commands/ShellCommand.imba
@@ -38,7 +38,8 @@ export class ShellCommand < Command
imbaRepl.registerCallback do(ctx)
const context = app.context.registered
- Object.keys(context).forEach do(key) if !ctx[key] then ctx[key] = context[key]
+ for key in Object.keys(context)
+ if !ctx[key] then ctx[key] = context[key]
const server\REPLServer = await imbaRepl.run!
diff --git a/src/Http/Kernel.imba b/src/Http/Kernel.imba
index 8f15e6a1..908a048d 100644
--- a/src/Http/Kernel.imba
+++ b/src/Http/Kernel.imba
@@ -49,16 +49,16 @@ export default class Kernel
const middlewareAliases = self.middlewareAliases ?? self.routeMiddleware
# get route grouped middleware list.
- Object.values((_middleware ? _middleware : route.middleware) || []).forEach do(middleware)
+ middlewareArr = Object.values((_middleware ? _middleware : route.middleware) || [])
+ for middleware in middlewareArr
if typeof middleware === 'string'
if typeof middleware.split(':')[1] === 'string' then params = middleware.split(':')[1].split(',')
-
middleware = middleware.split(':')[0]
if self.middlewareGroups[middleware]
const groupedList = self.middlewareGroups[middleware]
-
- Object.values(groupedList).forEach do(match)
+ const groupedArr = Object.values(groupedList)
+ for match in groupedArr
if typeof match == 'string' && typeof match.split(':')[1] === 'string'
params = match.split(':')[1].split(',')
match = match.split(':')[0]
@@ -171,8 +171,8 @@ export default class Kernel
def hasRoutes router\FastifyInstance, config
for route in Route.all!
if isArray(route.action) || isFunction(route.action) || isClass(route.action) || route.action.constructor.name === 'AsyncFunction'
- router.route({
- method: route.method.toUpperCase!
+ const domainPayload = {
+ method: route.method == 'any' ? ['DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT'] : route.method.toUpperCase!
url: route.path
handler: do(req\FastifyRequest, reply\FastifyReply)
const request = req.#context
@@ -198,7 +198,14 @@ export default class Kernel
await self.resolveMiddleware('timeout', route, request, reply, config)
- })
+ }
+
+ if route.domain
+ domainPayload.constraints = {
+ host: route.domain
+ }
+
+ router.route(domainPayload)
else
routes.invalid.push(route.path)
diff --git a/src/Http/Middleware/TransformsRequest.imba b/src/Http/Middleware/TransformsRequest.imba
index 0bd605d4..d3f0d434 100644
--- a/src/Http/Middleware/TransformsRequest.imba
+++ b/src/Http/Middleware/TransformsRequest.imba
@@ -10,15 +10,12 @@ export default class TransformsRequest
def clean request
if (request.request.body && request.request.body.constructor === ({}).constructor)
- const results = Object.keys(request.request.body).map do(key)
+ let results = []
+ for key in Object.keys(request.request.body)
let value = request.request.body[key]
-
if except.includes(key) == false
value = transform(key, request.input(key))
-
- {
- [key]: value
- }
+ results.push({ [key]: value })
let output = {}
diff --git a/src/Http/Request/FileCollection.imba b/src/Http/Request/FileCollection.imba
index 0dd8dd5a..addbb7d3 100644
--- a/src/Http/Request/FileCollection.imba
+++ b/src/Http/Request/FileCollection.imba
@@ -68,9 +68,13 @@ export default class FileCollection
* @returns {void}
*/
def each callback\function, _this\null
- if isEmpty(_this) then return self._object.forEach callback, _this
+ if isEmpty(_this)
+ for file in self._object
+ callback file, _this
+ return
- self._object.forEach callback
+ for file in self._object
+ callback file
/**
* Calls a defined callback function on each File of an array, and returns an array that contains the results.
@@ -80,9 +84,14 @@ export default class FileCollection
* @returns {File[]}
*/
def map callback\function, _this\null
- if isEmpty(_this) then return self._object.map callback, _this
-
- self._object.map callback
+ let result = []
+ if isEmpty(_this)
+ for file in self._object
+ result.push(callback(file, _this))
+ return result
+ for file in self._object
+ result.push(callback(file))
+ return result
/**
* Returns the files of an array that meet the condition specified in a callback function.
@@ -92,9 +101,16 @@ export default class FileCollection
* @returns {File[]}
*/
def filter callback\function, _this\null
- if isEmpty(_this) then return self._object.filter callback, _this
-
- self._object.filter callback
+ let result = []
+ if isEmpty(_this)
+ for file in self._object
+ if callback(file, _this)
+ result.push(file)
+ return result
+ for file in self._object
+ if callback(file)
+ result.push(file)
+ return result
/**
* Filter files using the where condition.
@@ -123,8 +139,10 @@ export default class FileCollection
*/
def get
let filtered = self._object
-
for condition\{ key: string, value: any } in self._conditions
- filtered = filtered.filter do(file) file[condition.key] == condition.value
-
- filtered
+ let temp = []
+ for file in filtered
+ if file[condition.key] == condition.value
+ temp.push(file)
+ filtered = temp
+ return filtered
diff --git a/src/Http/Request/FormRequest.imba b/src/Http/Request/FormRequest.imba
index 2c941290..07958a6a 100644
--- a/src/Http/Request/FormRequest.imba
+++ b/src/Http/Request/FormRequest.imba
@@ -211,7 +211,8 @@ export default class FormRequest
def setHeaders headers\object
const req = this
- Object.keys(headers).forEach do(value)
+ const headerKeys = Object.keys(headers)
+ for value in headerKeys
req.setHeader(value, headers[value])
this
@@ -342,9 +343,8 @@ export default class FormRequest
const body\object = this.body!
- keys.forEach do(key)
+ for key in keys
const value = body[key]
-
if value
Object.assign response, {
[key]: value
diff --git a/src/Http/Router/Route.imba b/src/Http/Router/Route.imba
index 3683f2ee..8d564c03 100644
--- a/src/Http/Router/Route.imba
+++ b/src/Http/Router/Route.imba
@@ -6,11 +6,12 @@ import type View from '../View/View'
const routes = []
const middleware = []
const prefix = []
+const domain = []
export default class Route
static def addRoute verb\string, pattern\string, action\function|[function, string]
- if !['delete', 'get', 'options', 'patch', 'post', 'put'].includes verb
+ if !['delete', 'get', 'options', 'patch', 'post', 'put', 'any'].includes verb
throw new Error "{verb} is not a valid HTTP verb."
if typeof pattern !== 'string' || (isString(pattern) && pattern.trim! == '')
@@ -22,70 +23,81 @@ export default class Route
middleware: middleware.flat!
action: action
name: null
+ domain: domain.length > 0 ? domain[domain.length - 1] : null
}
this
- /**
- * Check if route exists.
- */
+ # Match specific verbs.
+ static def match verbs\string[], path\string, action\function|[function, string]
+ if !verbs.every(do(verb) ['delete', 'get', 'options', 'patch', 'post', 'put'].includes(verb))
+ throw new Error "{verb} is not a valid HTTP verb."
+
+ if typeof pattern !== 'string' || (isString(pattern) && pattern.trim! == '')
+ throw new Error 'Invalid route path.'
+
+ for verb in verbs
+ routes.push {
+ method: verb
+ path: Path.clean prefix, pattern.trim!
+ middleware: middleware.flat!
+ action: action
+ name: null
+ domain: domain.length > 0 ? domain[domain.length - 1] : null
+ }
+
+ this
+
+ # Check if route exists.
static def has name\string
if routes.length === 0 then return false
- const names = routes.map do(route) route.name
+ names = []
+ for route in routes
+ names.push route.name
names.includes(name)
- /**
- * Add a get route that renders a view.
- */
+ # Add a get route that renders a view.
static def view path\string, view\View, data\object = {}, statusCode\number|null = null
self.get path, do
ViewResponse.make(view, data, statusCode ?? 200)
- /**
- * Add a delete route.
- */
+ # Add a delete route.
static def delete path\string, action\function|[function, string]
self.addRoute 'delete', path, action
- /**
- * Add a get route.
- */
+ # Add a get route.
static def get path\string, action\function|[function, string]
self.addRoute 'get', path, action
- /**
- * Add a options route.
- */
+ # Add a options route.
static def options path\string, action\function|[function, string]
self.addRoute 'options', path, action
- /**
- * Add a patch route.
- */
+ # Add a patch route.
static def patch path\string, action\function|[function, string]
self.addRoute 'patch', path, action
- /**
- * Add a post route.
- */
+ # Add a post route.
static def post path\string, action\function|[function, string]
self.addRoute 'post', path, action
- /**
- * Add a put route.
- */
+ # Add a put route.
static def put path\string, action\function|[function, string]
self.addRoute 'put', path, action
- /**
- * Set route name.
- */
+ # Add any route.
+ static def any path\string, action\function|[function, string]
+ self.addRoute 'any', path, action
+
+ # Set route name.
static def name name\string
if routes.length === 0 then return this
- const names = routes.map do(route) route.name
+ names = []
+ for route in routes
+ names.push route.name
if names.includes name
throw new Error "\"{name}\" is already in use by another route."
@@ -94,28 +106,25 @@ export default class Route
this
- /**
- * Add middleware to route.
- */
+ # Add middleware to route.
static def middleware name\string|string[]
if routes.length === 0 then return this
if !Array.isArray name then name = [name]
- name.forEach do(middleware)
+ for middleware in name
routes.slice(-1).pop!.middleware.push middleware
this
- /**
- * Add grouped routes.
- */
+ # Add grouped routes.
static def group options = new Object, callable\function
if !options || options && typeof options !== 'object'
throw new Error 'Invalid route group.'
let groupPrefix = options['prefix'] ? options['prefix'] : ''
let groupMiddleware = options['middleware'] ? options['middleware'] : []
+ let groupDomain = options['domain'] ? options['domain'] : null
# validate prefix
if typeof groupPrefix !== 'string' || groupPrefix.trim! === '/'
@@ -128,21 +137,28 @@ export default class Route
if !Array.isArray groupMiddleware
groupMiddleware = [groupMiddleware]
+ if groupDomain? and typeof groupDomain != 'string'
+ throw new Error 'Invalid domain.'
+
# append prefix
let prefixIndex = 0
+ let domainIndex = 0
if groupPrefix.trim! !== ''
prefix.push groupPrefix.trim!
prefixIndex = prefix.length - 1
+ if groupDomain?
+ domain.push groupDomain
+ domainIndex = domain.length - 1
+
let middlewareIndex = []
# push middleware
if groupMiddleware.length > 0
- groupMiddleware.forEach do(m)
+ for m in groupMiddleware
middleware.push m
-
middlewareIndex.push middleware.length - 1
# call callable
@@ -152,10 +168,14 @@ export default class Route
if groupPrefix.trim! !== ''
prefix.splice prefixIndex
+ if groupDomain?
+ domain.splice domainIndex
+
# remove pushed middleware
if middlewareIndex.length > 0
- middlewareIndex.forEach do(index)
+ for index in middlewareIndex
middleware.splice index
+ # Get all routes.
static def all
routes
diff --git a/src/Http/URL/URL.imba b/src/Http/URL/URL.imba
index d956893e..35df3051 100644
--- a/src/Http/URL/URL.imba
+++ b/src/Http/URL/URL.imba
@@ -35,12 +35,11 @@ export default class URL
let query = {}
const uri = []
- Object.keys(params).forEach(do(key)
+ for key in Object.keys(params)
if !selected.params.includes(":{key}") && key !== '_query'
query[key] = params[key]
- )
- selected.path.split('/').forEach(do(value)
+ for value in selected.path.split('/')
if value.startsWith(':')
value = value.slice(1)
@@ -50,7 +49,6 @@ export default class URL
else value = params[value]
uri.push value
- )
query = (new URLSearchParams(Object.assign(query, (params._query ?? {})))).toString()
diff --git a/src/Mix/Repository.imba b/src/Mix/Repository.imba
index e3004afd..99b71a00 100644
--- a/src/Mix/Repository.imba
+++ b/src/Mix/Repository.imba
@@ -14,9 +14,9 @@ export default class Repository
static def manifest
const location\string = path.join(process.cwd!, 'public', 'mix-manifest.json')
- if fs.existsSync(location)
- const content\string = fs.readFileSync(location, 'utf8')
-
+ try
+ await fs.promises.access(location)
+ const content\string = await fs.promises.readFile(location, 'utf8')
return content ? JSON.parse(content) : null
-
- null
+ catch err
+ return null
diff --git a/src/Support/Decorators/use.imba b/src/Support/Decorators/use.imba
index 960f3577..163fef85 100644
--- a/src/Support/Decorators/use.imba
+++ b/src/Support/Decorators/use.imba
@@ -106,11 +106,13 @@ def DI target, key, descriptor, paramaters = null
if !isEmpty(request.auth)
response.auth = request.auth
- if !response.passesAuthorization! then response.failedAuthorization!
+ const passesAuth = await response.passesAuthorization!
+
+ if !passesAuth then response.failedAuthorization!
parsed.request = true
- Object.keys(request).map do(key)
+ for key in Object.keys(request)
if isEmpty(response[key]) then response[key] = request[key]
const validator = response.validate!
diff --git a/src/Support/Helpers/config.imba b/src/Support/Helpers/config.imba
index 85bddca3..46870f50 100644
--- a/src/Support/Helpers/config.imba
+++ b/src/Support/Helpers/config.imba
@@ -3,17 +3,19 @@ import dot from './dotNotation'
import path from 'path'
def fallback notation\string, default\any = null
+ if !notation or typeof notation != 'string'
+ throw new ConfigNotCachedError
try
const app = require('../../Foundation/Application').default
-
app.getConfig(notation, default)
catch e
throw new ConfigNotCachedError
export default def config notation\string, default\any = null
+ if !notation or typeof notation != 'string'
+ return default
try
const config = require(path.join(process.cwd!, 'bootstrap', 'cache', 'config.json'))
-
- dot(config, notation) ?? default
+ return dot(config, notation) ?? default
catch e
- fallback(notation, default)
+ return fallback(notation, default)
diff --git a/src/Support/Helpers/dotNotation.imba b/src/Support/Helpers/dotNotation.imba
index 1c5256a5..43760539 100644
--- a/src/Support/Helpers/dotNotation.imba
+++ b/src/Support/Helpers/dotNotation.imba
@@ -8,7 +8,7 @@ export default def dotNotation object\object, key\string
if !isString key
throw new TypeError 'Expected string'
- const results = key.split('.').reduce(&, object) do(o, i)
- o ? o[i] ?? null : null
-
- results
+ let result = object
+ for i in key.split('.')
+ result = result ? result[i] ?? null : null
+ result
diff --git a/src/Support/Helpers/env.imba b/src/Support/Helpers/env.imba
index 270694ae..05d6d09a 100644
--- a/src/Support/Helpers/env.imba
+++ b/src/Support/Helpers/env.imba
@@ -13,7 +13,7 @@ export default def env key\string, default\any = null
const results = output.match(/\$\{(.*?)\}/g)
if !isEmpty(results)
- results.forEach do(variable)
+ for variable in results
output = output.replace(variable, process.env[variable.slice(2, -1)])
if isEmpty(output) then return default
diff --git a/src/Support/Helpers/imbaEnv.imba b/src/Support/Helpers/imbaEnv.imba
index 5b6ac5a8..87162486 100644
--- a/src/Support/Helpers/imbaEnv.imba
+++ b/src/Support/Helpers/imbaEnv.imba
@@ -6,4 +6,6 @@ export default def imbaEnv stringify\boolean = true
if env.startsWith(prefix)
envList[env] = value
- stringify ? JSON.stringify(envList) : envList
+ if stringify
+ return JSON.stringify(envList)
+ return envList
diff --git a/src/Support/Helpers/isEmpty.imba b/src/Support/Helpers/isEmpty.imba
index 814e6cc0..19842b61 100644
--- a/src/Support/Helpers/isEmpty.imba
+++ b/src/Support/Helpers/isEmpty.imba
@@ -19,7 +19,9 @@ export default def isEmpty value\any
if isArray(value) && value.length === 0
return true
- if isObject(value) && Object.keys(value).length === 0
- return true
+ if isObject(value)
+ keys = Object.keys(value)
+ if keys.length === 0
+ return true
return false
diff --git a/src/Support/Helpers/toBoolean.imba b/src/Support/Helpers/toBoolean.imba
index 4cd6ab09..685e99c0 100644
--- a/src/Support/Helpers/toBoolean.imba
+++ b/src/Support/Helpers/toBoolean.imba
@@ -16,4 +16,4 @@ export default def toBoolean value
if !isString(value)
throw new BooleanCastError("Can't convert {value} to boolean.")
- JSON.parse value.toLowerCase!
+ return JSON.parse(value.toLowerCase!)
diff --git a/src/Support/Helpers/updateLine.imba b/src/Support/Helpers/updateLine.imba
index cd4491cb..a8a35bf3 100644
--- a/src/Support/Helpers/updateLine.imba
+++ b/src/Support/Helpers/updateLine.imba
@@ -7,9 +7,9 @@ export def updateLine file\string, callback\function
const contents = readFileSync(file, 'utf8')
const lines = []
+ const splitLines = contents.split('\n')
+ for index in [0...splitLines.length]
+ lines.push callback(splitLines[index], index)
- contents.split('\n').map do(line, index) lines.push callback(line, index)
-
- writeFileSync file, lines.join('\n'), { encoding: 'utf8' }
-
- true
+ writeFileSync(file, lines.join('\n'), { encoding: 'utf8' })
+ return true
diff --git a/src/Support/Helpers/wildcard.imba b/src/Support/Helpers/wildcard.imba
index 740ed95c..fd4b4823 100644
--- a/src/Support/Helpers/wildcard.imba
+++ b/src/Support/Helpers/wildcard.imba
@@ -9,4 +9,10 @@ export default def wildcard value\string, match\string
const escapeRegex = do(value) value.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")
- new RegExp("^" + match.split("*").map(escapeRegex).join(".*") + "$").test value
+ let parts = match.split("*")
+ let regexStr = ""
+ for idx in [0...parts.length]
+ regexStr += escapeRegex(parts[idx])
+ if idx < parts.length - 1
+ regexStr += ".*"
+ new RegExp("^" + regexStr + "$").test value
diff --git a/src/Support/Helpers/without.imba b/src/Support/Helpers/without.imba
index dd716035..6638aa7f 100644
--- a/src/Support/Helpers/without.imba
+++ b/src/Support/Helpers/without.imba
@@ -8,9 +8,9 @@ export default def without object\object, exclude\string[]
const output = {}
- Object.keys(object).forEach do(key)
- if !exclude.includes(key) then Object.assign(output, {
- [ key ] : object[key]
- })
+ keys = Object.keys(object)
+ for key in keys
+ if !exclude.includes(key)
+ output[key] = object[key]
output
diff --git a/src/Support/Language/Language.imba b/src/Support/Language/Language.imba
index fb0a4559..c8ca8ae8 100644
--- a/src/Support/Language/Language.imba
+++ b/src/Support/Language/Language.imba
@@ -5,7 +5,7 @@ import path from 'path'
def getDirectories location
const all = []
- fs.readdirSync(location).forEach do(folder)
+ for folder in fs.readdirSync(location)
if fs.statSync(path.join(location, folder)).isDirectory! then all.push folder
all
@@ -40,11 +40,11 @@ export default class Language
def register location\string
const packs = getDirectories location
- packs.forEach do(pack)
+ for pack in packs
if !self.lang.packs[pack]
self.lang.packs[pack] = {}
- fs.readdirSync(path.join(location, pack)).forEach do(file)
+ for file in fs.readdirSync(path.join(location, pack))
if path.extname(file) == '.json'
const definition = {
[path.parse(file).name]: require path.join(location, pack, file)
diff --git a/src/Validator/ValidationServiceResolver.imba b/src/Validator/ValidationServiceResolver.imba
index 60180602..3b88f40b 100644
--- a/src/Validator/ValidationServiceResolver.imba
+++ b/src/Validator/ValidationServiceResolver.imba
@@ -18,27 +18,52 @@ export default class ValidationServiceResolver < ServiceResolver
true
def unique value\string, definition\string, field\string, passes\CallableFunction
+ let rawDef = definition.trim!
+ let conditionBlock = null
+
+ if rawDef.includes('[')
+ conditionBlock = rawDef.slice(rawDef.indexOf('[') + 1, rawDef.lastIndexOf(']'))
+ rawDef = rawDef.slice(0, rawDef.indexOf('[')) // remove condition part
+
let [
table,
column = field,
ignore = null
- ] = definition.split(',')
+ ] = rawDef.split(',')
let results
+ let query = DB.table(table)
+
if ignore
- const [
- identifierValue,
- identifierColumn = 'id'
- ] = ignore.split(':')
-
- results = await DB.table(table)
- .whereRaw("LOWER({column}) = LOWER(?) AND {identifierColumn} != ?", [ value, identifierValue ])
- .first!
+ let [identifierValue, identifierColumn = 'id'] = ignore.split(':')
+ query.whereRaw("LOWER({column}) = LOWER(?) AND {identifierColumn} != ?", [value, identifierValue])
else
- results = await DB.table(table)
- .whereRaw("LOWER({column}) = LOWER(?)", [ value ])
- .first!
+ query.whereRaw("LOWER({column}) = LOWER(?)", [value])
+
+ if conditionBlock
+ let conditionRegex = /(where(?:Not)?(?:In|Like|ILike|Null)?\(([^)]*)\))/g
+ let conditionMatch
+
+ while conditionMatch = conditionRegex.exec(conditionBlock)
+ let full = conditionMatch[1]
+ let method = full.split('(')[0].trim()
+ let args = conditionMatch[2].split(',').map do(x) x.trim()
+
+ args = args.map do(arg) arg === 'true' ? true : arg === 'false' ? false : arg === 'null' ? null : isNaN(arg) ? arg.replace(/^['"]|['"]$/g, '') : Number(arg)
+
+ if method in ['where', 'whereNot']
+ query[method](...args)
+ else if method in ['whereIn', 'whereNotIn']
+ query[method](args[0], args.slice(1))
+ else if method in ['whereLike', 'whereILike']
+ query[method](...args)
+ else if method in ['whereNull', 'whereNotNull']
+ query[method](args[0])
+ else
+ continue
+
+ results = await query.first!
passes(!results, "The {field} has already been taken.")
@@ -59,7 +84,7 @@ export default class ValidationServiceResolver < ServiceResolver
{ }
def registerRules rules\object
- Object.keys(rules).forEach do(name)
+ for name in Object.keys(rules)
Validator.get!.registerAsync(name, rules[name])
this
diff --git a/types/Http/Router/Route.d.ts b/types/Http/Router/Route.d.ts
index 81263334..4a6e6cb0 100644
--- a/types/Http/Router/Route.d.ts
+++ b/types/Http/Router/Route.d.ts
@@ -2,138 +2,117 @@ import { IMiddleware } from "../Middleware/IMiddleware";
import { IView } from "../View/View";
export default class Route {
-// /**
-// @param {string} verb
-// @param {string} pattern
-// @param {function|[function, string]} action
-// */
-// static addRoute(verb: string, pattern: string, action: Function | [Function, string]): typeof Route;
/**
- * Check if route exists.
- */
- /**
- *
* Check if route exists.
- * @param {string} name
+ * @param name - The route name to check
+ * @returns True if the route exists, false otherwise
*/
static has(name: string): boolean;
- /**
- * Add a get route that renders a view.
- */
- /**
- *
- * Add a get route that renders a view.
- @param {string} path
- @param {View} view
- @param {object} data
- @param {number|null} statusCode
- */
- static view(path: string, view: IView, data?: object, statusCode?: number | null): typeof Route;
- /**
- * Add a delete route.
- */
/**
- *
- * Add a delete route.
+ * Add a GET route that renders a view.
+ * @param path - The route path
+ * @param view - The view to render
+ * @param data - Optional data to pass to the view
+ * @param statusCode - Optional HTTP status code
+ * @returns The Route class for method chaining
+ */
+ static view(path: string, view: IView, data?: object, statusCode?: number | null): typeof Route;
- @param {string} path
- @param {function|[function, string]} action
- */
- static delete(path: string, action: Function | [Function, string]): typeof Route;
- /**
- * Add a get route.
- */
/**
- *
- * Add a get route.
+ * Add a DELETE route.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static delete(path: string, action: Function | [Function, string]): typeof Route;
- @param {string} path
- @param {function|[function, string]} action
- */
- static get(path: string, action: Function | [Function, string]): typeof Route;
/**
- * Add a options route.
- */
- /**
- *
- * Add a options route.
+ * Add a GET route.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static get(path: string, action: Function | [Function, string]): typeof Route;
- @param {string} path
- @param {function|[function, string]} action
- */
- static options(path: string, action: Function | [Function, string]): typeof Route;
- /**
- * Add a patch route.
- */
/**
- *
- * Add a patch route.
+ * Add an OPTIONS route.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static options(path: string, action: Function | [Function, string]): typeof Route;
- @param {string} path
- @param {function|[function, string]} action
- */
- static patch(path: string, action: Function | [Function, string]): typeof Route;
- /**
- * Add a post route.
- */
/**
- *
- * Add a post route.
+ * Add a PATCH route.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static patch(path: string, action: Function | [Function, string]): typeof Route;
- @param {string} path
- @param {function|[function, string]} action
- */
- static post(path: string, action: Function | [Function, string]): typeof Route;
- /**
- * Add a put route.
- */
/**
- *
- * Add a put route.
+ * Add a POST route.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static post(path: string, action: Function | [Function, string]): typeof Route;
- @param {string} path
- @param {function|[function, string]} action
- */
- static put(path: string, action: Function | [Function, string]): typeof Route;
- /**
- * Set route name.
- */
/**
- *
- * Set route name.
+ * Add a PUT route.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static put(path: string, action: Function | [Function, string]): typeof Route;
- @param {string} name
- */
- static name(name: string): typeof Route;
/**
- * Add middleware to route.
- */
- /**
- *
- * Add middleware to route.
+ * Add a route that matches any HTTP method.
+ * @param path - The route path
+ * @param action - The route handler function or [function, method] tuple
+ * @returns The Route class for method chaining
+ */
+ static any(path: string, action: Function | [Function, string]): typeof Route;
- @param {string | IMiddleware | Array} name
- */
- static middleware(name: string | IMiddleware | Array): typeof Route;
/**
- * Add grouped routes.
- */
+ * Set route name.
+ * @param name - The name to assign to the route
+ * @returns The Route class for method chaining
+ */
+ static name(name: string): typeof Route;
+
/**
- *
- * Add grouped routes.
+ * Add middleware to route.
+ * @param name - The middleware name, instance, or array of middleware
+ * @returns The Route class for method chaining
+ */
+ static middleware(name: string | IMiddleware | Array): typeof Route;
- @param {function} callable
- */
+ /**
+ * Add grouped routes.
+ * @param options - Group configuration options
+ * @param callable - Function containing the grouped routes
+ */
static group(options: GroupOptions, callable: Function): void;
+
+ /**
+ * Get all registered routes.
+ * @returns Array of all registered routes
+ */
static all(): any[];
}
export type GroupOptions = {
- prefix: string;
- middleware: IMiddleware | string | Array;
+ prefix: string;
+ middleware: IMiddleware | string | Array;
+ domain?: string;
+} | {
+ prefix: string;
+ domain?: string;
} | {
- prefix: string;
+ middleware: IMiddleware | string | Array;
+ domain?: string;
} | {
- middleware: IMiddleware | string | Array;
+ domain: string;
}