@epam/ai-dial-chat-hooks 1.3.0-rc.0 → 1.4.0-dev.6
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/conversation/create-chat-stream-api.d.ts +1 -1
- package/conversation/create-chat-stream-api.d.ts.map +1 -1
- package/conversation/create-chat-stream-api.js +1 -1
- package/conversation/useConversationStream/generation-resume.d.ts +8 -0
- package/conversation/useConversationStream/generation-resume.d.ts.map +1 -1
- package/conversation/useConversationStream/generation-resume.js +94 -90
- package/package.json +17 -17
|
@@ -26,7 +26,7 @@ export declare class GenerationPersistenceError extends Error {
|
|
|
26
26
|
constructor(status?: number, terminalMarker?: GenerationPersistenceTerminalMarker);
|
|
27
27
|
}
|
|
28
28
|
/** Fallback text of a {@link GenerationConflictError} when no message is supplied. */
|
|
29
|
-
export declare const DEFAULT_GENERATION_CONFLICT_MESSAGE = "A response is already being generated in this conversation. Wait for it to finish
|
|
29
|
+
export declare const DEFAULT_GENERATION_CONFLICT_MESSAGE = "A response is already being generated in this conversation. Wait for it to finish before sending another message.";
|
|
30
30
|
/**
|
|
31
31
|
* Reported through `onError` when the backend rejects a completion because
|
|
32
32
|
* another generation is already active on the same conversation — what a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-chat-stream-api.d.ts","sourceRoot":"","sources":["../../src/conversation/create-chat-stream-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAOnC,mFAAmF;AACnF,eAAO,MAAM,4CAA4C,0IACgF,CAAC;AAE1I,2FAA2F;AAC3F,eAAO,MAAM,4CAA4C,gGACsC,CAAC;AAEhG,2FAA2F;AAC3F,MAAM,WAAW,mCAAmC;IAClD,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,yFAAyF;AACzF,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,8BAA8B;IAElD,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,4FAA4F;IAC5F,QAAQ,CAAC,cAAc,CAAC,EAAE,mCAAmC,CAAC;IAE9D;;;;OAIG;gBAED,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,mCAAmC;CAOvD;AAED,sFAAsF;AACtF,eAAO,MAAM,mCAAmC,
|
|
1
|
+
{"version":3,"file":"create-chat-stream-api.d.ts","sourceRoot":"","sources":["../../src/conversation/create-chat-stream-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ var e = { "Content-Type": "application/json" }, t = 409, n = "The response could
|
|
|
6
6
|
constructor(e, t) {
|
|
7
7
|
super(n), this.name = "GenerationPersistenceError", this.status = e, this.terminalMarker = t;
|
|
8
8
|
}
|
|
9
|
-
}, a = "A response is already being generated in this conversation. Wait for it to finish
|
|
9
|
+
}, a = "A response is already being generated in this conversation. Wait for it to finish before sending another message.", o = class extends Error {
|
|
10
10
|
constructor(e = a) {
|
|
11
11
|
super(e), this.name = "GenerationConflictError";
|
|
12
12
|
}
|
|
@@ -17,6 +17,14 @@ export declare const hasGeneratedPayload: (message: Message) => boolean;
|
|
|
17
17
|
* anywhere, e.g. before a model-changed status message.
|
|
18
18
|
*/
|
|
19
19
|
export declare const findPendingBackgroundMessageIndex: (conversation: Conversation) => number;
|
|
20
|
+
/**
|
|
21
|
+
* Index of the conversation's message whose `foregroundGeneration` marker is still live
|
|
22
|
+
* at `now` (its `expiresAt` is later), or -1. A live marker means the answer is being
|
|
23
|
+
* generated in another tab, on another device, or by another participant.
|
|
24
|
+
* @param conversation - conversation to inspect
|
|
25
|
+
* @param now - the client's clock, epoch ms
|
|
26
|
+
*/
|
|
27
|
+
export declare const findLiveForegroundMessageIndex: (conversation: Conversation, now?: number) => number;
|
|
20
28
|
/**
|
|
21
29
|
* True when the conversation has a pending background message, or its last
|
|
22
30
|
* message is an unresolved assistant placeholder: the backend only persists a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation-resume.d.ts","sourceRoot":"","sources":["../../../src/conversation/useConversationStream/generation-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,OAAO,EAEb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AASxE,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,OAAO,KAAG,OAWtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,GAC5C,cAAc,YAAY,KACzB,MAKA,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACrC,cAAc,YAAY,KACzB,
|
|
1
|
+
{"version":3,"file":"generation-resume.d.ts","sourceRoot":"","sources":["../../../src/conversation/useConversationStream/generation-resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,165 +9,169 @@ import { BackgroundGenerationStatus as c, MessageRole as l } from "@epam/ai-dial
|
|
|
9
9
|
var u = (e) => {
|
|
10
10
|
let t = e.custom_content;
|
|
11
11
|
return !!e.content || e.responseId != null || !!t?.attachments?.length || !!t?.stages?.length || !!t?.annotations?.length || !!t?.form_schema || t?.state != null;
|
|
12
|
-
}, d = (e) => e.messages.findIndex((e) => e.backgroundGeneration?.status === c.Pending), f = (e) => {
|
|
13
|
-
if (d(e) !== -1) return !0;
|
|
12
|
+
}, d = (e) => e.messages.findIndex((e) => e.backgroundGeneration?.status === c.Pending), f = (e, t = Date.now()) => e.messages.findIndex((e) => e.foregroundGeneration != null && t < e.foregroundGeneration.expiresAt), p = (e) => {
|
|
13
|
+
if (d(e) !== -1 || f(e) !== -1) return !0;
|
|
14
14
|
let t = e.messages[e.messages.length - 1];
|
|
15
15
|
return !!t && t.role === l.Assistant && !u(t) && t.streamErrorMessage == null && !t.wasStoppedByUser;
|
|
16
|
-
},
|
|
16
|
+
}, m = 3e5, h = "awaiting-resume", g = [
|
|
17
17
|
1e3,
|
|
18
18
|
2e3,
|
|
19
19
|
4e3,
|
|
20
20
|
8e3,
|
|
21
21
|
16e3
|
|
22
|
-
],
|
|
22
|
+
], _ = (e) => new Promise((t) => {
|
|
23
23
|
let n = typeof window < "u", r = () => {
|
|
24
24
|
clearTimeout(i), n && window.removeEventListener("online", r), t();
|
|
25
25
|
}, i = setTimeout(r, e);
|
|
26
26
|
n && window.addEventListener("online", r);
|
|
27
|
-
}),
|
|
28
|
-
for (let r = 0; r <=
|
|
27
|
+
}), v = async (e, t, n) => {
|
|
28
|
+
for (let r = 0; r <= g.length; r++) {
|
|
29
29
|
if (t()) return null;
|
|
30
30
|
try {
|
|
31
31
|
let t = await e();
|
|
32
32
|
if (!n?.(t)) return t;
|
|
33
33
|
} catch {}
|
|
34
|
-
if (r ===
|
|
35
|
-
await g
|
|
34
|
+
if (r === g.length) return null;
|
|
35
|
+
await _(g[r]);
|
|
36
36
|
}
|
|
37
37
|
return null;
|
|
38
|
-
},
|
|
39
|
-
if (!
|
|
40
|
-
|
|
38
|
+
}, y = ({ transport: c, setConversation: l, conversationRef: g, resumingPathsRef: _, bufferedGenerationsRef: v, addStreamingPath: y, removeStreamingPath: b, isPathDisplayed: x, generationPersistenceErrorMessage: S = n, generationInterruptedMessage: C = t, frameScheduler: w, stoppedGenerationIdsRef: T, rememberResumedGenerationId: E, forgetResumedGenerationId: D, onReloadError: O, onReloadSuccess: k }) => (t, n, A = {}) => {
|
|
39
|
+
if (!p(n)) {
|
|
40
|
+
A.onSettled?.();
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
let
|
|
44
|
-
if (!
|
|
45
|
-
|
|
46
|
-
let
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
let j = a(t);
|
|
44
|
+
if (!A.skipDedupe && _.current.has(j)) return;
|
|
45
|
+
_.current.add(j), y(j);
|
|
46
|
+
let M = d(n), N = M !== -1, P = N ? -1 : f(n), F = n.messages.length - 1;
|
|
47
|
+
N ? F = M : P !== -1 && (F = P);
|
|
48
|
+
let I = {
|
|
49
|
+
generationId: h,
|
|
50
|
+
messageIndex: F,
|
|
51
|
+
message: A.seedMessage ?? n.messages[F]
|
|
50
52
|
};
|
|
51
|
-
|
|
52
|
-
let
|
|
53
|
-
let e =
|
|
54
|
-
return e != null && (
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
if (
|
|
59
|
-
let e =
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
v.current.set(j, I);
|
|
54
|
+
let L = () => v.current.get(j) === I, R = N ? n.messages[F].backgroundGeneration?.generationId : void 0, z, B = () => {
|
|
55
|
+
let e = R ?? z;
|
|
56
|
+
return e != null && (T?.current.has(e) ?? !1);
|
|
57
|
+
}, V = (e) => {
|
|
58
|
+
A.trackAttachGenerationId && !N && e != null && L() && (z = e, E?.(j, e));
|
|
59
|
+
}, H = () => {
|
|
60
|
+
if (z == null) return;
|
|
61
|
+
let e = z;
|
|
62
|
+
z = void 0, T?.current.delete(e), D?.(j, e);
|
|
63
|
+
};
|
|
64
|
+
P !== -1 && V(n.messages[P].foregroundGeneration?.generationId);
|
|
65
|
+
let U = (e) => !!A.shouldMarkOrphanedAsInterrupted && !N && !!e && e.messages.length - 1 === F && d(e) === -1 && f(e) === -1 && p(e) && !u(I.message), W = () => {
|
|
66
|
+
I.message = {
|
|
67
|
+
...I.message,
|
|
68
|
+
streamErrorMessage: C
|
|
65
69
|
};
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
if (!e || !
|
|
69
|
-
let t = s(e,
|
|
70
|
-
return
|
|
70
|
+
}, G = () => {
|
|
71
|
+
L() && (W(), _.current.delete(j), b(j), H(), x(j) && l((e) => {
|
|
72
|
+
if (!e || !L() || !x(j)) return e;
|
|
73
|
+
let t = s(e, I);
|
|
74
|
+
return g.current = t, t;
|
|
71
75
|
}));
|
|
72
|
-
},
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
let n = !
|
|
76
|
-
if (t || n)
|
|
77
|
-
...
|
|
78
|
-
streamErrorMessage:
|
|
79
|
-
},
|
|
80
|
-
if (!e || !
|
|
81
|
-
let t = s(e,
|
|
82
|
-
return
|
|
76
|
+
}, K = (e, t = !1) => {
|
|
77
|
+
if (w?.flush(j), R != null && T?.current.delete(R), H(), !L()) return;
|
|
78
|
+
_.current.delete(j), b(j);
|
|
79
|
+
let n = !N && e && e.messages.length - 1 === F && p(e) && u(I.message);
|
|
80
|
+
if (t || n) I.message = {
|
|
81
|
+
...I.message,
|
|
82
|
+
streamErrorMessage: S
|
|
83
|
+
}, x(j) && l((e) => {
|
|
84
|
+
if (!e || !L() || !x(j)) return e;
|
|
85
|
+
let t = s(e, I);
|
|
86
|
+
return g.current = t, t;
|
|
83
87
|
});
|
|
84
|
-
else if (
|
|
85
|
-
let t =
|
|
86
|
-
t &&
|
|
87
|
-
let n = t ? s(e,
|
|
88
|
-
l(n),
|
|
88
|
+
else if (v.current.delete(j), e && x(j)) {
|
|
89
|
+
let t = U(e);
|
|
90
|
+
t && W();
|
|
91
|
+
let n = t ? s(e, I) : e;
|
|
92
|
+
l(n), g.current = n;
|
|
89
93
|
}
|
|
90
|
-
},
|
|
91
|
-
if (
|
|
94
|
+
}, q = async () => {
|
|
95
|
+
if (L()) try {
|
|
92
96
|
let n = await c.getConversation(e(t));
|
|
93
|
-
if (!
|
|
94
|
-
|
|
97
|
+
if (!L()) return;
|
|
98
|
+
k?.(j), K(n);
|
|
95
99
|
} catch {
|
|
96
|
-
if (!
|
|
97
|
-
|
|
100
|
+
if (!L()) return;
|
|
101
|
+
w?.flush(j), _.current.delete(j), b(j), R != null && T?.current.delete(R), H(), O?.(j, q, L);
|
|
98
102
|
}
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
if (!e || !
|
|
102
|
-
let t = s(e,
|
|
103
|
-
return
|
|
103
|
+
}, J = (e) => {
|
|
104
|
+
w?.cancel(j), L() && (I.message = e, x(j) && l((e) => {
|
|
105
|
+
if (!e || !L() || !x(j)) return e;
|
|
106
|
+
let t = s(e, I);
|
|
107
|
+
return g.current = t, t;
|
|
104
108
|
}));
|
|
105
|
-
},
|
|
106
|
-
if (!e || !
|
|
107
|
-
let t = s(e,
|
|
108
|
-
return
|
|
109
|
-
}),
|
|
110
|
-
if (!
|
|
111
|
-
let t = o([
|
|
112
|
-
t && (
|
|
113
|
-
},
|
|
109
|
+
}, Y = () => l((e) => {
|
|
110
|
+
if (!e || !L() || !x(j)) return e;
|
|
111
|
+
let t = s(e, I);
|
|
112
|
+
return g.current = t, t;
|
|
113
|
+
}), X = (e) => {
|
|
114
|
+
if (!L() || B()) return;
|
|
115
|
+
let t = o([I.message], 0, e);
|
|
116
|
+
t && (I.message = t[0]), x(j) && (w ? w.schedule(j, Y) : Y());
|
|
117
|
+
}, Z = async () => {
|
|
114
118
|
let n = new AbortController(), r;
|
|
115
119
|
try {
|
|
116
|
-
r = await c.watchConversation(
|
|
120
|
+
r = await c.watchConversation(j, n.signal);
|
|
117
121
|
} catch {
|
|
118
|
-
await
|
|
122
|
+
await q();
|
|
119
123
|
return;
|
|
120
124
|
}
|
|
121
125
|
try {
|
|
122
126
|
let i = await c.getConversation(e(t));
|
|
123
|
-
if (!
|
|
124
|
-
n.abort(), r.cancel().catch(() => void 0),
|
|
127
|
+
if (!p(i)) {
|
|
128
|
+
n.abort(), r.cancel().catch(() => void 0), K(i);
|
|
125
129
|
return;
|
|
126
130
|
}
|
|
127
|
-
|
|
131
|
+
U(i) && G();
|
|
128
132
|
} catch {}
|
|
129
133
|
let a = !1, o = window.setTimeout(() => {
|
|
130
134
|
n.abort();
|
|
131
|
-
},
|
|
135
|
+
}, m);
|
|
132
136
|
try {
|
|
133
137
|
await i(r, async (n) => {
|
|
134
138
|
if (n?.action !== "UPDATE") return !1;
|
|
135
139
|
try {
|
|
136
140
|
let n = await c.getConversation(e(t));
|
|
137
|
-
if (!
|
|
141
|
+
if (!p(n)) return K(n), a = !0, !0;
|
|
138
142
|
} catch {}
|
|
139
143
|
return !1;
|
|
140
144
|
});
|
|
141
145
|
} finally {
|
|
142
146
|
clearTimeout(o);
|
|
143
147
|
}
|
|
144
|
-
a || await
|
|
145
|
-
},
|
|
148
|
+
a || await q();
|
|
149
|
+
}, Q = async () => {
|
|
146
150
|
let e = new AbortController(), t;
|
|
147
151
|
try {
|
|
148
|
-
t = await c.attachToGeneration(
|
|
152
|
+
t = await c.attachToGeneration(j, e.signal);
|
|
149
153
|
} catch {
|
|
150
154
|
return !1;
|
|
151
155
|
}
|
|
152
156
|
let n = !1, a = !1;
|
|
153
157
|
return await i(t, (e) => {
|
|
154
|
-
if (!
|
|
158
|
+
if (!L()) return !0;
|
|
155
159
|
switch (e.type) {
|
|
156
|
-
case "snapshot": return
|
|
157
|
-
case "chunk": return
|
|
160
|
+
case "snapshot": return V(e.generationId), J(e.message), !1;
|
|
161
|
+
case "chunk": return X(e.chunk), !1;
|
|
158
162
|
case "done":
|
|
159
163
|
case "error":
|
|
160
164
|
case "stopped": return a = e.type === "error" && e.errorType === r.type, n = !0, !0;
|
|
161
165
|
}
|
|
162
|
-
}), n ? (a ?
|
|
166
|
+
}), n ? (a ? K(void 0, !0) : await q(), !0) : (H(), !L());
|
|
163
167
|
};
|
|
164
168
|
(async () => {
|
|
165
169
|
try {
|
|
166
|
-
await
|
|
170
|
+
await Q() || await Z();
|
|
167
171
|
} finally {
|
|
168
|
-
|
|
172
|
+
A.onSettled?.();
|
|
169
173
|
}
|
|
170
174
|
})();
|
|
171
175
|
};
|
|
172
176
|
//#endregion
|
|
173
|
-
export {
|
|
177
|
+
export { g as RECOVERY_REFETCH_DELAYS_MS, y as createResumeIfAwaitingGeneration, v as fetchConversationForRecovery, f as findLiveForegroundMessageIndex, d as findPendingBackgroundMessageIndex, u as hasGeneratedPayload, p as isAwaitingGenerationResume };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epam/ai-dial-chat-hooks",
|
|
3
3
|
"description": "Framework-level React hooks extracted from AI DIAL Chat for building custom chat interfaces",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0-dev.6",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./index.js",
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
}
|
|
132
132
|
},
|
|
133
133
|
"dependencies": {
|
|
134
|
-
"@epam/ai-dial-chat-api-client": "1.
|
|
134
|
+
"@epam/ai-dial-chat-api-client": "1.4.0-dev.6",
|
|
135
135
|
"dompurify": "3.4.17",
|
|
136
136
|
"fflate": "^0.8.3",
|
|
137
137
|
"lru-cache": "^10.4.3",
|
|
@@ -140,23 +140,23 @@
|
|
|
140
140
|
},
|
|
141
141
|
"peerDependencies": {
|
|
142
142
|
"react": "^19.2.8",
|
|
143
|
-
"@epam/ai-dial-attachment-canvas": "1.
|
|
144
|
-
"@epam/ai-dial-attachment-input": "1.
|
|
145
|
-
"@epam/ai-dial-catalog": "1.
|
|
146
|
-
"@epam/ai-dial-chat-overlay": "1.
|
|
147
|
-
"@epam/ai-dial-chat-shared": "1.
|
|
148
|
-
"@epam/ai-dial-conversation-input": "1.
|
|
149
|
-
"@epam/ai-dial-mcp-apps": "1.
|
|
150
|
-
"@epam/ai-dial-projects": "1.
|
|
151
|
-
"@epam/ai-dial-publish-panel": "1.
|
|
152
|
-
"@epam/ai-dial-quotations": "1.
|
|
143
|
+
"@epam/ai-dial-attachment-canvas": "1.4.0-dev.6",
|
|
144
|
+
"@epam/ai-dial-attachment-input": "1.4.0-dev.6",
|
|
145
|
+
"@epam/ai-dial-catalog": "1.4.0-dev.6",
|
|
146
|
+
"@epam/ai-dial-chat-overlay": "1.4.0-dev.6",
|
|
147
|
+
"@epam/ai-dial-chat-shared": "1.4.0-dev.6",
|
|
148
|
+
"@epam/ai-dial-conversation-input": "1.4.0-dev.6",
|
|
149
|
+
"@epam/ai-dial-mcp-apps": "1.4.0-dev.6",
|
|
150
|
+
"@epam/ai-dial-projects": "1.4.0-dev.6",
|
|
151
|
+
"@epam/ai-dial-publish-panel": "1.4.0-dev.6",
|
|
152
|
+
"@epam/ai-dial-quotations": "1.4.0-dev.6",
|
|
153
153
|
"@epam/ai-dial-react-file-manager": "^0.4.1",
|
|
154
|
-
"@epam/ai-dial-scheduled-tasks": "1.
|
|
155
|
-
"@epam/ai-dial-share": "1.
|
|
156
|
-
"@epam/ai-dial-skill-editor": "1.
|
|
157
|
-
"@epam/ai-dial-source-panel": "1.
|
|
154
|
+
"@epam/ai-dial-scheduled-tasks": "1.4.0-dev.6",
|
|
155
|
+
"@epam/ai-dial-share": "1.4.0-dev.6",
|
|
156
|
+
"@epam/ai-dial-skill-editor": "1.4.0-dev.6",
|
|
157
|
+
"@epam/ai-dial-source-panel": "1.4.0-dev.6",
|
|
158
158
|
"@epam/ai-dial-ui-kit": "^0.16.0",
|
|
159
|
-
"@epam/ai-dial-usage-dashboard": "1.
|
|
159
|
+
"@epam/ai-dial-usage-dashboard": "1.4.0-dev.6",
|
|
160
160
|
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
161
161
|
"@epam/pdf-highlighter-kit": "^0.0.21"
|
|
162
162
|
},
|