prefix-safe-json 0.0.1-alpha.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/LICENSE-APACHE +114 -0
- package/LICENSE-MIT +21 -0
- package/README.md +169 -0
- package/dist/coordinator/coordinator.d.ts +43 -0
- package/dist/coordinator/coordinator.d.ts.map +1 -0
- package/dist/coordinator/coordinator.js +407 -0
- package/dist/coordinator/coordinator.js.map +1 -0
- package/dist/coordinator/protocol.d.ts +61 -0
- package/dist/coordinator/protocol.d.ts.map +1 -0
- package/dist/coordinator/protocol.js +2 -0
- package/dist/coordinator/protocol.js.map +1 -0
- package/dist/coordinator/types.d.ts +84 -0
- package/dist/coordinator/types.d.ts.map +1 -0
- package/dist/coordinator/types.js +7 -0
- package/dist/coordinator/types.js.map +1 -0
- package/dist/diagnostics/codes.d.ts +24 -0
- package/dist/diagnostics/codes.d.ts.map +1 -0
- package/dist/diagnostics/codes.js +28 -0
- package/dist/diagnostics/codes.js.map +1 -0
- package/dist/diagnostics/factory.d.ts +8 -0
- package/dist/diagnostics/factory.d.ts.map +1 -0
- package/dist/diagnostics/factory.js +17 -0
- package/dist/diagnostics/factory.js.map +1 -0
- package/dist/grammar/frame.d.ts +58 -0
- package/dist/grammar/frame.d.ts.map +1 -0
- package/dist/grammar/frame.js +87 -0
- package/dist/grammar/frame.js.map +1 -0
- package/dist/grammar/pointer.d.ts +10 -0
- package/dist/grammar/pointer.d.ts.map +1 -0
- package/dist/grammar/pointer.js +20 -0
- package/dist/grammar/pointer.js.map +1 -0
- package/dist/grammar/stack.d.ts +73 -0
- package/dist/grammar/stack.d.ts.map +1 -0
- package/dist/grammar/stack.js +168 -0
- package/dist/grammar/stack.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/scanner.d.ts +108 -0
- package/dist/lexer/scanner.d.ts.map +1 -0
- package/dist/lexer/scanner.js +676 -0
- package/dist/lexer/scanner.js.map +1 -0
- package/dist/lexer/states.d.ts +35 -0
- package/dist/lexer/states.d.ts.map +1 -0
- package/dist/lexer/states.js +39 -0
- package/dist/lexer/states.js.map +1 -0
- package/dist/lexer/tokens.d.ts +22 -0
- package/dist/lexer/tokens.d.ts.map +1 -0
- package/dist/lexer/tokens.js +22 -0
- package/dist/lexer/tokens.js.map +1 -0
- package/dist/limits.d.ts +14 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +23 -0
- package/dist/limits.js.map +1 -0
- package/dist/parser.d.ts +6 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +949 -0
- package/dist/parser.js.map +1 -0
- package/dist/providers/adapter.d.ts +10 -0
- package/dist/providers/adapter.d.ts.map +1 -0
- package/dist/providers/adapter.js +2 -0
- package/dist/providers/adapter.js.map +1 -0
- package/dist/providers/anthropic.d.ts +45 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +112 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +31 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +94 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +33 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -0
- package/dist/providers/openai-compatible.js +160 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/openai.d.ts +48 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +205 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +35 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +55 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/semantic/builder.d.ts +55 -0
- package/dist/semantic/builder.d.ts.map +1 -0
- package/dist/semantic/builder.js +140 -0
- package/dist/semantic/builder.js.map +1 -0
- package/dist/semantic/events.d.ts +2 -0
- package/dist/semantic/events.d.ts.map +1 -0
- package/dist/semantic/events.js +5 -0
- package/dist/semantic/events.js.map +1 -0
- package/dist/semantic/snapshot.d.ts +49 -0
- package/dist/semantic/snapshot.d.ts.map +1 -0
- package/dist/semantic/snapshot.js +228 -0
- package/dist/semantic/snapshot.js.map +1 -0
- package/dist/types.d.ts +156 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utf8/decoder.d.ts +53 -0
- package/dist/utf8/decoder.d.ts.map +1 -0
- package/dist/utf8/decoder.js +318 -0
- package/dist/utf8/decoder.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Incremental UTF-8 Decoder
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
//
|
|
5
|
+
// Processes Uint8Array chunks and yields code points one at a time.
|
|
6
|
+
// Handles multi-byte characters split across chunk boundaries by buffering
|
|
7
|
+
// incomplete trailing bytes until the next push().
|
|
8
|
+
//
|
|
9
|
+
// Design decisions:
|
|
10
|
+
// - Does NOT silently replace invalid bytes with U+FFFD
|
|
11
|
+
// - Rejects overlong encodings
|
|
12
|
+
// - Reports invalid continuation bytes
|
|
13
|
+
// - Truncated sequences at finish() are reportable
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Incremental UTF-8 decoder that handles multi-byte characters
|
|
17
|
+
* split across chunk boundaries.
|
|
18
|
+
*/
|
|
19
|
+
export class Utf8Decoder {
|
|
20
|
+
/** Pending bytes from an incomplete multi-byte sequence. */
|
|
21
|
+
pending = [];
|
|
22
|
+
/** Expected total length of the current multi-byte sequence. */
|
|
23
|
+
pendingExpected = 0;
|
|
24
|
+
/** Total bytes processed across all push() calls. */
|
|
25
|
+
totalOffset = 0;
|
|
26
|
+
bomBuffer = [];
|
|
27
|
+
checkedForBom = false;
|
|
28
|
+
/**
|
|
29
|
+
* Decode a chunk of bytes, returning decoded text and any errors.
|
|
30
|
+
* Incomplete trailing multi-byte sequences are buffered for the next call.
|
|
31
|
+
*/
|
|
32
|
+
decode(bytes) {
|
|
33
|
+
const errors = [];
|
|
34
|
+
const codePoints = [];
|
|
35
|
+
let strippedBom = false;
|
|
36
|
+
let i = 0;
|
|
37
|
+
// Handle BOM check at the very beginning of the stream
|
|
38
|
+
if (!this.checkedForBom) {
|
|
39
|
+
while (this.bomBuffer.length < 3 && i < bytes.length) {
|
|
40
|
+
this.bomBuffer.push(bytes[i]);
|
|
41
|
+
i++;
|
|
42
|
+
}
|
|
43
|
+
const isBomPrefix = (this.bomBuffer[0] === 0xef) &&
|
|
44
|
+
(this.bomBuffer.length < 2 || this.bomBuffer[1] === 0xbb) &&
|
|
45
|
+
(this.bomBuffer.length < 3 || this.bomBuffer[2] === 0xbf);
|
|
46
|
+
if (isBomPrefix && this.bomBuffer.length < 3) {
|
|
47
|
+
// Still possibly a BOM, wait for more data
|
|
48
|
+
return { text: "", consumed: i, errors, strippedBom: false };
|
|
49
|
+
}
|
|
50
|
+
this.checkedForBom = true;
|
|
51
|
+
let bufferToProcess = new Uint8Array();
|
|
52
|
+
if (this.bomBuffer.length >= 3 &&
|
|
53
|
+
this.bomBuffer[0] === 0xef &&
|
|
54
|
+
this.bomBuffer[1] === 0xbb &&
|
|
55
|
+
this.bomBuffer[2] === 0xbf) {
|
|
56
|
+
strippedBom = true;
|
|
57
|
+
this.totalOffset += 3;
|
|
58
|
+
// The remaining bytes in bomBuffer (if any) need to be processed
|
|
59
|
+
const remainingInBomBuffer = this.bomBuffer.slice(3);
|
|
60
|
+
const remainingInBytes = bytes.slice(i);
|
|
61
|
+
bufferToProcess = new Uint8Array(remainingInBomBuffer.length + remainingInBytes.length);
|
|
62
|
+
bufferToProcess.set(remainingInBomBuffer);
|
|
63
|
+
bufferToProcess.set(remainingInBytes, remainingInBomBuffer.length);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Not a BOM. Process the whole bomBuffer + remaining bytes.
|
|
67
|
+
const remainingInBytes = bytes.slice(i);
|
|
68
|
+
bufferToProcess = new Uint8Array(this.bomBuffer.length + remainingInBytes.length);
|
|
69
|
+
bufferToProcess.set(this.bomBuffer);
|
|
70
|
+
bufferToProcess.set(remainingInBytes, this.bomBuffer.length);
|
|
71
|
+
}
|
|
72
|
+
// Reset i and swap bytes to the reconstructed buffer
|
|
73
|
+
i = 0;
|
|
74
|
+
bytes = bufferToProcess;
|
|
75
|
+
}
|
|
76
|
+
const startOffset = this.totalOffset;
|
|
77
|
+
// If we have pending bytes from a previous chunk, try to complete the sequence
|
|
78
|
+
if (this.pending.length > 0) {
|
|
79
|
+
let brokenByInvalidContinuation = false;
|
|
80
|
+
while (i < bytes.length && this.pending.length < this.pendingExpected) {
|
|
81
|
+
const b = bytes[i];
|
|
82
|
+
if ((b & 0xc0) !== 0x80) {
|
|
83
|
+
// Not a valid continuation byte — the pending sequence is broken
|
|
84
|
+
errors.push({
|
|
85
|
+
kind: "invalid_continuation",
|
|
86
|
+
byteOffset: startOffset - this.pending.length,
|
|
87
|
+
});
|
|
88
|
+
this.pending = [];
|
|
89
|
+
this.pendingExpected = 0;
|
|
90
|
+
brokenByInvalidContinuation = true;
|
|
91
|
+
// Don't consume this byte — it might be a valid start byte
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
this.pending.push(b);
|
|
95
|
+
i++;
|
|
96
|
+
this.totalOffset++;
|
|
97
|
+
}
|
|
98
|
+
// brokenByInvalidContinuation resets pending.length/pendingExpected to
|
|
99
|
+
// the same value (0), which would otherwise make the check below
|
|
100
|
+
// read as "0 of 0 bytes needed - sequence complete" and spuriously
|
|
101
|
+
// decode an empty byte array, producing a second, bogus diagnostic
|
|
102
|
+
// alongside the invalid_continuation one already pushed above.
|
|
103
|
+
if (!brokenByInvalidContinuation && this.pending.length === this.pendingExpected) {
|
|
104
|
+
// We have a complete sequence — decode it
|
|
105
|
+
const result = this.decodeSequence(this.pending, startOffset - (this.pending.length - (i - 0)));
|
|
106
|
+
if (result.error) {
|
|
107
|
+
errors.push(result.error);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
codePoints.push(result.codePoint);
|
|
111
|
+
}
|
|
112
|
+
this.pending = [];
|
|
113
|
+
this.pendingExpected = 0;
|
|
114
|
+
}
|
|
115
|
+
else if (!brokenByInvalidContinuation && i >= bytes.length) {
|
|
116
|
+
// Still incomplete — wait for more data
|
|
117
|
+
const consumed = this.totalOffset - startOffset;
|
|
118
|
+
return { text: "", consumed, errors, strippedBom };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Process remaining bytes
|
|
122
|
+
while (i < bytes.length) {
|
|
123
|
+
const b = bytes[i];
|
|
124
|
+
const seqOffset = this.totalOffset;
|
|
125
|
+
if (b <= 0x7f) {
|
|
126
|
+
// Single-byte ASCII
|
|
127
|
+
codePoints.push(b);
|
|
128
|
+
i++;
|
|
129
|
+
this.totalOffset++;
|
|
130
|
+
}
|
|
131
|
+
else if ((b & 0xe0) === 0xc0) {
|
|
132
|
+
// 2-byte sequence
|
|
133
|
+
const needed = 2;
|
|
134
|
+
if (i + needed <= bytes.length) {
|
|
135
|
+
const seq = [b, bytes[i + 1]];
|
|
136
|
+
const result = this.decodeSequence(seq, seqOffset);
|
|
137
|
+
if (result.error) {
|
|
138
|
+
errors.push(result.error);
|
|
139
|
+
i++;
|
|
140
|
+
this.totalOffset++;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
codePoints.push(result.codePoint);
|
|
144
|
+
i += needed;
|
|
145
|
+
this.totalOffset += needed;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Incomplete at end of chunk — buffer it
|
|
150
|
+
this.pendingExpected = needed;
|
|
151
|
+
this.pending = [];
|
|
152
|
+
for (let j = i; j < bytes.length; j++) {
|
|
153
|
+
this.pending.push(bytes[j]);
|
|
154
|
+
}
|
|
155
|
+
this.totalOffset += bytes.length - i;
|
|
156
|
+
i = bytes.length;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if ((b & 0xf0) === 0xe0) {
|
|
160
|
+
// 3-byte sequence
|
|
161
|
+
const needed = 3;
|
|
162
|
+
if (i + needed <= bytes.length) {
|
|
163
|
+
const seq = [b, bytes[i + 1], bytes[i + 2]];
|
|
164
|
+
const result = this.decodeSequence(seq, seqOffset);
|
|
165
|
+
if (result.error) {
|
|
166
|
+
errors.push(result.error);
|
|
167
|
+
i++;
|
|
168
|
+
this.totalOffset++;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
codePoints.push(result.codePoint);
|
|
172
|
+
i += needed;
|
|
173
|
+
this.totalOffset += needed;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.pendingExpected = needed;
|
|
178
|
+
this.pending = [];
|
|
179
|
+
for (let j = i; j < bytes.length; j++) {
|
|
180
|
+
this.pending.push(bytes[j]);
|
|
181
|
+
}
|
|
182
|
+
this.totalOffset += bytes.length - i;
|
|
183
|
+
i = bytes.length;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if ((b & 0xf8) === 0xf0) {
|
|
187
|
+
// 4-byte sequence
|
|
188
|
+
const needed = 4;
|
|
189
|
+
if (i + needed <= bytes.length) {
|
|
190
|
+
const seq = [b, bytes[i + 1], bytes[i + 2], bytes[i + 3]];
|
|
191
|
+
const result = this.decodeSequence(seq, seqOffset);
|
|
192
|
+
if (result.error) {
|
|
193
|
+
errors.push(result.error);
|
|
194
|
+
i++;
|
|
195
|
+
this.totalOffset++;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
codePoints.push(result.codePoint);
|
|
199
|
+
i += needed;
|
|
200
|
+
this.totalOffset += needed;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.pendingExpected = needed;
|
|
205
|
+
this.pending = [];
|
|
206
|
+
for (let j = i; j < bytes.length; j++) {
|
|
207
|
+
this.pending.push(bytes[j]);
|
|
208
|
+
}
|
|
209
|
+
this.totalOffset += bytes.length - i;
|
|
210
|
+
i = bytes.length;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// Invalid start byte (0x80-0xBF or 0xF8+)
|
|
215
|
+
errors.push({
|
|
216
|
+
kind: "invalid_start_byte",
|
|
217
|
+
byteOffset: seqOffset,
|
|
218
|
+
});
|
|
219
|
+
i++;
|
|
220
|
+
this.totalOffset++;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const text = codePointsToString(codePoints);
|
|
224
|
+
const consumed = this.totalOffset - startOffset;
|
|
225
|
+
return { text, consumed, errors, strippedBom };
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Check if there are buffered incomplete bytes.
|
|
229
|
+
*/
|
|
230
|
+
hasIncomplete() {
|
|
231
|
+
return this.pending.length > 0;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get the byte offset where the incomplete sequence started.
|
|
235
|
+
*/
|
|
236
|
+
incompleteByteOffset() {
|
|
237
|
+
return this.totalOffset - this.pending.length;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Decode a complete multi-byte UTF-8 sequence into a code point.
|
|
241
|
+
* Returns an error for invalid continuation, overlong, or out-of-range sequences.
|
|
242
|
+
*/
|
|
243
|
+
decodeSequence(seq, offset) {
|
|
244
|
+
const len = seq.length;
|
|
245
|
+
// Validate continuation bytes
|
|
246
|
+
for (let i = 1; i < len; i++) {
|
|
247
|
+
if ((seq[i] & 0xc0) !== 0x80) {
|
|
248
|
+
return {
|
|
249
|
+
codePoint: 0,
|
|
250
|
+
error: { kind: "invalid_continuation", byteOffset: offset },
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
let codePoint;
|
|
255
|
+
let minCodePoint;
|
|
256
|
+
if (len === 2) {
|
|
257
|
+
codePoint = ((seq[0] & 0x1f) << 6) | (seq[1] & 0x3f);
|
|
258
|
+
minCodePoint = 0x80;
|
|
259
|
+
}
|
|
260
|
+
else if (len === 3) {
|
|
261
|
+
codePoint =
|
|
262
|
+
((seq[0] & 0x0f) << 12) |
|
|
263
|
+
((seq[1] & 0x3f) << 6) |
|
|
264
|
+
(seq[2] & 0x3f);
|
|
265
|
+
minCodePoint = 0x800;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// len === 4
|
|
269
|
+
codePoint =
|
|
270
|
+
((seq[0] & 0x07) << 18) |
|
|
271
|
+
((seq[1] & 0x3f) << 12) |
|
|
272
|
+
((seq[2] & 0x3f) << 6) |
|
|
273
|
+
(seq[3] & 0x3f);
|
|
274
|
+
minCodePoint = 0x10000;
|
|
275
|
+
}
|
|
276
|
+
// Check overlong encoding
|
|
277
|
+
if (codePoint < minCodePoint) {
|
|
278
|
+
return {
|
|
279
|
+
codePoint: 0,
|
|
280
|
+
error: { kind: "overlong", byteOffset: offset },
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
// Check valid Unicode range
|
|
284
|
+
if (codePoint > 0x10ffff) {
|
|
285
|
+
return {
|
|
286
|
+
codePoint: 0,
|
|
287
|
+
error: { kind: "out_of_range", byteOffset: offset },
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
return { codePoint };
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Build a string from an array of code points without spreading the whole
|
|
295
|
+
* array as call arguments — a single-call spread hits engine argument-count
|
|
296
|
+
* limits (RangeError: Maximum call stack size exceeded) once codePoints
|
|
297
|
+
* grows past roughly 100k entries, which a single large push() can trigger.
|
|
298
|
+
*/
|
|
299
|
+
function codePointsToString(codePoints) {
|
|
300
|
+
const CHUNK_SIZE = 8192;
|
|
301
|
+
if (codePoints.length <= CHUNK_SIZE) {
|
|
302
|
+
return String.fromCodePoint(...codePoints);
|
|
303
|
+
}
|
|
304
|
+
let text = "";
|
|
305
|
+
for (let i = 0; i < codePoints.length; i += CHUNK_SIZE) {
|
|
306
|
+
text += String.fromCodePoint(...codePoints.slice(i, i + CHUNK_SIZE));
|
|
307
|
+
}
|
|
308
|
+
return text;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Convert a string to its UTF-8 byte representation.
|
|
312
|
+
* Utility for tests and string-mode push().
|
|
313
|
+
*/
|
|
314
|
+
export function stringToUtf8(str) {
|
|
315
|
+
const encoder = new TextEncoder();
|
|
316
|
+
return encoder.encode(str);
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/utf8/decoder.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "prefix-safe-json",
|
|
3
|
+
"version": "0.0.1-alpha.0",
|
|
4
|
+
"description": "Incremental LLM tool-call JSON parser and deterministic repair engine — never reports a value until it's unambiguously complete",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"json",
|
|
7
|
+
"streaming",
|
|
8
|
+
"incremental",
|
|
9
|
+
"llm",
|
|
10
|
+
"tool-calling",
|
|
11
|
+
"function-calling",
|
|
12
|
+
"json-repair",
|
|
13
|
+
"json-parser"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT OR Apache-2.0",
|
|
16
|
+
"type": "module",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/canblmz1/incremental-tool-json.git"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/canblmz1/incremental-tool-json#readme",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/canblmz1/incremental-tool-json/issues"
|
|
24
|
+
},
|
|
25
|
+
"packageManager": "pnpm@10.33.1",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"LICENSE-MIT",
|
|
35
|
+
"LICENSE-APACHE",
|
|
36
|
+
"README.md"
|
|
37
|
+
],
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=18.0.0"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -p tsconfig.build.json",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"lint": "eslint src/ test/ scripts/",
|
|
45
|
+
"test": "vitest run",
|
|
46
|
+
"test:watch": "vitest",
|
|
47
|
+
"test:unit": "vitest run test/unit/",
|
|
48
|
+
"test:corpus": "vitest run test/corpus/",
|
|
49
|
+
"test:invariants": "vitest run test/invariants/",
|
|
50
|
+
"test:providers": "vitest run test/providers/",
|
|
51
|
+
"test:coverage": "vitest run --coverage",
|
|
52
|
+
"test:mutate": "stryker run",
|
|
53
|
+
"test:fuzz": "vitest run test/fuzz/",
|
|
54
|
+
"bench": "vitest bench --run",
|
|
55
|
+
"validate-corpus": "tsx scripts/validate-corpus.ts",
|
|
56
|
+
"clean": "rimraf dist coverage .vitest",
|
|
57
|
+
"pack:check": "pnpm pack --dry-run",
|
|
58
|
+
"example:anthropic": "node examples/anthropic-truncation-safety.mjs"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@eslint/js": "^9.8.0",
|
|
62
|
+
"@stryker-mutator/core": "^9.6.1",
|
|
63
|
+
"@stryker-mutator/vitest-runner": "^9.6.1",
|
|
64
|
+
"@types/clarinet": "^0.12.3",
|
|
65
|
+
"@types/node": "^26.1.2",
|
|
66
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
67
|
+
"ajv": "^8.20.0",
|
|
68
|
+
"clarinet": "^0.12.6",
|
|
69
|
+
"eslint": "^9.8.0",
|
|
70
|
+
"fast-check": "^4.9.0",
|
|
71
|
+
"jsonrepair": "^3.15.0",
|
|
72
|
+
"partial-json": "^0.1.7",
|
|
73
|
+
"rimraf": "^6.0.1",
|
|
74
|
+
"tsx": "^4.16.0",
|
|
75
|
+
"typescript": "^5.5.0",
|
|
76
|
+
"typescript-eslint": "^8.0.0",
|
|
77
|
+
"vitest": "^2.0.0"
|
|
78
|
+
}
|
|
79
|
+
}
|