assistant-stream 0.2.45 → 0.2.47

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