@cyberskill/shared 2.19.1 → 2.20.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.
- package/dist/config/storybook/index.cjs +1 -0
- package/dist/config/storybook/index.d.ts +2 -0
- package/dist/config/storybook/index.js +6 -0
- package/dist/config/storybook/storybook.main.cjs +1 -0
- package/dist/config/storybook/storybook.main.d.ts +17 -0
- package/dist/config/storybook/storybook.main.js +18 -0
- package/dist/config/storybook/storybook.preview.cjs +1 -0
- package/dist/config/storybook/storybook.preview.d.ts +18 -0
- package/dist/config/storybook/storybook.preview.js +39 -0
- package/dist/config/vitest/vitest.e2e.cjs +1 -1
- package/dist/config/vitest/vitest.e2e.js +1 -1
- package/dist/config/vitest/vitest.unit.cjs +1 -1
- package/dist/config/vitest/vitest.unit.js +1 -1
- package/dist/node/cli/index.cjs +2 -2
- package/dist/node/cli/index.js +51 -41
- package/dist/node/express/express.util.cjs +1 -1
- package/dist/node/express/express.util.js +21 -21
- package/dist/node/mongo/mongo.type.d.ts +2 -2
- package/dist/node/mongo/mongo.util.cjs +1 -1
- package/dist/node/mongo/mongo.util.d.ts +1022 -128
- package/dist/node/mongo/mongo.util.js +1 -1
- package/dist/node/path/index.cjs +1 -1
- package/dist/node/path/index.js +27 -25
- package/dist/node/path/path.constant.cjs +1 -1
- package/dist/node/path/path.constant.d.ts +6 -0
- package/dist/node/path/path.constant.js +152 -128
- package/dist/node/storage/index.cjs +1 -1
- package/dist/node/storage/index.d.ts +2 -0
- package/dist/node/storage/index.js +7 -2
- package/dist/node/storage/storage.constant.cjs +1 -0
- package/dist/node/storage/storage.constant.d.ts +4 -0
- package/dist/node/storage/storage.constant.js +7 -0
- package/dist/node/storage/storage.type.d.ts +14 -0
- package/dist/node/storage/storage.util.cjs +1 -1
- package/dist/node/storage/storage.util.d.ts +1 -1
- package/dist/node/storage/storage.util.js +160 -50
- package/package.json +27 -22
- /package/dist/node_modules/.pnpm/{vitest@4.0.9_@types_debug@4.1.12_@types_node@24.10.1_jiti@2.6.1_jsdom@27.2.0_sass@1.94.0_tsx@4.20.6_yaml@2.8.1 → 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}/node_modules/vitest/dist/config.cjs +0 -0
- /package/dist/node_modules/.pnpm/{vitest@4.0.9_@types_debug@4.1.12_@types_node@24.10.1_jiti@2.6.1_jsdom@27.2.0_sass@1.94.0_tsx@4.20.6_yaml@2.8.1 → 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}/node_modules/vitest/dist/config.js +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as localForage } from 'localforage';
|
|
2
|
+
export type LocalForageDriver = Parameters<typeof localForage.defineDriver>[0];
|
|
3
|
+
export interface NodeLocalForageOptions {
|
|
4
|
+
driver?: string | string[];
|
|
5
|
+
size?: number;
|
|
6
|
+
version?: number;
|
|
7
|
+
description?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
storeName?: string;
|
|
10
|
+
baseDir?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface NodeFsDriverState {
|
|
13
|
+
baseDir: string;
|
|
14
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("localforage"),o=require("node:fs/promises"),D=require("node:path"),c=require("./storage.constant.cjs"),I=require("../../config/env/env.util.cjs"),s=require("../log/log.util.cjs");var n=(e,r,t)=>new Promise((i,y)=>{var h=u=>{try{v(t.next(u))}catch(_){y(_)}},O=u=>{try{v(t.throw(u))}catch(_){y(_)}},v=u=>u.done?i(u.value):Promise.resolve(u.value).then(h,O);v((t=t.apply(e,r)).next())});const E=I.getEnv(),l={baseDir:E.CYBERSKILL_STORAGE_DIRECTORY};function m(e){return`${encodeURIComponent(e)}${c.STORAGE_KEY_EXTENSION}`}function N(e){return decodeURIComponent(e.slice(0,-c.STORAGE_KEY_EXTENSION.length))}function R(e,r){return D.join(r,m(e))}const d={_driver:c.NODE_FS_DRIVER_NAME,_support:!0,_initStorage(e){return n(this,null,function*(){try{const r=typeof e=="object"&&e!==null&&"baseDir"in e?e.baseDir:void 0;typeof r=="string"&&r.length>0?l.baseDir=r:l.baseDir=E.CYBERSKILL_STORAGE_DIRECTORY,yield o.mkdir(l.baseDir,{recursive:!0})}catch(r){throw s.log.error("[Storage:init]",r),r}})},clear(){return n(this,null,function*(){const{baseDir:e}=l;yield o.rm(e,{recursive:!0,force:!0}),yield o.mkdir(e,{recursive:!0})})},getItem(e){return n(this,null,function*(){const{baseDir:r}=l,t=R(e,r);try{const i=yield o.readFile(t,"utf8");return JSON.parse(i)}catch(i){if(i.code==="ENOENT")return null;throw i}})},iterate(e){return n(this,null,function*(){const r=yield d.keys();let t=1;for(const i of r){const y=yield d.getItem(i),h=e(y,i,t);if(h!==void 0)return h;t+=1}})},key(e){return n(this,null,function*(){var r;return(r=(yield d.keys())[e])!=null?r:null})},keys(){return n(this,null,function*(){const{baseDir:e}=l;try{return(yield o.readdir(e)).filter(t=>t.endsWith(c.STORAGE_KEY_EXTENSION)).map(N)}catch(r){if(r.code==="ENOENT")return[];throw r}})},length(){return n(this,null,function*(){return(yield d.keys()).length})},removeItem(e){return n(this,null,function*(){const{baseDir:r}=l,t=R(e,r);yield o.rm(t,{force:!0})})},setItem(e,r){return n(this,null,function*(){const{baseDir:t}=l,i=R(e,t);return yield o.mkdir(t,{recursive:!0}),yield o.writeFile(i,JSON.stringify(r),"utf8"),r})}};let a=null,S=null;function f(){return n(this,null,function*(){return a?(yield a,S):(a=n(null,null,function*(){yield g.defineDriver(d),l.baseDir=E.CYBERSKILL_STORAGE_DIRECTORY;const e=yield g.getDriver(c.NODE_FS_DRIVER_NAME),r={baseDir:l.baseDir,name:c.STORAGE_INSTANCE_NAME,storeName:c.STORAGE_STORE_NAME};yield e._initStorage(r),S=e}).catch(e=>{throw a=null,e}),yield a,S)})}const T={get(e){return n(this,null,function*(){try{const t=yield(yield f()).getItem(e);return t!=null?t:null}catch(r){return s.catchError(r,{returnValue:null})}})},set(e,r){return n(this,null,function*(){try{yield(yield f()).setItem(e,r)}catch(t){s.catchError(t)}})},remove(e){return n(this,null,function*(){try{yield(yield f()).removeItem(e)}catch(r){s.catchError(r)}})},keys(){return n(this,null,function*(){try{const r=yield(yield f()).keys();return Array.isArray(r)?r:(s.log.warn("[Storage:keys] Invalid keys response:",r),[])}catch(e){return s.catchError(e,{returnValue:[]})}})},getLogLink(e){return n(this,null,function*(){try{return`${D.join(E.CYBERSKILL_STORAGE_DIRECTORY,m(e))} (key: ${e})`}catch(r){return s.catchError(r,{returnValue:null})}})}};exports.storage=T;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent storage utility object for data persistence across application sessions.
|
|
3
|
-
* This object provides methods for storing, retrieving, and managing data using
|
|
3
|
+
* This object provides methods for storing, retrieving, and managing data using localForage,
|
|
4
4
|
* with automatic initialization and error handling.
|
|
5
5
|
*/
|
|
6
6
|
export declare const storage: {
|
|
@@ -1,31 +1,143 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import _ from "localforage";
|
|
2
|
+
import l from "node:fs/promises";
|
|
3
|
+
import g from "node:path";
|
|
4
|
+
import { STORAGE_KEY_EXTENSION as R, NODE_FS_DRIVER_NAME as I, STORAGE_STORE_NAME as p, STORAGE_INSTANCE_NAME as b } from "./storage.constant.js";
|
|
5
|
+
import { getEnv as N } from "../../config/env/env.util.js";
|
|
6
|
+
import { catchError as s, log as S } from "../log/log.util.js";
|
|
7
|
+
var n = (e, r, t) => new Promise((i, d) => {
|
|
8
|
+
var y = (u) => {
|
|
6
9
|
try {
|
|
7
|
-
|
|
8
|
-
} catch (
|
|
9
|
-
|
|
10
|
+
m(t.next(u));
|
|
11
|
+
} catch (v) {
|
|
12
|
+
d(v);
|
|
10
13
|
}
|
|
11
|
-
},
|
|
14
|
+
}, O = (u) => {
|
|
12
15
|
try {
|
|
13
|
-
|
|
14
|
-
} catch (
|
|
15
|
-
|
|
16
|
+
m(t.throw(u));
|
|
17
|
+
} catch (v) {
|
|
18
|
+
d(v);
|
|
16
19
|
}
|
|
17
|
-
},
|
|
18
|
-
|
|
20
|
+
}, m = (u) => u.done ? i(u.value) : Promise.resolve(u.value).then(y, O);
|
|
21
|
+
m((t = t.apply(e, r)).next());
|
|
19
22
|
});
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const h = N(), o = {
|
|
24
|
+
baseDir: h.CYBERSKILL_STORAGE_DIRECTORY
|
|
25
|
+
};
|
|
26
|
+
function k(e) {
|
|
27
|
+
return `${encodeURIComponent(e)}${R}`;
|
|
28
|
+
}
|
|
29
|
+
function T(e) {
|
|
30
|
+
return decodeURIComponent(e.slice(0, -R.length));
|
|
31
|
+
}
|
|
32
|
+
function E(e, r) {
|
|
33
|
+
return g.join(r, k(e));
|
|
34
|
+
}
|
|
35
|
+
const a = {
|
|
36
|
+
_driver: I,
|
|
37
|
+
_support: !0,
|
|
38
|
+
/** Ensures the storage directory exists and respects custom baseDir overrides. */
|
|
39
|
+
_initStorage(e) {
|
|
40
|
+
return n(this, null, function* () {
|
|
41
|
+
try {
|
|
42
|
+
const r = typeof e == "object" && e !== null && "baseDir" in e ? e.baseDir : void 0;
|
|
43
|
+
typeof r == "string" && r.length > 0 ? o.baseDir = r : o.baseDir = h.CYBERSKILL_STORAGE_DIRECTORY, yield l.mkdir(o.baseDir, { recursive: !0 });
|
|
44
|
+
} catch (r) {
|
|
45
|
+
throw S.error("[Storage:init]", r), r;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
/** Deletes all stored entries by recreating the directory. */
|
|
50
|
+
clear() {
|
|
51
|
+
return n(this, null, function* () {
|
|
52
|
+
const { baseDir: e } = o;
|
|
53
|
+
yield l.rm(e, { recursive: !0, force: !0 }), yield l.mkdir(e, { recursive: !0 });
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
/** Reads and parses a stored value; returns null when the file is missing. */
|
|
57
|
+
getItem(e) {
|
|
58
|
+
return n(this, null, function* () {
|
|
59
|
+
const { baseDir: r } = o, t = E(e, r);
|
|
60
|
+
try {
|
|
61
|
+
const i = yield l.readFile(t, "utf8");
|
|
62
|
+
return JSON.parse(i);
|
|
63
|
+
} catch (i) {
|
|
64
|
+
if (i.code === "ENOENT")
|
|
65
|
+
return null;
|
|
66
|
+
throw i;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
/** Iterates through all keys, invoking the iterator until it returns a value. */
|
|
71
|
+
iterate(e) {
|
|
72
|
+
return n(this, null, function* () {
|
|
73
|
+
const r = yield a.keys();
|
|
74
|
+
let t = 1;
|
|
75
|
+
for (const i of r) {
|
|
76
|
+
const d = yield a.getItem(i), y = e(d, i, t);
|
|
77
|
+
if (y !== void 0)
|
|
78
|
+
return y;
|
|
79
|
+
t += 1;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
/** Returns the key name at the given index or null when out of bounds. */
|
|
84
|
+
key(e) {
|
|
85
|
+
return n(this, null, function* () {
|
|
86
|
+
var r;
|
|
87
|
+
return (r = (yield a.keys())[e]) != null ? r : null;
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
/** Lists all stored keys. */
|
|
91
|
+
keys() {
|
|
92
|
+
return n(this, null, function* () {
|
|
93
|
+
const { baseDir: e } = o;
|
|
94
|
+
try {
|
|
95
|
+
return (yield l.readdir(e)).filter((t) => t.endsWith(R)).map(T);
|
|
96
|
+
} catch (r) {
|
|
97
|
+
if (r.code === "ENOENT")
|
|
98
|
+
return [];
|
|
99
|
+
throw r;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
/** Returns the count of stored keys. */
|
|
104
|
+
length() {
|
|
105
|
+
return n(this, null, function* () {
|
|
106
|
+
return (yield a.keys()).length;
|
|
107
|
+
});
|
|
108
|
+
},
|
|
109
|
+
/** Removes a stored value for the given key. */
|
|
110
|
+
removeItem(e) {
|
|
111
|
+
return n(this, null, function* () {
|
|
112
|
+
const { baseDir: r } = o, t = E(e, r);
|
|
113
|
+
yield l.rm(t, { force: !0 });
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
/** Stores a value as JSON on disk. */
|
|
117
|
+
setItem(e, r) {
|
|
118
|
+
return n(this, null, function* () {
|
|
119
|
+
const { baseDir: t } = o, i = E(e, t);
|
|
120
|
+
return yield l.mkdir(t, { recursive: !0 }), yield l.writeFile(i, JSON.stringify(r), "utf8"), r;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
let c = null, D = null;
|
|
125
|
+
function f() {
|
|
126
|
+
return n(this, null, function* () {
|
|
127
|
+
return c ? (yield c, D) : (c = n(null, null, function* () {
|
|
128
|
+
yield _.defineDriver(a), o.baseDir = h.CYBERSKILL_STORAGE_DIRECTORY;
|
|
129
|
+
const e = yield _.getDriver(I), r = {
|
|
130
|
+
baseDir: o.baseDir,
|
|
131
|
+
name: b,
|
|
132
|
+
storeName: p
|
|
133
|
+
};
|
|
134
|
+
yield e._initStorage(r), D = e;
|
|
135
|
+
}).catch((e) => {
|
|
136
|
+
throw c = null, e;
|
|
137
|
+
}), yield c, D);
|
|
26
138
|
});
|
|
27
139
|
}
|
|
28
|
-
const
|
|
140
|
+
const w = {
|
|
29
141
|
/**
|
|
30
142
|
* Retrieves a value from persistent storage by key.
|
|
31
143
|
* This method fetches data that was previously stored using the set method.
|
|
@@ -34,14 +146,13 @@ const R = {
|
|
|
34
146
|
* @param key - The unique identifier for the stored value.
|
|
35
147
|
* @returns A promise that resolves to the stored value or null if not found.
|
|
36
148
|
*/
|
|
37
|
-
get(
|
|
38
|
-
return
|
|
149
|
+
get(e) {
|
|
150
|
+
return n(this, null, function* () {
|
|
39
151
|
try {
|
|
40
|
-
yield
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return i(e, { returnValue: null });
|
|
152
|
+
const t = yield (yield f()).getItem(e);
|
|
153
|
+
return t != null ? t : null;
|
|
154
|
+
} catch (r) {
|
|
155
|
+
return s(r, { returnValue: null });
|
|
45
156
|
}
|
|
46
157
|
});
|
|
47
158
|
},
|
|
@@ -54,12 +165,12 @@ const R = {
|
|
|
54
165
|
* @param value - The data to store (will be automatically serialized).
|
|
55
166
|
* @returns A promise that resolves when the storage operation is complete.
|
|
56
167
|
*/
|
|
57
|
-
set(
|
|
58
|
-
return
|
|
168
|
+
set(e, r) {
|
|
169
|
+
return n(this, null, function* () {
|
|
59
170
|
try {
|
|
60
|
-
yield
|
|
61
|
-
} catch (
|
|
62
|
-
|
|
171
|
+
yield (yield f()).setItem(e, r);
|
|
172
|
+
} catch (t) {
|
|
173
|
+
s(t);
|
|
63
174
|
}
|
|
64
175
|
});
|
|
65
176
|
},
|
|
@@ -70,12 +181,12 @@ const R = {
|
|
|
70
181
|
* @param key - The unique identifier of the value to remove.
|
|
71
182
|
* @returns A promise that resolves when the removal operation is complete.
|
|
72
183
|
*/
|
|
73
|
-
remove(
|
|
74
|
-
return
|
|
184
|
+
remove(e) {
|
|
185
|
+
return n(this, null, function* () {
|
|
75
186
|
try {
|
|
76
|
-
yield
|
|
77
|
-
} catch (
|
|
78
|
-
|
|
187
|
+
yield (yield f()).removeItem(e);
|
|
188
|
+
} catch (r) {
|
|
189
|
+
s(r);
|
|
79
190
|
}
|
|
80
191
|
});
|
|
81
192
|
},
|
|
@@ -87,13 +198,12 @@ const R = {
|
|
|
87
198
|
* @returns A promise that resolves to an array of storage keys.
|
|
88
199
|
*/
|
|
89
200
|
keys() {
|
|
90
|
-
return
|
|
201
|
+
return n(this, null, function* () {
|
|
91
202
|
try {
|
|
92
|
-
yield
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return i(r, { returnValue: [] });
|
|
203
|
+
const r = yield (yield f()).keys();
|
|
204
|
+
return Array.isArray(r) ? r : (S.warn("[Storage:keys] Invalid keys response:", r), []);
|
|
205
|
+
} catch (e) {
|
|
206
|
+
return s(e, { returnValue: [] });
|
|
97
207
|
}
|
|
98
208
|
});
|
|
99
209
|
},
|
|
@@ -105,16 +215,16 @@ const R = {
|
|
|
105
215
|
* @param key - The storage key to generate a log link for.
|
|
106
216
|
* @returns A promise that resolves to a formatted log link string or null if an error occurs.
|
|
107
217
|
*/
|
|
108
|
-
getLogLink(
|
|
109
|
-
return
|
|
218
|
+
getLogLink(e) {
|
|
219
|
+
return n(this, null, function* () {
|
|
110
220
|
try {
|
|
111
|
-
return `${
|
|
112
|
-
} catch (
|
|
113
|
-
return
|
|
221
|
+
return `${g.join(h.CYBERSKILL_STORAGE_DIRECTORY, k(e))} (key: ${e})`;
|
|
222
|
+
} catch (r) {
|
|
223
|
+
return s(r, { returnValue: null });
|
|
114
224
|
}
|
|
115
225
|
});
|
|
116
226
|
}
|
|
117
227
|
};
|
|
118
228
|
export {
|
|
119
|
-
|
|
229
|
+
w as storage
|
|
120
230
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyberskill/shared",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.20.0",
|
|
5
5
|
"description": "CyberSkill Shared",
|
|
6
6
|
"author": "Stephen Cheng",
|
|
7
7
|
"license": "MIT",
|
|
@@ -50,6 +50,11 @@
|
|
|
50
50
|
"import": "./dist/config/vitest/index.js",
|
|
51
51
|
"require": "./dist/config/vitest/index.cjs"
|
|
52
52
|
},
|
|
53
|
+
"./config/storybook": {
|
|
54
|
+
"types": "./dist/config/storybook/index.d.ts",
|
|
55
|
+
"import": "./dist/config/storybook/index.js",
|
|
56
|
+
"require": "./dist/config/storybook/index.cjs"
|
|
57
|
+
},
|
|
53
58
|
"./constant": {
|
|
54
59
|
"types": "./dist/constant/index.d.ts",
|
|
55
60
|
"import": "./dist/constant/index.js",
|
|
@@ -210,16 +215,16 @@
|
|
|
210
215
|
"@antfu/eslint-config": "6.2.0",
|
|
211
216
|
"@apollo/client": "4.0.9",
|
|
212
217
|
"@apollo/client-integration-nextjs": "0.14.1",
|
|
213
|
-
"@apollo/server": "5.
|
|
218
|
+
"@apollo/server": "5.2.0",
|
|
214
219
|
"@as-integrations/express5": "1.1.2",
|
|
215
220
|
"@dotenvx/dotenvx": "1.51.1",
|
|
216
|
-
"@eddeee888/gcg-typescript-resolver-files": "0.14.
|
|
217
|
-
"@eslint-react/eslint-plugin": "2.3.
|
|
218
|
-
"@graphql-codegen/cli": "6.0
|
|
219
|
-
"@graphql-codegen/client-preset": "5.
|
|
221
|
+
"@eddeee888/gcg-typescript-resolver-files": "0.14.1",
|
|
222
|
+
"@eslint-react/eslint-plugin": "2.3.7",
|
|
223
|
+
"@graphql-codegen/cli": "6.1.0",
|
|
224
|
+
"@graphql-codegen/client-preset": "5.2.0",
|
|
220
225
|
"@nestjs/common": "11.1.9",
|
|
221
226
|
"@nestjs/core": "11.1.9",
|
|
222
|
-
"@userback/widget": "0.3.
|
|
227
|
+
"@userback/widget": "0.3.12",
|
|
223
228
|
"@vitejs/plugin-react-swc": "4.2.2",
|
|
224
229
|
"body-parser": "2.2.0",
|
|
225
230
|
"chalk": "5.6.2",
|
|
@@ -243,36 +248,37 @@
|
|
|
243
248
|
"graphql": "16.12.0",
|
|
244
249
|
"graphql-upload": "17.0.0",
|
|
245
250
|
"graphql-ws": "6.0.6",
|
|
246
|
-
"i18next": "25.6.
|
|
251
|
+
"i18next": "25.6.3",
|
|
247
252
|
"jsdom": "27.2.0",
|
|
248
253
|
"localforage": "1.10.0",
|
|
249
254
|
"lodash-es": "4.17.21",
|
|
250
255
|
"migrate-mongo": "12.1.3",
|
|
251
256
|
"mongodb": "7.0.0",
|
|
252
|
-
"mongoose": "
|
|
257
|
+
"mongoose": "9.0.0",
|
|
253
258
|
"mongoose-aggregate-paginate-v2": "1.1.4",
|
|
254
259
|
"mongoose-paginate-v2": "1.9.1",
|
|
255
|
-
"next-intl": "4.5.
|
|
260
|
+
"next-intl": "4.5.5",
|
|
256
261
|
"node-fetch": "3.3.2",
|
|
257
|
-
"node-persist": "4.0.4",
|
|
258
262
|
"qs": "6.14.0",
|
|
259
263
|
"react": "19.2.0",
|
|
260
264
|
"react-dom": "19.2.0",
|
|
261
265
|
"react-hot-toast": "2.6.0",
|
|
262
|
-
"react-i18next": "16.3.
|
|
266
|
+
"react-i18next": "16.3.5",
|
|
263
267
|
"rxjs": "7.8.2",
|
|
264
268
|
"slugify": "1.6.6",
|
|
265
269
|
"unorm": "1.6.0",
|
|
266
270
|
"uuid": "13.0.0",
|
|
267
|
-
"vite": "7.2.
|
|
271
|
+
"vite": "7.2.4",
|
|
268
272
|
"ws": "8.18.3",
|
|
269
273
|
"yargs": "18.0.0"
|
|
270
274
|
},
|
|
271
275
|
"devDependencies": {
|
|
272
276
|
"@commitlint/cli": "20.1.0",
|
|
273
277
|
"@commitlint/config-conventional": "20.0.0",
|
|
274
|
-
"@eslint/config-inspector": "1.
|
|
278
|
+
"@eslint/config-inspector": "1.4.2",
|
|
275
279
|
"@next/eslint-plugin-next": "16.0.3",
|
|
280
|
+
"@storybook/react": "10.0.8",
|
|
281
|
+
"@storybook/react-vite": "10.0.8",
|
|
276
282
|
"@testing-library/jest-dom": "6.9.1",
|
|
277
283
|
"@testing-library/react": "16.3.0",
|
|
278
284
|
"@types/body-parser": "1.19.6",
|
|
@@ -289,26 +295,25 @@
|
|
|
289
295
|
"@types/lodash-es": "4.17.12",
|
|
290
296
|
"@types/migrate-mongo": "10.0.6",
|
|
291
297
|
"@types/node": "24.10.1",
|
|
292
|
-
"@types/
|
|
293
|
-
"@types/react": "19.2.4",
|
|
298
|
+
"@types/react": "19.2.6",
|
|
294
299
|
"@types/react-dom": "19.2.3",
|
|
295
300
|
"@types/unorm": "1.3.31",
|
|
296
301
|
"@types/ws": "8.18.1",
|
|
297
302
|
"@types/yargs": "17.0.35",
|
|
298
|
-
"@vitest/browser": "4.0.
|
|
303
|
+
"@vitest/browser": "4.0.13",
|
|
299
304
|
"eslint": "9.39.1",
|
|
300
305
|
"eslint-config-next": "16.0.3",
|
|
301
|
-
"glob": "
|
|
302
|
-
"lint-staged": "16.2.
|
|
306
|
+
"glob": "13.0.0",
|
|
307
|
+
"lint-staged": "16.2.7",
|
|
303
308
|
"node-modules-inspector": "1.2.0",
|
|
304
309
|
"npm-run-all2": "8.0.4",
|
|
305
|
-
"sass": "1.94.
|
|
310
|
+
"sass": "1.94.2",
|
|
306
311
|
"simple-git-hooks": "2.13.1",
|
|
307
312
|
"tsx": "4.20.6",
|
|
308
313
|
"typescript": "5.9.3",
|
|
309
|
-
"vite": "7.2.
|
|
314
|
+
"vite": "7.2.4",
|
|
310
315
|
"vite-plugin-dts": "4.5.4",
|
|
311
|
-
"vitest": "4.0.
|
|
316
|
+
"vitest": "4.0.13"
|
|
312
317
|
},
|
|
313
318
|
"publishConfig": {
|
|
314
319
|
"access": "public",
|