assistant-stream 0.3.14 → 0.3.16

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 (238) hide show
  1. package/README.md +6 -4
  2. package/dist/core/AssistantStream.d.ts +50 -9
  3. package/dist/core/AssistantStream.d.ts.map +1 -1
  4. package/dist/core/AssistantStream.js +39 -15
  5. package/dist/core/AssistantStream.js.map +1 -1
  6. package/dist/core/AssistantStreamChunk.d.ts +84 -61
  7. package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
  8. package/dist/core/AssistantStreamChunk.js +0 -2
  9. package/dist/core/accumulators/AssistantMessageStream.d.ts +15 -11
  10. package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
  11. package/dist/core/accumulators/AssistantMessageStream.js +52 -48
  12. package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
  13. package/dist/core/accumulators/TimingTracker.d.ts +15 -11
  14. package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
  15. package/dist/core/accumulators/TimingTracker.js +36 -43
  16. package/dist/core/accumulators/TimingTracker.js.map +1 -1
  17. package/dist/core/accumulators/assistant-message-accumulator.d.ts +21 -11
  18. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
  19. package/dist/core/accumulators/assistant-message-accumulator.js +349 -390
  20. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  21. package/dist/core/converters/toGenericMessages.d.ts +49 -47
  22. package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
  23. package/dist/core/converters/toGenericMessages.js +122 -136
  24. package/dist/core/converters/toGenericMessages.js.map +1 -1
  25. package/dist/core/modules/assistant-stream.d.ts +92 -28
  26. package/dist/core/modules/assistant-stream.d.ts.map +1 -1
  27. package/dist/core/modules/assistant-stream.js +177 -162
  28. package/dist/core/modules/assistant-stream.js.map +1 -1
  29. package/dist/core/modules/text.d.ts +11 -7
  30. package/dist/core/modules/text.d.ts.map +1 -1
  31. package/dist/core/modules/text.js +45 -45
  32. package/dist/core/modules/text.js.map +1 -1
  33. package/dist/core/modules/tool-call.d.ts +15 -11
  34. package/dist/core/modules/tool-call.d.ts.map +1 -1
  35. package/dist/core/modules/tool-call.js +81 -96
  36. package/dist/core/modules/tool-call.js.map +1 -1
  37. package/dist/core/object/ObjectStreamAccumulator.d.ts +13 -9
  38. package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
  39. package/dist/core/object/ObjectStreamAccumulator.js +44 -52
  40. package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
  41. package/dist/core/object/ObjectStreamResponse.d.ts +12 -8
  42. package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
  43. package/dist/core/object/ObjectStreamResponse.js +52 -71
  44. package/dist/core/object/ObjectStreamResponse.js.map +1 -1
  45. package/dist/core/object/createObjectStream.d.ts +14 -8
  46. package/dist/core/object/createObjectStream.d.ts.map +1 -1
  47. package/dist/core/object/createObjectStream.js +50 -47
  48. package/dist/core/object/createObjectStream.js.map +1 -1
  49. package/dist/core/object/types.d.ts +14 -11
  50. package/dist/core/object/types.d.ts.map +1 -1
  51. package/dist/core/object/types.js +0 -2
  52. package/dist/core/serialization/PlainText.d.ts +11 -7
  53. package/dist/core/serialization/PlainText.d.ts.map +1 -1
  54. package/dist/core/serialization/PlainText.js +40 -48
  55. package/dist/core/serialization/PlainText.js.map +1 -1
  56. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +11 -7
  57. package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
  58. package/dist/core/serialization/assistant-transport/AssistantTransport.js +102 -117
  59. package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
  60. package/dist/core/serialization/data-stream/DataStream.d.ts +11 -7
  61. package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
  62. package/dist/core/serialization/data-stream/DataStream.js +320 -371
  63. package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
  64. package/dist/core/serialization/data-stream/chunk-types.d.ts +101 -100
  65. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
  66. package/dist/core/serialization/data-stream/chunk-types.js +27 -23
  67. package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
  68. package/dist/core/serialization/data-stream/serialization.d.ts +9 -5
  69. package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
  70. package/dist/core/serialization/data-stream/serialization.js +23 -24
  71. package/dist/core/serialization/data-stream/serialization.js.map +1 -1
  72. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +15 -12
  73. package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
  74. package/dist/core/serialization/ui-message-stream/UIMessageStream.js +205 -228
  75. package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
  76. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +68 -65
  77. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
  78. package/dist/core/serialization/ui-message-stream/chunk-types.js +0 -2
  79. package/dist/core/tool/ToolCallReader.d.ts +34 -30
  80. package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
  81. package/dist/core/tool/ToolCallReader.js +264 -317
  82. package/dist/core/tool/ToolCallReader.js.map +1 -1
  83. package/dist/core/tool/ToolExecutionStream.d.ts +20 -17
  84. package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
  85. package/dist/core/tool/ToolExecutionStream.js +123 -146
  86. package/dist/core/tool/ToolExecutionStream.js.map +1 -1
  87. package/dist/core/tool/ToolResponse.d.ts +60 -19
  88. package/dist/core/tool/ToolResponse.d.ts.map +1 -1
  89. package/dist/core/tool/ToolResponse.js +51 -34
  90. package/dist/core/tool/ToolResponse.js.map +1 -1
  91. package/dist/core/tool/schema-utils.d.ts +19 -15
  92. package/dist/core/tool/schema-utils.d.ts.map +1 -1
  93. package/dist/core/tool/schema-utils.js +50 -84
  94. package/dist/core/tool/schema-utils.js.map +1 -1
  95. package/dist/core/tool/tool-types.d.ts +173 -92
  96. package/dist/core/tool/tool-types.d.ts.map +1 -1
  97. package/dist/core/tool/tool-types.js +0 -2
  98. package/dist/core/tool/toolResultStream.d.ts +24 -7
  99. package/dist/core/tool/toolResultStream.d.ts.map +1 -1
  100. package/dist/core/tool/toolResultStream.js +128 -145
  101. package/dist/core/tool/toolResultStream.js.map +1 -1
  102. package/dist/core/tool/type-path-utils.d.ts +8 -19
  103. package/dist/core/tool/type-path-utils.d.ts.map +1 -1
  104. package/dist/core/tool/type-path-utils.js +0 -2
  105. package/dist/core/utils/Counter.d.ts +6 -3
  106. package/dist/core/utils/Counter.d.ts.map +1 -1
  107. package/dist/core/utils/Counter.js +10 -6
  108. package/dist/core/utils/Counter.js.map +1 -1
  109. package/dist/core/utils/generateId.d.ts +4 -1
  110. package/dist/core/utils/generateId.d.ts.map +1 -1
  111. package/dist/core/utils/generateId.js +5 -1
  112. package/dist/core/utils/generateId.js.map +1 -1
  113. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +15 -11
  114. package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
  115. package/dist/core/utils/stream/AssistantMetaTransformStream.js +38 -42
  116. package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
  117. package/dist/core/utils/stream/AssistantTransformStream.d.ts +11 -8
  118. package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
  119. package/dist/core/utils/stream/AssistantTransformStream.js +37 -35
  120. package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
  121. package/dist/core/utils/stream/LineDecoderStream.d.ts +6 -3
  122. package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
  123. package/dist/core/utils/stream/LineDecoderStream.js +23 -26
  124. package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
  125. package/dist/core/utils/stream/PipeableTransformStream.d.ts +5 -2
  126. package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
  127. package/dist/core/utils/stream/PipeableTransformStream.js +14 -10
  128. package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
  129. package/dist/core/utils/stream/SSE.d.ts +10 -6
  130. package/dist/core/utils/stream/SSE.d.ts.map +1 -1
  131. package/dist/core/utils/stream/SSE.js +79 -91
  132. package/dist/core/utils/stream/SSE.js.map +1 -1
  133. package/dist/core/utils/stream/UnderlyingReadable.d.ts +7 -4
  134. package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
  135. package/dist/core/utils/stream/UnderlyingReadable.js +0 -2
  136. package/dist/core/utils/stream/merge.d.ts +11 -7
  137. package/dist/core/utils/stream/merge.d.ts.map +1 -1
  138. package/dist/core/utils/stream/merge.js +68 -170
  139. package/dist/core/utils/stream/merge.js.map +1 -1
  140. package/dist/core/utils/stream/path-utils.d.ts +11 -7
  141. package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
  142. package/dist/core/utils/stream/path-utils.js +46 -52
  143. package/dist/core/utils/stream/path-utils.js.map +1 -1
  144. package/dist/core/utils/types.d.ts +109 -113
  145. package/dist/core/utils/types.d.ts.map +1 -1
  146. package/dist/core/utils/types.js +0 -2
  147. package/dist/core/utils/withPromiseOrValue.d.ts +4 -1
  148. package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
  149. package/dist/core/utils/withPromiseOrValue.js +12 -15
  150. package/dist/core/utils/withPromiseOrValue.js.map +1 -1
  151. package/dist/index.d.ts +23 -24
  152. package/dist/index.js +16 -16
  153. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
  154. package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
  155. package/dist/resumable/ResumableStreamContext.d.ts +28 -24
  156. package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
  157. package/dist/resumable/ResumableStreamContext.js +99 -114
  158. package/dist/resumable/ResumableStreamContext.js.map +1 -1
  159. package/dist/resumable/constants.d.ts +4 -1
  160. package/dist/resumable/constants.d.ts.map +1 -1
  161. package/dist/resumable/constants.js +5 -1
  162. package/dist/resumable/constants.js.map +1 -1
  163. package/dist/resumable/createResumableAssistantStreamResponse.d.ts +22 -21
  164. package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
  165. package/dist/resumable/createResumableAssistantStreamResponse.js +25 -32
  166. package/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -1
  167. package/dist/resumable/errors.d.ts +8 -5
  168. package/dist/resumable/errors.d.ts.map +1 -1
  169. package/dist/resumable/errors.js +14 -12
  170. package/dist/resumable/errors.js.map +1 -1
  171. package/dist/resumable/index.d.ts +7 -7
  172. package/dist/resumable/index.js +5 -5
  173. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +14 -10
  174. package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
  175. package/dist/resumable/stores/InMemoryResumableStreamStore.js +159 -193
  176. package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
  177. package/dist/resumable/stores/ioredis.d.ts +9 -5
  178. package/dist/resumable/stores/ioredis.d.ts.map +1 -1
  179. package/dist/resumable/stores/ioredis.js +70 -82
  180. package/dist/resumable/stores/ioredis.js.map +1 -1
  181. package/dist/resumable/stores/redis-impl.d.ts +51 -48
  182. package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
  183. package/dist/resumable/stores/redis-impl.js +176 -176
  184. package/dist/resumable/stores/redis-impl.js.map +1 -1
  185. package/dist/resumable/stores/redis.d.ts +31 -28
  186. package/dist/resumable/stores/redis.d.ts.map +1 -1
  187. package/dist/resumable/stores/redis.js +87 -95
  188. package/dist/resumable/stores/redis.js.map +1 -1
  189. package/dist/resumable/types.d.ts +29 -26
  190. package/dist/resumable/types.d.ts.map +1 -1
  191. package/dist/resumable/types.js +0 -2
  192. package/dist/utils/AsyncIterableStream.d.ts +5 -2
  193. package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
  194. package/dist/utils/AsyncIterableStream.js +17 -16
  195. package/dist/utils/AsyncIterableStream.js.map +1 -1
  196. package/dist/utils/json/fix-json.d.ts +4 -1
  197. package/dist/utils/json/fix-json.d.ts.map +1 -1
  198. package/dist/utils/json/fix-json.js +286 -380
  199. package/dist/utils/json/fix-json.js.map +1 -1
  200. package/dist/utils/json/is-json.d.ts +8 -4
  201. package/dist/utils/json/is-json.d.ts.map +1 -1
  202. package/dist/utils/json/is-json.js +13 -21
  203. package/dist/utils/json/is-json.js.map +1 -1
  204. package/dist/utils/json/json-value.d.ts +7 -4
  205. package/dist/utils/json/json-value.d.ts.map +1 -1
  206. package/dist/utils/json/json-value.js +0 -2
  207. package/dist/utils/json/parse-partial-json-object.d.ts +11 -8
  208. package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
  209. package/dist/utils/json/parse-partial-json-object.js +50 -62
  210. package/dist/utils/json/parse-partial-json-object.js.map +1 -1
  211. package/dist/utils/promiseWithResolvers.d.ts +7 -4
  212. package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
  213. package/dist/utils/promiseWithResolvers.js +17 -10
  214. package/dist/utils/promiseWithResolvers.js.map +1 -1
  215. package/dist/utils.d.ts +6 -6
  216. package/dist/utils.js +5 -5
  217. package/package.json +5 -4
  218. package/src/core/AssistantStream.ts +37 -0
  219. package/src/core/AssistantStreamChunk.ts +30 -0
  220. package/src/core/modules/assistant-stream.ts +68 -0
  221. package/src/core/tool/ToolResponse.ts +45 -1
  222. package/src/core/tool/tool-types.ts +102 -2
  223. package/src/core/tool/toolResultStream.ts +15 -0
  224. package/dist/core/AssistantStreamChunk.js.map +0 -1
  225. package/dist/core/object/types.js.map +0 -1
  226. package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
  227. package/dist/core/tool/tool-types.js.map +0 -1
  228. package/dist/core/tool/type-path-utils.js.map +0 -1
  229. package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
  230. package/dist/core/utils/types.js.map +0 -1
  231. package/dist/index.d.ts.map +0 -1
  232. package/dist/index.js.map +0 -1
  233. package/dist/resumable/index.d.ts.map +0 -1
  234. package/dist/resumable/index.js.map +0 -1
  235. package/dist/resumable/types.js.map +0 -1
  236. package/dist/utils/json/json-value.js.map +0 -1
  237. package/dist/utils.d.ts.map +0 -1
  238. package/dist/utils.js.map +0 -1
@@ -1,382 +1,288 @@
1
- // LICENSE for this file only
2
- // Implemented as a scanner with additional fixing
3
- // that performs a single linear time scan pass over the partial JSON.
4
- //
5
- // The states should ideally match relevant states from the JSON spec:
6
- // https://www.json.org/json-en.html
7
- //
8
- // Please note that invalid JSON is not considered/covered, because it
9
- // is assumed that the resulting JSON will be processed by a standard
10
- // JSON parser that will detect any invalid JSON.
11
- // Returns a tuple of [fixedJson, partialPath]
12
- // partialPath is an array of object/array keys that represent
13
- // the currently partial values. An object is considered partial
14
- // if through appending extra characters to the JSON string, its
15
- // value could change.
16
- // Example input: '{"foo":[{"a":f'
17
- // Example output: ['{"foo":[{"a":false}]}', ['foo', '0']]
18
- // Example input: '{"foo":'
19
- // Example output: ['{}', []]
20
- export function fixJson(input) {
21
- const stack = ["ROOT"];
22
- let lastValidIndex = -1;
23
- let literalStart = null;
24
- const path = [];
25
- let currentKey;
26
- function pushCurrentKeyToPath() {
27
- if (currentKey !== undefined) {
28
- path.push(JSON.parse(`"${currentKey}"`));
29
- currentKey = undefined;
30
- }
31
- }
32
- function processValueStart(char, i, swapState) {
33
- switch (char) {
34
- case '"': {
35
- lastValidIndex = i;
36
- stack.pop();
37
- stack.push(swapState);
38
- stack.push("INSIDE_STRING");
39
- pushCurrentKeyToPath();
40
- break;
41
- }
42
- case "f":
43
- case "t":
44
- case "n": {
45
- lastValidIndex = i;
46
- literalStart = i;
47
- stack.pop();
48
- stack.push(swapState);
49
- stack.push("INSIDE_LITERAL");
50
- break;
51
- }
52
- case "-": {
53
- stack.pop();
54
- stack.push(swapState);
55
- stack.push("INSIDE_NUMBER");
56
- pushCurrentKeyToPath();
57
- break;
58
- }
59
- case "0":
60
- case "1":
61
- case "2":
62
- case "3":
63
- case "4":
64
- case "5":
65
- case "6":
66
- case "7":
67
- case "8":
68
- case "9": {
69
- lastValidIndex = i;
70
- stack.pop();
71
- stack.push(swapState);
72
- stack.push("INSIDE_NUMBER");
73
- pushCurrentKeyToPath();
74
- break;
75
- }
76
- case "{": {
77
- lastValidIndex = i;
78
- stack.pop();
79
- stack.push(swapState);
80
- stack.push("INSIDE_OBJECT_START");
81
- pushCurrentKeyToPath();
82
- break;
83
- }
84
- case "[": {
85
- lastValidIndex = i;
86
- stack.pop();
87
- stack.push(swapState);
88
- stack.push("INSIDE_ARRAY_START");
89
- pushCurrentKeyToPath();
90
- break;
91
- }
92
- }
93
- }
94
- function processAfterObjectValue(char, i) {
95
- switch (char) {
96
- case ",": {
97
- stack.pop();
98
- stack.push("INSIDE_OBJECT_AFTER_COMMA");
99
- break;
100
- }
101
- case "}": {
102
- lastValidIndex = i;
103
- stack.pop();
104
- currentKey = path.pop();
105
- break;
106
- }
107
- }
108
- }
109
- function processAfterArrayValue(char, i) {
110
- switch (char) {
111
- case ",": {
112
- stack.pop();
113
- stack.push("INSIDE_ARRAY_AFTER_COMMA");
114
- currentKey = (Number(currentKey) + 1).toString();
115
- break;
116
- }
117
- case "]": {
118
- lastValidIndex = i;
119
- stack.pop();
120
- currentKey = path.pop();
121
- break;
122
- }
123
- }
124
- }
125
- for (let i = 0; i < input.length; i++) {
126
- const char = input[i];
127
- const currentState = stack[stack.length - 1];
128
- switch (currentState) {
129
- case "ROOT":
130
- processValueStart(char, i, "FINISH");
131
- break;
132
- case "INSIDE_OBJECT_START": {
133
- switch (char) {
134
- case '"': {
135
- stack.pop();
136
- stack.push("INSIDE_OBJECT_KEY");
137
- currentKey = "";
138
- break;
139
- }
140
- case "}": {
141
- lastValidIndex = i;
142
- stack.pop();
143
- currentKey = path.pop();
144
- break;
145
- }
146
- }
147
- break;
148
- }
149
- case "INSIDE_OBJECT_AFTER_COMMA": {
150
- switch (char) {
151
- case '"': {
152
- stack.pop();
153
- stack.push("INSIDE_OBJECT_KEY");
154
- currentKey = "";
155
- break;
156
- }
157
- }
158
- break;
159
- }
160
- case "INSIDE_OBJECT_KEY": {
161
- switch (char) {
162
- case '"': {
163
- stack.pop();
164
- stack.push("INSIDE_OBJECT_AFTER_KEY");
165
- break;
166
- }
167
- case "\\": {
168
- stack.push("INSIDE_STRING_ESCAPE");
169
- currentKey += char;
170
- break;
171
- }
172
- default: {
173
- currentKey += char;
174
- break;
175
- }
176
- }
177
- break;
178
- }
179
- case "INSIDE_OBJECT_AFTER_KEY": {
180
- switch (char) {
181
- case ":": {
182
- stack.pop();
183
- stack.push("INSIDE_OBJECT_BEFORE_VALUE");
184
- break;
185
- }
186
- }
187
- break;
188
- }
189
- case "INSIDE_OBJECT_BEFORE_VALUE": {
190
- processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
191
- break;
192
- }
193
- case "INSIDE_OBJECT_AFTER_VALUE": {
194
- processAfterObjectValue(char, i);
195
- break;
196
- }
197
- case "INSIDE_STRING": {
198
- switch (char) {
199
- case '"': {
200
- stack.pop();
201
- lastValidIndex = i;
202
- currentKey = path.pop();
203
- break;
204
- }
205
- case "\\": {
206
- stack.push("INSIDE_STRING_ESCAPE");
207
- break;
208
- }
209
- default: {
210
- lastValidIndex = i;
211
- }
212
- }
213
- break;
214
- }
215
- case "INSIDE_ARRAY_START": {
216
- switch (char) {
217
- case "]": {
218
- lastValidIndex = i;
219
- stack.pop();
220
- currentKey = path.pop();
221
- break;
222
- }
223
- default: {
224
- lastValidIndex = i;
225
- currentKey = "0";
226
- processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
227
- break;
228
- }
229
- }
230
- break;
231
- }
232
- case "INSIDE_ARRAY_AFTER_VALUE": {
233
- switch (char) {
234
- case ",": {
235
- stack.pop();
236
- stack.push("INSIDE_ARRAY_AFTER_COMMA");
237
- currentKey = (Number(currentKey) + 1).toString();
238
- break;
239
- }
240
- case "]": {
241
- lastValidIndex = i;
242
- stack.pop();
243
- currentKey = path.pop();
244
- break;
245
- }
246
- default: {
247
- lastValidIndex = i;
248
- break;
249
- }
250
- }
251
- break;
252
- }
253
- case "INSIDE_ARRAY_AFTER_COMMA": {
254
- processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
255
- break;
256
- }
257
- case "INSIDE_STRING_ESCAPE": {
258
- stack.pop();
259
- if (stack[stack.length - 1] === "INSIDE_STRING") {
260
- lastValidIndex = i;
261
- }
262
- else if (stack[stack.length - 1] === "INSIDE_OBJECT_KEY") {
263
- currentKey += char;
264
- }
265
- break;
266
- }
267
- case "INSIDE_NUMBER": {
268
- switch (char) {
269
- case "0":
270
- case "1":
271
- case "2":
272
- case "3":
273
- case "4":
274
- case "5":
275
- case "6":
276
- case "7":
277
- case "8":
278
- case "9": {
279
- lastValidIndex = i;
280
- break;
281
- }
282
- case "e":
283
- case "E":
284
- case "-":
285
- case ".": {
286
- break;
287
- }
288
- case ",": {
289
- stack.pop();
290
- currentKey = path.pop();
291
- if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
292
- processAfterArrayValue(char, i);
293
- }
294
- if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
295
- processAfterObjectValue(char, i);
296
- }
297
- break;
298
- }
299
- case "}": {
300
- stack.pop();
301
- currentKey = path.pop();
302
- if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
303
- processAfterObjectValue(char, i);
304
- }
305
- break;
306
- }
307
- case "]": {
308
- stack.pop();
309
- currentKey = path.pop();
310
- if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
311
- processAfterArrayValue(char, i);
312
- }
313
- break;
314
- }
315
- default: {
316
- stack.pop();
317
- currentKey = path.pop();
318
- break;
319
- }
320
- }
321
- break;
322
- }
323
- case "INSIDE_LITERAL": {
324
- const partialLiteral = input.substring(literalStart, i + 1);
325
- if (!"false".startsWith(partialLiteral) &&
326
- !"true".startsWith(partialLiteral) &&
327
- !"null".startsWith(partialLiteral)) {
328
- stack.pop();
329
- if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
330
- processAfterObjectValue(char, i);
331
- }
332
- else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
333
- processAfterArrayValue(char, i);
334
- }
335
- }
336
- else {
337
- lastValidIndex = i;
338
- }
339
- break;
340
- }
341
- }
342
- }
343
- let result = input.slice(0, lastValidIndex + 1);
344
- for (let i = stack.length - 1; i >= 0; i--) {
345
- const state = stack[i];
346
- switch (state) {
347
- case "INSIDE_STRING": {
348
- result += '"';
349
- break;
350
- }
351
- case "INSIDE_OBJECT_KEY":
352
- case "INSIDE_OBJECT_AFTER_KEY":
353
- case "INSIDE_OBJECT_AFTER_COMMA":
354
- case "INSIDE_OBJECT_START":
355
- case "INSIDE_OBJECT_BEFORE_VALUE":
356
- case "INSIDE_OBJECT_AFTER_VALUE": {
357
- result += "}";
358
- break;
359
- }
360
- case "INSIDE_ARRAY_START":
361
- case "INSIDE_ARRAY_AFTER_COMMA":
362
- case "INSIDE_ARRAY_AFTER_VALUE": {
363
- result += "]";
364
- break;
365
- }
366
- case "INSIDE_LITERAL": {
367
- const partialLiteral = input.substring(literalStart, input.length);
368
- if ("true".startsWith(partialLiteral)) {
369
- result += "true".slice(partialLiteral.length);
370
- }
371
- else if ("false".startsWith(partialLiteral)) {
372
- result += "false".slice(partialLiteral.length);
373
- }
374
- else if ("null".startsWith(partialLiteral)) {
375
- result += "null".slice(partialLiteral.length);
376
- }
377
- }
378
- }
379
- }
380
- return [result, path];
1
+ //#region src/utils/json/fix-json.ts
2
+ function fixJson(input) {
3
+ const stack = ["ROOT"];
4
+ let lastValidIndex = -1;
5
+ let literalStart = null;
6
+ const path = [];
7
+ let currentKey;
8
+ function pushCurrentKeyToPath() {
9
+ if (currentKey !== void 0) {
10
+ path.push(JSON.parse(`"${currentKey}"`));
11
+ currentKey = void 0;
12
+ }
13
+ }
14
+ function processValueStart(char, i, swapState) {
15
+ switch (char) {
16
+ case "\"":
17
+ lastValidIndex = i;
18
+ stack.pop();
19
+ stack.push(swapState);
20
+ stack.push("INSIDE_STRING");
21
+ pushCurrentKeyToPath();
22
+ break;
23
+ case "f":
24
+ case "t":
25
+ case "n":
26
+ lastValidIndex = i;
27
+ literalStart = i;
28
+ stack.pop();
29
+ stack.push(swapState);
30
+ stack.push("INSIDE_LITERAL");
31
+ break;
32
+ case "-":
33
+ stack.pop();
34
+ stack.push(swapState);
35
+ stack.push("INSIDE_NUMBER");
36
+ pushCurrentKeyToPath();
37
+ break;
38
+ case "0":
39
+ case "1":
40
+ case "2":
41
+ case "3":
42
+ case "4":
43
+ case "5":
44
+ case "6":
45
+ case "7":
46
+ case "8":
47
+ case "9":
48
+ lastValidIndex = i;
49
+ stack.pop();
50
+ stack.push(swapState);
51
+ stack.push("INSIDE_NUMBER");
52
+ pushCurrentKeyToPath();
53
+ break;
54
+ case "{":
55
+ lastValidIndex = i;
56
+ stack.pop();
57
+ stack.push(swapState);
58
+ stack.push("INSIDE_OBJECT_START");
59
+ pushCurrentKeyToPath();
60
+ break;
61
+ case "[":
62
+ lastValidIndex = i;
63
+ stack.pop();
64
+ stack.push(swapState);
65
+ stack.push("INSIDE_ARRAY_START");
66
+ pushCurrentKeyToPath();
67
+ break;
68
+ }
69
+ }
70
+ function processAfterObjectValue(char, i) {
71
+ switch (char) {
72
+ case ",":
73
+ stack.pop();
74
+ stack.push("INSIDE_OBJECT_AFTER_COMMA");
75
+ break;
76
+ case "}":
77
+ lastValidIndex = i;
78
+ stack.pop();
79
+ currentKey = path.pop();
80
+ break;
81
+ }
82
+ }
83
+ function processAfterArrayValue(char, i) {
84
+ switch (char) {
85
+ case ",":
86
+ stack.pop();
87
+ stack.push("INSIDE_ARRAY_AFTER_COMMA");
88
+ currentKey = (Number(currentKey) + 1).toString();
89
+ break;
90
+ case "]":
91
+ lastValidIndex = i;
92
+ stack.pop();
93
+ currentKey = path.pop();
94
+ break;
95
+ }
96
+ }
97
+ for (let i = 0; i < input.length; i++) {
98
+ const char = input[i];
99
+ switch (stack[stack.length - 1]) {
100
+ case "ROOT":
101
+ processValueStart(char, i, "FINISH");
102
+ break;
103
+ case "INSIDE_OBJECT_START":
104
+ switch (char) {
105
+ case "\"":
106
+ stack.pop();
107
+ stack.push("INSIDE_OBJECT_KEY");
108
+ currentKey = "";
109
+ break;
110
+ case "}":
111
+ lastValidIndex = i;
112
+ stack.pop();
113
+ currentKey = path.pop();
114
+ break;
115
+ }
116
+ break;
117
+ case "INSIDE_OBJECT_AFTER_COMMA":
118
+ switch (char) {
119
+ case "\"":
120
+ stack.pop();
121
+ stack.push("INSIDE_OBJECT_KEY");
122
+ currentKey = "";
123
+ break;
124
+ }
125
+ break;
126
+ case "INSIDE_OBJECT_KEY":
127
+ switch (char) {
128
+ case "\"":
129
+ stack.pop();
130
+ stack.push("INSIDE_OBJECT_AFTER_KEY");
131
+ break;
132
+ case "\\":
133
+ stack.push("INSIDE_STRING_ESCAPE");
134
+ currentKey += char;
135
+ break;
136
+ default:
137
+ currentKey += char;
138
+ break;
139
+ }
140
+ break;
141
+ case "INSIDE_OBJECT_AFTER_KEY":
142
+ switch (char) {
143
+ case ":":
144
+ stack.pop();
145
+ stack.push("INSIDE_OBJECT_BEFORE_VALUE");
146
+ break;
147
+ }
148
+ break;
149
+ case "INSIDE_OBJECT_BEFORE_VALUE":
150
+ processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
151
+ break;
152
+ case "INSIDE_OBJECT_AFTER_VALUE":
153
+ processAfterObjectValue(char, i);
154
+ break;
155
+ case "INSIDE_STRING":
156
+ switch (char) {
157
+ case "\"":
158
+ stack.pop();
159
+ lastValidIndex = i;
160
+ currentKey = path.pop();
161
+ break;
162
+ case "\\":
163
+ stack.push("INSIDE_STRING_ESCAPE");
164
+ break;
165
+ default: lastValidIndex = i;
166
+ }
167
+ break;
168
+ case "INSIDE_ARRAY_START":
169
+ switch (char) {
170
+ case "]":
171
+ lastValidIndex = i;
172
+ stack.pop();
173
+ currentKey = path.pop();
174
+ break;
175
+ default:
176
+ lastValidIndex = i;
177
+ currentKey = "0";
178
+ processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
179
+ break;
180
+ }
181
+ break;
182
+ case "INSIDE_ARRAY_AFTER_VALUE":
183
+ switch (char) {
184
+ case ",":
185
+ stack.pop();
186
+ stack.push("INSIDE_ARRAY_AFTER_COMMA");
187
+ currentKey = (Number(currentKey) + 1).toString();
188
+ break;
189
+ case "]":
190
+ lastValidIndex = i;
191
+ stack.pop();
192
+ currentKey = path.pop();
193
+ break;
194
+ default:
195
+ lastValidIndex = i;
196
+ break;
197
+ }
198
+ break;
199
+ case "INSIDE_ARRAY_AFTER_COMMA":
200
+ processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
201
+ break;
202
+ case "INSIDE_STRING_ESCAPE":
203
+ stack.pop();
204
+ if (stack[stack.length - 1] === "INSIDE_STRING") lastValidIndex = i;
205
+ else if (stack[stack.length - 1] === "INSIDE_OBJECT_KEY") currentKey += char;
206
+ break;
207
+ case "INSIDE_NUMBER":
208
+ switch (char) {
209
+ case "0":
210
+ case "1":
211
+ case "2":
212
+ case "3":
213
+ case "4":
214
+ case "5":
215
+ case "6":
216
+ case "7":
217
+ case "8":
218
+ case "9":
219
+ lastValidIndex = i;
220
+ break;
221
+ case "e":
222
+ case "E":
223
+ case "-":
224
+ case ".": break;
225
+ case ",":
226
+ stack.pop();
227
+ currentKey = path.pop();
228
+ if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
229
+ if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
230
+ break;
231
+ case "}":
232
+ stack.pop();
233
+ currentKey = path.pop();
234
+ if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
235
+ break;
236
+ case "]":
237
+ stack.pop();
238
+ currentKey = path.pop();
239
+ if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
240
+ break;
241
+ default:
242
+ stack.pop();
243
+ currentKey = path.pop();
244
+ break;
245
+ }
246
+ break;
247
+ case "INSIDE_LITERAL": {
248
+ const partialLiteral = input.substring(literalStart, i + 1);
249
+ if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
250
+ stack.pop();
251
+ if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
252
+ else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
253
+ } else lastValidIndex = i;
254
+ break;
255
+ }
256
+ }
257
+ }
258
+ let result = input.slice(0, lastValidIndex + 1);
259
+ for (let i = stack.length - 1; i >= 0; i--) switch (stack[i]) {
260
+ case "INSIDE_STRING":
261
+ result += "\"";
262
+ break;
263
+ case "INSIDE_OBJECT_KEY":
264
+ case "INSIDE_OBJECT_AFTER_KEY":
265
+ case "INSIDE_OBJECT_AFTER_COMMA":
266
+ case "INSIDE_OBJECT_START":
267
+ case "INSIDE_OBJECT_BEFORE_VALUE":
268
+ case "INSIDE_OBJECT_AFTER_VALUE":
269
+ result += "}";
270
+ break;
271
+ case "INSIDE_ARRAY_START":
272
+ case "INSIDE_ARRAY_AFTER_COMMA":
273
+ case "INSIDE_ARRAY_AFTER_VALUE":
274
+ result += "]";
275
+ break;
276
+ case "INSIDE_LITERAL": {
277
+ const partialLiteral = input.substring(literalStart, input.length);
278
+ if ("true".startsWith(partialLiteral)) result += "true".slice(partialLiteral.length);
279
+ else if ("false".startsWith(partialLiteral)) result += "false".slice(partialLiteral.length);
280
+ else if ("null".startsWith(partialLiteral)) result += "null".slice(partialLiteral.length);
281
+ }
282
+ }
283
+ return [result, path];
381
284
  }
285
+ //#endregion
286
+ export { fixJson };
287
+
382
288
  //# sourceMappingURL=fix-json.js.map