@gradio/client 0.10.0 → 0.11.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/CHANGELOG.md +12 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/index.js +82 -5
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +40 -6
- package/src/types.ts +1 -1
- package/src/utils.ts +59 -0
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# @gradio/client
|
2
2
|
|
3
|
+
## 0.11.0
|
4
|
+
|
5
|
+
### Features
|
6
|
+
|
7
|
+
- [#7102](https://github.com/gradio-app/gradio/pull/7102) [`68a54a7`](https://github.com/gradio-app/gradio/commit/68a54a7a310d8d7072fdae930bf1cfdf12c45a7f) - Improve chatbot streaming performance with diffs. Thanks [@aliabid94](https://github.com/aliabid94)!/n Note that this PR changes the API format for generator functions, which would be a breaking change for any clients reading the EventStream directly
|
8
|
+
|
9
|
+
## 0.10.1
|
10
|
+
|
11
|
+
### Fixes
|
12
|
+
|
13
|
+
- [#7055](https://github.com/gradio-app/gradio/pull/7055) [`3c3cf86`](https://github.com/gradio-app/gradio/commit/3c3cf8618a8cad1ef66a7f96664923d2c9f5e0e2) - Fix UI freeze on rapid generators. Thanks [@aliabid94](https://github.com/aliabid94)!
|
14
|
+
|
3
15
|
## 0.10.0
|
4
16
|
|
5
17
|
### Features
|
package/dist/client.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAQN,cAAc,
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
@@ -170,6 +170,52 @@ const hardware_types = [
|
|
170
170
|
"a10g-large",
|
171
171
|
"a100-large"
|
172
172
|
];
|
173
|
+
function apply_edit(target, path, action, value) {
|
174
|
+
if (path.length === 0) {
|
175
|
+
if (action === "replace") {
|
176
|
+
return value;
|
177
|
+
} else if (action === "append") {
|
178
|
+
return target + value;
|
179
|
+
}
|
180
|
+
throw new Error(`Unsupported action: ${action}`);
|
181
|
+
}
|
182
|
+
let current = target;
|
183
|
+
for (let i = 0; i < path.length - 1; i++) {
|
184
|
+
current = current[path[i]];
|
185
|
+
}
|
186
|
+
const last_path = path[path.length - 1];
|
187
|
+
switch (action) {
|
188
|
+
case "replace":
|
189
|
+
current[last_path] = value;
|
190
|
+
break;
|
191
|
+
case "append":
|
192
|
+
current[last_path] += value;
|
193
|
+
break;
|
194
|
+
case "add":
|
195
|
+
if (Array.isArray(current)) {
|
196
|
+
current.splice(Number(last_path), 0, value);
|
197
|
+
} else {
|
198
|
+
current[last_path] = value;
|
199
|
+
}
|
200
|
+
break;
|
201
|
+
case "delete":
|
202
|
+
if (Array.isArray(current)) {
|
203
|
+
current.splice(Number(last_path), 1);
|
204
|
+
} else {
|
205
|
+
delete current[last_path];
|
206
|
+
}
|
207
|
+
break;
|
208
|
+
default:
|
209
|
+
throw new Error(`Unknown action: ${action}`);
|
210
|
+
}
|
211
|
+
return target;
|
212
|
+
}
|
213
|
+
function apply_diff(obj, diff) {
|
214
|
+
diff.forEach(([action, path, value]) => {
|
215
|
+
obj = apply_edit(obj, path, action, value);
|
216
|
+
});
|
217
|
+
return obj;
|
218
|
+
}
|
173
219
|
function normalise_file(file, server_url, proxy_url) {
|
174
220
|
if (file == null) {
|
175
221
|
return null;
|
@@ -401,8 +447,10 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
401
447
|
const last_status = {};
|
402
448
|
let stream_open = false;
|
403
449
|
let pending_stream_messages = {};
|
450
|
+
let pending_diff_streams = {};
|
404
451
|
let event_stream = null;
|
405
452
|
const event_callbacks = {};
|
453
|
+
const unclosed_events = /* @__PURE__ */ new Set();
|
406
454
|
let config;
|
407
455
|
let api_map = {};
|
408
456
|
let jwt = false;
|
@@ -829,7 +877,7 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
829
877
|
}
|
830
878
|
}
|
831
879
|
};
|
832
|
-
} else if (protocol == "sse_v1") {
|
880
|
+
} else if (protocol == "sse_v1" || protocol == "sse_v2") {
|
833
881
|
fire_event({
|
834
882
|
type: "status",
|
835
883
|
stage: "pending",
|
@@ -917,6 +965,9 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
917
965
|
endpoint: _endpoint,
|
918
966
|
fn_index
|
919
967
|
});
|
968
|
+
if (data2 && protocol === "sse_v2") {
|
969
|
+
apply_diff_stream(event_id, data2);
|
970
|
+
}
|
920
971
|
}
|
921
972
|
if (data2) {
|
922
973
|
fire_event({
|
@@ -946,9 +997,9 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
946
997
|
if ((status2 == null ? void 0 : status2.stage) === "complete" || (status2 == null ? void 0 : status2.stage) === "error") {
|
947
998
|
if (event_callbacks[event_id]) {
|
948
999
|
delete event_callbacks[event_id];
|
949
|
-
|
950
|
-
|
951
|
-
|
1000
|
+
}
|
1001
|
+
if (event_id in pending_diff_streams) {
|
1002
|
+
delete pending_diff_streams[event_id];
|
952
1003
|
}
|
953
1004
|
}
|
954
1005
|
} catch (e) {
|
@@ -972,6 +1023,7 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
972
1023
|
delete pending_stream_messages[event_id];
|
973
1024
|
}
|
974
1025
|
event_callbacks[event_id] = callback;
|
1026
|
+
unclosed_events.add(event_id);
|
975
1027
|
if (!stream_open) {
|
976
1028
|
open_stream();
|
977
1029
|
}
|
@@ -980,6 +1032,24 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
980
1032
|
}
|
981
1033
|
}
|
982
1034
|
);
|
1035
|
+
function apply_diff_stream(event_id2, data2) {
|
1036
|
+
let is_first_generation = !pending_diff_streams[event_id2];
|
1037
|
+
if (is_first_generation) {
|
1038
|
+
pending_diff_streams[event_id2] = [];
|
1039
|
+
data2.data.forEach((value, i) => {
|
1040
|
+
pending_diff_streams[event_id2][i] = value;
|
1041
|
+
});
|
1042
|
+
} else {
|
1043
|
+
data2.data.forEach((value, i) => {
|
1044
|
+
let new_data = apply_diff(
|
1045
|
+
pending_diff_streams[event_id2][i],
|
1046
|
+
value
|
1047
|
+
);
|
1048
|
+
pending_diff_streams[event_id2][i] = new_data;
|
1049
|
+
data2.data[i] = new_data;
|
1050
|
+
});
|
1051
|
+
}
|
1052
|
+
}
|
983
1053
|
function fire_event(event) {
|
984
1054
|
const narrowed_listener_map = listener_map;
|
985
1055
|
const listeners = narrowed_listener_map[event.type] || [];
|
@@ -1069,7 +1139,14 @@ function api_factory(fetch_implementation, EventSource_factory) {
|
|
1069
1139
|
)
|
1070
1140
|
);
|
1071
1141
|
} else if (event_callbacks[event_id]) {
|
1072
|
-
|
1142
|
+
if (_data.msg === "process_completed") {
|
1143
|
+
unclosed_events.delete(event_id);
|
1144
|
+
if (unclosed_events.size === 0) {
|
1145
|
+
close_stream();
|
1146
|
+
}
|
1147
|
+
}
|
1148
|
+
let fn2 = event_callbacks[event_id];
|
1149
|
+
window.setTimeout(fn2, 0, _data);
|
1073
1150
|
} else {
|
1074
1151
|
if (!pending_stream_messages[event_id]) {
|
1075
1152
|
pending_stream_messages[event_id] = [];
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
@@ -29,4 +29,5 @@ export declare function get_space_hardware(space_id: string, token: `hf_${string
|
|
29
29
|
export declare function set_space_hardware(space_id: string, new_hardware: (typeof hardware_types)[number], token: `hf_${string}`): Promise<(typeof hardware_types)[number]>;
|
30
30
|
export declare function set_space_timeout(space_id: string, timeout: number, token: `hf_${string}`): Promise<number>;
|
31
31
|
export declare const hardware_types: readonly ["cpu-basic", "cpu-upgrade", "t4-small", "t4-medium", "a10g-small", "a10g-large", "a100-large"];
|
32
|
+
export declare function apply_diff(obj: any, diff: [string, (number | string)[], any][]): any;
|
32
33
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,GACtB,MAAM,CAKR;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACrD,WAAW,EAAE,IAAI,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACb,CAgCA;AAED,eAAO,MAAM,aAAa,QAAqB,CAAC;AAChD,eAAO,MAAM,eAAe,QAAwB,CAAC;AACrD,wBAAsB,gBAAgB,CACrC,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE,GACpB,OAAO,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;CAClC,CAAC,CA4CD;AAED,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,GACzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAID,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAe5E;AAED,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,MAAM,EAAE,GACnB,OAAO,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAqB1C;AAED,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,EAC7C,KAAK,EAAE,MAAM,MAAM,EAAE,GACnB,OAAO,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAuB1C;AAED,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,eAAO,MAAM,cAAc,0GAQjB,CAAC"}
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,OAAO,GACtB,MAAM,CAKR;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACrD,WAAW,EAAE,IAAI,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACb,CAgCA;AAED,eAAO,MAAM,aAAa,QAAqB,CAAC;AAChD,eAAO,MAAM,eAAe,QAAwB,CAAC;AACrD,wBAAsB,gBAAgB,CACrC,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE,GACpB,OAAO,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;CAClC,CAAC,CA4CD;AAED,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,GACzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAID,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAe5E;AAED,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,MAAM,EAAE,GACnB,OAAO,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAqB1C;AAED,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,EAC7C,KAAK,EAAE,MAAM,MAAM,EAAE,GACnB,OAAO,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAuB1C;AAED,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,eAAO,MAAM,cAAc,0GAQjB,CAAC;AAkDX,wBAAgB,UAAU,CACzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GACxC,GAAG,CAML"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
@@ -11,7 +11,8 @@ import {
|
|
11
11
|
set_space_hardware,
|
12
12
|
set_space_timeout,
|
13
13
|
hardware_types,
|
14
|
-
resolve_root
|
14
|
+
resolve_root,
|
15
|
+
apply_diff
|
15
16
|
} from "./utils.js";
|
16
17
|
|
17
18
|
import type {
|
@@ -288,8 +289,10 @@ export function api_factory(
|
|
288
289
|
const last_status: Record<string, Status["stage"]> = {};
|
289
290
|
let stream_open = false;
|
290
291
|
let pending_stream_messages: Record<string, any[]> = {}; // Event messages may be received by the SSE stream before the initial data POST request is complete. To resolve this race condition, we store the messages in a dictionary and process them when the POST request is complete.
|
292
|
+
let pending_diff_streams: Record<string, any[][]> = {};
|
291
293
|
let event_stream: EventSource | null = null;
|
292
294
|
const event_callbacks: Record<string, () => Promise<void>> = {};
|
295
|
+
const unclosed_events: Set<string> = new Set();
|
293
296
|
let config: Config;
|
294
297
|
let api_map: Record<string, number> = {};
|
295
298
|
|
@@ -773,7 +776,8 @@ export function api_factory(
|
|
773
776
|
}
|
774
777
|
}
|
775
778
|
};
|
776
|
-
} else if (protocol == "sse_v1") {
|
779
|
+
} else if (protocol == "sse_v1" || protocol == "sse_v2") {
|
780
|
+
// latest API format. v2 introduces sending diffs for intermediate outputs in generative functions, which makes payloads lighter.
|
777
781
|
fire_event({
|
778
782
|
type: "status",
|
779
783
|
stage: "pending",
|
@@ -866,6 +870,9 @@ export function api_factory(
|
|
866
870
|
endpoint: _endpoint,
|
867
871
|
fn_index
|
868
872
|
});
|
873
|
+
if (data && protocol === "sse_v2") {
|
874
|
+
apply_diff_stream(event_id!, data);
|
875
|
+
}
|
869
876
|
}
|
870
877
|
if (data) {
|
871
878
|
fire_event({
|
@@ -902,9 +909,9 @@ export function api_factory(
|
|
902
909
|
) {
|
903
910
|
if (event_callbacks[event_id]) {
|
904
911
|
delete event_callbacks[event_id];
|
905
|
-
|
906
|
-
|
907
|
-
|
912
|
+
}
|
913
|
+
if (event_id in pending_diff_streams) {
|
914
|
+
delete pending_diff_streams[event_id];
|
908
915
|
}
|
909
916
|
}
|
910
917
|
} catch (e) {
|
@@ -928,6 +935,7 @@ export function api_factory(
|
|
928
935
|
delete pending_stream_messages[event_id];
|
929
936
|
}
|
930
937
|
event_callbacks[event_id] = callback;
|
938
|
+
unclosed_events.add(event_id);
|
931
939
|
if (!stream_open) {
|
932
940
|
open_stream();
|
933
941
|
}
|
@@ -937,6 +945,25 @@ export function api_factory(
|
|
937
945
|
}
|
938
946
|
);
|
939
947
|
|
948
|
+
function apply_diff_stream(event_id: string, data: any): void {
|
949
|
+
let is_first_generation = !pending_diff_streams[event_id];
|
950
|
+
if (is_first_generation) {
|
951
|
+
pending_diff_streams[event_id] = [];
|
952
|
+
data.data.forEach((value: any, i: number) => {
|
953
|
+
pending_diff_streams[event_id][i] = value;
|
954
|
+
});
|
955
|
+
} else {
|
956
|
+
data.data.forEach((value: any, i: number) => {
|
957
|
+
let new_data = apply_diff(
|
958
|
+
pending_diff_streams[event_id][i],
|
959
|
+
value
|
960
|
+
);
|
961
|
+
pending_diff_streams[event_id][i] = new_data;
|
962
|
+
data.data[i] = new_data;
|
963
|
+
});
|
964
|
+
}
|
965
|
+
}
|
966
|
+
|
940
967
|
function fire_event<K extends EventType>(event: Event<K>): void {
|
941
968
|
const narrowed_listener_map: ListenerMap<K> = listener_map;
|
942
969
|
const listeners = narrowed_listener_map[event.type] || [];
|
@@ -1042,7 +1069,14 @@ export function api_factory(
|
|
1042
1069
|
)
|
1043
1070
|
);
|
1044
1071
|
} else if (event_callbacks[event_id]) {
|
1045
|
-
|
1072
|
+
if (_data.msg === "process_completed") {
|
1073
|
+
unclosed_events.delete(event_id);
|
1074
|
+
if (unclosed_events.size === 0) {
|
1075
|
+
close_stream();
|
1076
|
+
}
|
1077
|
+
}
|
1078
|
+
let fn = event_callbacks[event_id];
|
1079
|
+
window.setTimeout(fn, 0, _data); // need to do this to put the event on the end of the event loop, so the browser can refresh between callbacks and not freeze in case of quick generations. See https://github.com/gradio-app/gradio/pull/7055
|
1046
1080
|
} else {
|
1047
1081
|
if (!pending_stream_messages[event_id]) {
|
1048
1082
|
pending_stream_messages[event_id] = [];
|
package/src/types.ts
CHANGED
package/src/utils.ts
CHANGED
@@ -239,3 +239,62 @@ export const hardware_types = [
|
|
239
239
|
"a10g-large",
|
240
240
|
"a100-large"
|
241
241
|
] as const;
|
242
|
+
|
243
|
+
function apply_edit(
|
244
|
+
target: any,
|
245
|
+
path: (number | string)[],
|
246
|
+
action: string,
|
247
|
+
value: any
|
248
|
+
): any {
|
249
|
+
if (path.length === 0) {
|
250
|
+
if (action === "replace") {
|
251
|
+
return value;
|
252
|
+
} else if (action === "append") {
|
253
|
+
return target + value;
|
254
|
+
}
|
255
|
+
throw new Error(`Unsupported action: ${action}`);
|
256
|
+
}
|
257
|
+
|
258
|
+
let current = target;
|
259
|
+
for (let i = 0; i < path.length - 1; i++) {
|
260
|
+
current = current[path[i]];
|
261
|
+
}
|
262
|
+
|
263
|
+
const last_path = path[path.length - 1];
|
264
|
+
switch (action) {
|
265
|
+
case "replace":
|
266
|
+
current[last_path] = value;
|
267
|
+
break;
|
268
|
+
case "append":
|
269
|
+
current[last_path] += value;
|
270
|
+
break;
|
271
|
+
case "add":
|
272
|
+
if (Array.isArray(current)) {
|
273
|
+
current.splice(Number(last_path), 0, value);
|
274
|
+
} else {
|
275
|
+
current[last_path] = value;
|
276
|
+
}
|
277
|
+
break;
|
278
|
+
case "delete":
|
279
|
+
if (Array.isArray(current)) {
|
280
|
+
current.splice(Number(last_path), 1);
|
281
|
+
} else {
|
282
|
+
delete current[last_path];
|
283
|
+
}
|
284
|
+
break;
|
285
|
+
default:
|
286
|
+
throw new Error(`Unknown action: ${action}`);
|
287
|
+
}
|
288
|
+
return target;
|
289
|
+
}
|
290
|
+
|
291
|
+
export function apply_diff(
|
292
|
+
obj: any,
|
293
|
+
diff: [string, (number | string)[], any][]
|
294
|
+
): any {
|
295
|
+
diff.forEach(([action, path, value]) => {
|
296
|
+
obj = apply_edit(obj, path, action, value);
|
297
|
+
});
|
298
|
+
|
299
|
+
return obj;
|
300
|
+
}
|