@cyberskill/shared 2.20.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/config/eslint/index.cjs +1 -1
  2. package/dist/config/eslint/index.d.ts +2 -7
  3. package/dist/config/eslint/index.js +1 -1
  4. package/dist/config/storybook/storybook.main.cjs +1 -1
  5. package/dist/config/storybook/storybook.main.js +1 -1
  6. package/dist/config/vitest/vitest.e2e.cjs +1 -1
  7. package/dist/config/vitest/vitest.e2e.js +6 -6
  8. package/dist/config/vitest/vitest.unit.cjs +1 -1
  9. package/dist/config/vitest/vitest.unit.js +5 -5
  10. package/dist/config/vitest/vitest.unit.setup.d.ts +0 -1
  11. package/dist/node/cli/index.cjs +4 -4
  12. package/dist/node/cli/index.js +56 -51
  13. package/dist/node/command/command.util.cjs +2 -2
  14. package/dist/node/command/command.util.d.ts +4 -1
  15. package/dist/node/command/command.util.js +125 -112
  16. package/dist/node/express/express.util.cjs +1 -1
  17. package/dist/node/express/express.util.js +24 -23
  18. package/dist/node/mongo/index.cjs +1 -1
  19. package/dist/node/mongo/index.d.ts +1 -0
  20. package/dist/node/mongo/index.js +15 -12
  21. package/dist/node/mongo/mongo.controller.cjs +1 -0
  22. package/dist/node/mongo/mongo.controller.d.ts +317 -0
  23. package/dist/node/mongo/mongo.controller.js +956 -0
  24. package/dist/node/mongo/mongo.controller.test.unit.d.ts +1 -0
  25. package/dist/node/mongo/mongo.type.d.ts +9 -10
  26. package/dist/node/mongo/mongo.util.cjs +5 -5
  27. package/dist/node/mongo/mongo.util.d.ts +32 -515
  28. package/dist/node/mongo/mongo.util.js +314 -1239
  29. package/dist/node/mongo/mongo.util.test.unit.d.ts +1 -0
  30. package/dist/node/path/path.constant.cjs +1 -1
  31. package/dist/node/path/path.constant.d.ts +2 -2
  32. package/dist/node/path/path.constant.js +120 -116
  33. package/dist/node/path/path.test.unit.d.ts +1 -0
  34. package/dist/node/path/path.util.d.ts +2 -2
  35. package/dist/react/loading/loading.component.cjs +2 -2
  36. package/dist/react/loading/loading.component.js +32 -19
  37. package/dist/react/loading/loading.test.unit.d.ts +1 -0
  38. package/dist/react/loading/loading.type.d.ts +2 -1
  39. package/dist/util/common/common.test.unit.d.ts +1 -0
  40. package/dist/util/common/common.util.cjs +1 -1
  41. package/dist/util/common/common.util.d.ts +3 -0
  42. package/dist/util/common/common.util.js +35 -35
  43. package/dist/util/index.cjs +1 -1
  44. package/dist/util/index.js +16 -15
  45. package/dist/util/object/index.cjs +1 -1
  46. package/dist/util/object/index.js +4 -3
  47. package/dist/util/object/object.test.unit.d.ts +1 -0
  48. package/dist/util/object/object.util.cjs +1 -1
  49. package/dist/util/object/object.util.d.ts +10 -30
  50. package/dist/util/object/object.util.js +110 -73
  51. package/dist/util/serializer/serializer.test.unit.d.ts +1 -0
  52. package/dist/util/serializer/serializer.util.cjs +1 -1
  53. package/dist/util/serializer/serializer.util.js +19 -16
  54. package/dist/util/string/string.test.unit.d.ts +1 -0
  55. package/dist/util/string/string.util.cjs +1 -1
  56. package/dist/util/string/string.util.d.ts +4 -3
  57. package/dist/util/string/string.util.js +32 -41
  58. package/dist/util/validate/validate.test.unit.d.ts +1 -0
  59. package/dist/util/validate/validate.util.cjs +1 -1
  60. package/dist/util/validate/validate.util.js +9 -9
  61. package/package.json +44 -51
  62. /package/dist/node_modules/.pnpm/{vitest@4.0.13_@types_debug@4.1.12_@types_node@24.10.1_jiti@2.6.1_jsdom@27.2.0_sass@1.94.2_tsx@4.20.6_yaml@2.8.1 → vitest@4.0.16_@types_node@25.0.3_jiti@2.6.1_jsdom@27.4.0_sass@1.97.2_tsx@4.21.0_yaml@2.8.2}/node_modules/vitest/dist/config.cjs +0 -0
  63. /package/dist/node_modules/.pnpm/{vitest@4.0.13_@types_debug@4.1.12_@types_node@24.10.1_jiti@2.6.1_jsdom@27.2.0_sass@1.94.2_tsx@4.20.6_yaml@2.8.1 → vitest@4.0.16_@types_node@25.0.3_jiti@2.6.1_jsdom@27.4.0_sass@1.97.2_tsx@4.21.0_yaml@2.8.2}/node_modules/vitest/dist/config.js +0 -0
@@ -1,59 +1,50 @@
1
- import a from "crypto-js";
2
- import { isObject as s } from "lodash-es";
3
- import u from "slugify";
4
- var c = Object.defineProperty, f = Object.getOwnPropertySymbols, d = Object.prototype.hasOwnProperty, m = Object.prototype.propertyIsEnumerable, i = (e, r, t) => r in e ? c(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t, g = (e, r) => {
5
- for (var t in r || (r = {}))
6
- d.call(r, t) && i(e, t, r[t]);
7
- if (f)
8
- for (var t of f(r))
9
- m.call(r, t) && i(e, t, r[t]);
10
- return e;
11
- };
12
- const p = u.default || u;
13
- function h(e, r) {
14
- const t = (n) => {
15
- var o, l;
16
- return p(n != null ? n : "", g({
17
- lower: (o = r == null ? void 0 : r.lower) != null ? o : !0,
18
- locale: (l = r == null ? void 0 : r.locale) != null ? l : "vi"
19
- }, r));
20
- };
21
- if (s(e)) {
1
+ import { removeAccent as c } from "../common/common.util.js";
2
+ function l(t, r) {
3
+ let e = t.trim();
4
+ return e = c(e), (r == null ? void 0 : r.lower) !== !1 && (e = e.toLowerCase()), e = e.replace(/[^a-z0-9\s-]/gi, " "), e = e.replace(/[\s-]+/g, "-"), e = e.replace(/^-+|-+$/g, ""), e;
5
+ }
6
+ function a(t, r) {
7
+ const e = (n) => l(n != null ? n : "", r);
8
+ if (typeof t == "object" && t !== null) {
22
9
  const n = {};
23
- for (const [o, l] of Object.entries(e))
24
- n[o] = t(l);
10
+ for (const [o, s] of Object.entries(t))
11
+ n[o] = e(s);
25
12
  return n;
26
13
  }
27
- return t(e);
14
+ return e(t);
28
15
  }
29
- function v(e, r = 4) {
30
- return a.SHA256(e).toString(a.enc.Hex).slice(0, r);
16
+ function f(t, r = 4) {
17
+ let e = 2166136261;
18
+ for (let o = 0; o < t.length; o++)
19
+ e ^= t.charCodeAt(o), e = Math.imul(e, 16777619);
20
+ const n = (e >>> 0).toString(16).padStart(8, "0");
21
+ return r > 8 ? t.replace(/-/g, "").slice(0, r) : n.slice(0, r);
31
22
  }
32
- function w(e = 8) {
23
+ function u(t = 8) {
33
24
  const r = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+[]{}|;:,.<>?";
34
- return Array.from({ length: e }, () => {
35
- const t = Math.floor(Math.random() * r.length);
36
- return r.charAt(t);
25
+ return Array.from({ length: t }, () => {
26
+ const e = Math.floor(Math.random() * r.length);
27
+ return r.charAt(e);
37
28
  }).join("");
38
29
  }
39
- function x(e = "", r = !1) {
40
- const t = e.split(/[?#]/)[0] || "", n = t.substring(t.lastIndexOf("/") + 1);
30
+ function g(t = "", r = !1) {
31
+ const e = t.split(/[?#]/)[0] || "", n = e.substring(e.lastIndexOf("/") + 1);
41
32
  if (r)
42
33
  return n;
43
34
  const o = n.lastIndexOf(".");
44
35
  return o > 0 ? n.slice(0, o) : n;
45
36
  }
46
- function P(e, r, t) {
47
- const n = e.indexOf(r);
37
+ function d(t, r, e) {
38
+ const n = t.indexOf(r);
48
39
  if (n === -1)
49
40
  return "";
50
- const o = n + r.length, l = e.indexOf(t, o);
51
- return l === -1 ? "" : e.slice(o, l);
41
+ const o = n + r.length, s = t.indexOf(e, o);
42
+ return s === -1 ? "" : t.slice(o, s);
52
43
  }
53
44
  export {
54
- w as generateRandomPassword,
55
- v as generateShortId,
56
- h as generateSlug,
57
- x as getFileName,
58
- P as substringBetween
45
+ u as generateRandomPassword,
46
+ f as generateShortId,
47
+ a as generateSlug,
48
+ g as getFileName,
49
+ d as substringBetween
59
50
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i={isEmpty(t){return t==null?!0:typeof t=="string"?t.trim().length===0:Array.isArray(t)?t.length===0:typeof t=="object"?t instanceof Date?!1:t instanceof Map||t instanceof Set?t.size===0:t instanceof WeakMap||t instanceof WeakSet?!0:ArrayBuffer.isView(t)?t.byteLength===0:Object.keys(t).length===0:!1},isValidIP(t){const r=t.split(".");return r.length===4&&r.every(e=>/^\d+$/.test(e)&&Number(e)>=0&&Number(e)<=255)?!0:/^(([a-f\d]{1,4}:){7}[a-f\d]{1,4}|((?:[a-f\d]{1,4}:){1,7}:)|((?:[a-f\d]{1,4}:){1,6}:[a-f\d]{1,4})|::)$/i.test(t)}};exports.validate=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r={isEmpty(d){return d==null?!0:typeof d=="string"?d.trim().length===0:Array.isArray(d)?d.length===0:typeof d=="object"?d instanceof Date?!1:d instanceof Map||d instanceof Set?d.size===0:d instanceof WeakMap||d instanceof WeakSet?!0:ArrayBuffer.isView(d)?d.byteLength===0:Object.keys(d).length===0:!1},isValidIP(d){const e=d.split(".");return e.length===4&&e.every(t=>/^\d+$/.test(t)&&Number(t)>=0&&Number(t)<=255)?!0:/^(?:(?:[a-f\d]{1,4}:){7}(?:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,2}|:)|(?:[a-f\d]{1,4}:){4}(?:(?::[a-f\d]{1,4})?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,3}|:)|(?:[a-f\d]{1,4}:){3}(?:(?::[a-f\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,4}|:)|(?:[a-f\d]{1,4}:){2}(?:(?::[a-f\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,5}|:)|[a-f\d]{1,4}:(?:(?::[a-f\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,6}|:)|:(?:(?::[a-f\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,7}|:))(?:%[0-9a-z]+)?$/i.test(d)}};exports.validate=r;
@@ -1,4 +1,4 @@
1
- const i = {
1
+ const e = {
2
2
  /**
3
3
  * Checks if a value is empty.
4
4
  * This function provides comprehensive empty checking for different data types:
@@ -15,8 +15,8 @@ const i = {
15
15
  * @param value - The value to check for emptiness.
16
16
  * @returns True if the value is empty, false otherwise.
17
17
  */
18
- isEmpty(t) {
19
- return t == null ? !0 : typeof t == "string" ? t.trim().length === 0 : Array.isArray(t) ? t.length === 0 : typeof t == "object" ? t instanceof Date ? !1 : t instanceof Map || t instanceof Set ? t.size === 0 : t instanceof WeakMap || t instanceof WeakSet ? !0 : ArrayBuffer.isView(t) ? t.byteLength === 0 : Object.keys(t).length === 0 : !1;
18
+ isEmpty(d) {
19
+ return d == null ? !0 : typeof d == "string" ? d.trim().length === 0 : Array.isArray(d) ? d.length === 0 : typeof d == "object" ? d instanceof Date ? !1 : d instanceof Map || d instanceof Set ? d.size === 0 : d instanceof WeakMap || d instanceof WeakSet ? !0 : ArrayBuffer.isView(d) ? d.byteLength === 0 : Object.keys(d).length === 0 : !1;
20
20
  },
21
21
  /**
22
22
  * Checks if a string is a valid IP address (IPv4 or IPv6).
@@ -27,13 +27,13 @@ const i = {
27
27
  * @param ip - The IP address string to validate.
28
28
  * @returns True if the IP is valid IPv4 or IPv6, false otherwise.
29
29
  */
30
- isValidIP(t) {
31
- const e = t.split(".");
32
- return e.length === 4 && e.every(
33
- (r) => /^\d+$/.test(r) && Number(r) >= 0 && Number(r) <= 255
34
- ) ? !0 : /^(([a-f\d]{1,4}:){7}[a-f\d]{1,4}|((?:[a-f\d]{1,4}:){1,7}:)|((?:[a-f\d]{1,4}:){1,6}:[a-f\d]{1,4})|::)$/i.test(t);
30
+ isValidIP(d) {
31
+ const f = d.split(".");
32
+ return f.length === 4 && f.every(
33
+ (t) => /^\d+$/.test(t) && Number(t) >= 0 && Number(t) <= 255
34
+ ) ? !0 : /^(?:(?:[a-f\d]{1,4}:){7}(?:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,2}|:)|(?:[a-f\d]{1,4}:){4}(?:(?::[a-f\d]{1,4})?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,3}|:)|(?:[a-f\d]{1,4}:){3}(?:(?::[a-f\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,4}|:)|(?:[a-f\d]{1,4}:){2}(?:(?::[a-f\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,5}|:)|[a-f\d]{1,4}:(?:(?::[a-f\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,6}|:)|:(?:(?::[a-f\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,7}|:))(?:%[0-9a-z]+)?$/i.test(d);
35
35
  }
36
36
  };
37
37
  export {
38
- i as validate
38
+ e as validate
39
39
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cyberskill/shared",
3
3
  "type": "module",
4
- "version": "2.20.0",
4
+ "version": "2.25.0",
5
5
  "description": "CyberSkill Shared",
6
6
  "author": "Stephen Cheng",
7
7
  "license": "MIT",
@@ -212,108 +212,101 @@
212
212
  "test:unit": "tsx src/node/cli/index.ts test:unit"
213
213
  },
214
214
  "dependencies": {
215
- "@antfu/eslint-config": "6.2.0",
216
- "@apollo/client": "4.0.9",
217
- "@apollo/client-integration-nextjs": "0.14.1",
215
+ "@antfu/eslint-config": "6.7.3",
216
+ "@apollo/client": "4.0.11",
217
+ "@apollo/client-integration-nextjs": "0.14.3",
218
218
  "@apollo/server": "5.2.0",
219
219
  "@as-integrations/express5": "1.1.2",
220
- "@dotenvx/dotenvx": "1.51.1",
221
- "@eddeee888/gcg-typescript-resolver-files": "0.14.1",
222
- "@eslint-react/eslint-plugin": "2.3.7",
220
+ "@dotenvx/dotenvx": "1.51.4",
221
+ "@eddeee888/gcg-typescript-resolver-files": "0.15.0",
222
+ "@eslint-react/eslint-plugin": "2.5.1",
223
223
  "@graphql-codegen/cli": "6.1.0",
224
- "@graphql-codegen/client-preset": "5.2.0",
225
- "@nestjs/common": "11.1.9",
226
- "@nestjs/core": "11.1.9",
224
+ "@graphql-codegen/client-preset": "5.2.2",
225
+ "@nestjs/common": "11.1.11",
226
+ "@nestjs/core": "11.1.11",
227
227
  "@userback/widget": "0.3.12",
228
228
  "@vitejs/plugin-react-swc": "4.2.2",
229
- "body-parser": "2.2.0",
229
+ "body-parser": "2.2.1",
230
230
  "chalk": "5.6.2",
231
231
  "clsx": "2.1.1",
232
232
  "compression": "1.8.1",
233
233
  "consola": "3.4.2",
234
234
  "cookie-parser": "1.4.7",
235
235
  "cors": "2.8.5",
236
- "crypto-js": "4.2.0",
237
236
  "date-fns": "4.1.0",
238
237
  "envalid": "8.1.1",
239
- "eslint-plugin-format": "1.0.2",
238
+ "eslint-plugin-format": "1.2.0",
240
239
  "eslint-plugin-react-hooks": "7.0.1",
241
- "eslint-plugin-react-refresh": "0.4.24",
242
- "express": "5.1.0",
240
+ "eslint-plugin-react-refresh": "0.4.26",
241
+ "express": "5.2.1",
243
242
  "express-session": "1.18.2",
244
243
  "express-useragent": "2.0.2",
245
244
  "extract-files": "13.0.0",
246
- "fs-extra": "11.3.2",
247
- "globals": "16.5.0",
245
+ "fs-extra": "11.3.3",
246
+ "globals": "17.0.0",
248
247
  "graphql": "16.12.0",
249
248
  "graphql-upload": "17.0.0",
250
249
  "graphql-ws": "6.0.6",
251
- "i18next": "25.6.3",
252
- "jsdom": "27.2.0",
250
+ "helmet": "8.1.0",
251
+ "i18next": "25.7.3",
252
+ "jsdom": "27.4.0",
253
253
  "localforage": "1.10.0",
254
- "lodash-es": "4.17.21",
255
- "migrate-mongo": "12.1.3",
254
+ "migrate-mongo": "14.0.7",
256
255
  "mongodb": "7.0.0",
257
- "mongoose": "9.0.0",
256
+ "mongoose": "9.1.2",
258
257
  "mongoose-aggregate-paginate-v2": "1.1.4",
259
258
  "mongoose-paginate-v2": "1.9.1",
260
- "next-intl": "4.5.5",
259
+ "next-intl": "4.7.0",
261
260
  "node-fetch": "3.3.2",
262
- "qs": "6.14.0",
263
- "react": "19.2.0",
264
- "react-dom": "19.2.0",
261
+ "qs": "6.14.1",
262
+ "react": "19.2.3",
263
+ "react-dom": "19.2.3",
265
264
  "react-hot-toast": "2.6.0",
266
- "react-i18next": "16.3.5",
265
+ "react-i18next": "16.5.1",
267
266
  "rxjs": "7.8.2",
268
- "slugify": "1.6.6",
269
- "unorm": "1.6.0",
270
- "uuid": "13.0.0",
271
- "vite": "7.2.4",
272
- "ws": "8.18.3",
267
+ "vite": "7.3.0",
268
+ "ws": "8.19.0",
273
269
  "yargs": "18.0.0"
274
270
  },
275
271
  "devDependencies": {
276
- "@commitlint/cli": "20.1.0",
277
- "@commitlint/config-conventional": "20.0.0",
272
+ "@commitlint/cli": "20.3.0",
273
+ "@commitlint/config-conventional": "20.3.0",
278
274
  "@eslint/config-inspector": "1.4.2",
279
- "@next/eslint-plugin-next": "16.0.3",
280
- "@storybook/react": "10.0.8",
281
- "@storybook/react-vite": "10.0.8",
275
+ "@next/eslint-plugin-next": "16.1.1",
276
+ "@storybook/react": "10.1.11",
277
+ "@storybook/react-vite": "10.1.11",
282
278
  "@testing-library/jest-dom": "6.9.1",
283
- "@testing-library/react": "16.3.0",
279
+ "@testing-library/react": "16.3.1",
284
280
  "@types/body-parser": "1.19.6",
285
281
  "@types/compression": "1.8.1",
286
282
  "@types/cookie-parser": "1.4.10",
287
283
  "@types/cors": "2.8.19",
288
- "@types/crypto-js": "4.2.2",
289
- "@types/express": "5.0.5",
284
+ "@types/express": "5.0.6",
290
285
  "@types/express-session": "1.18.2",
291
286
  "@types/express-useragent": "1.0.5",
292
287
  "@types/extract-files": "13.0.2",
293
288
  "@types/fs-extra": "11.0.4",
294
289
  "@types/graphql-upload": "17.0.0",
295
- "@types/lodash-es": "4.17.12",
296
290
  "@types/migrate-mongo": "10.0.6",
297
- "@types/node": "24.10.1",
298
- "@types/react": "19.2.6",
291
+ "@types/node": "25.0.3",
292
+ "@types/react": "19.2.7",
299
293
  "@types/react-dom": "19.2.3",
300
- "@types/unorm": "1.3.31",
301
294
  "@types/ws": "8.18.1",
302
295
  "@types/yargs": "17.0.35",
303
- "@vitest/browser": "4.0.13",
304
- "eslint": "9.39.1",
305
- "eslint-config-next": "16.0.3",
296
+ "@vitest/browser": "4.0.16",
297
+ "eslint": "9.39.2",
298
+ "eslint-config-next": "16.1.1",
306
299
  "glob": "13.0.0",
307
300
  "lint-staged": "16.2.7",
308
301
  "node-modules-inspector": "1.2.0",
309
302
  "npm-run-all2": "8.0.4",
310
- "sass": "1.94.2",
303
+ "sass": "1.97.2",
311
304
  "simple-git-hooks": "2.13.1",
312
- "tsx": "4.20.6",
305
+ "tsx": "4.21.0",
313
306
  "typescript": "5.9.3",
314
- "vite": "7.2.4",
307
+ "vite": "7.3.0",
315
308
  "vite-plugin-dts": "4.5.4",
316
- "vitest": "4.0.13"
309
+ "vitest": "4.0.16"
317
310
  },
318
311
  "publishConfig": {
319
312
  "access": "public",