prefix-safe-json 0.1.0 → 0.1.1

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 (133) hide show
  1. package/dist/coordinator/coordinator.d.ts +53 -0
  2. package/dist/coordinator/coordinator.d.ts.map +1 -0
  3. package/dist/coordinator/coordinator.js +448 -0
  4. package/dist/coordinator/coordinator.js.map +1 -0
  5. package/dist/coordinator/diagnostic-codes.d.ts +11 -0
  6. package/dist/coordinator/diagnostic-codes.d.ts.map +1 -0
  7. package/dist/coordinator/diagnostic-codes.js +22 -0
  8. package/dist/coordinator/diagnostic-codes.js.map +1 -0
  9. package/dist/coordinator/protocol.d.ts +61 -0
  10. package/dist/coordinator/protocol.d.ts.map +1 -0
  11. package/dist/coordinator/protocol.js +2 -0
  12. package/dist/coordinator/protocol.js.map +1 -0
  13. package/dist/coordinator/types.d.ts +104 -0
  14. package/dist/coordinator/types.d.ts.map +1 -0
  15. package/dist/coordinator/types.js +7 -0
  16. package/dist/coordinator/types.js.map +1 -0
  17. package/dist/diagnostics/codes.d.ts +24 -0
  18. package/dist/diagnostics/codes.d.ts.map +1 -0
  19. package/dist/diagnostics/codes.js +28 -0
  20. package/dist/diagnostics/codes.js.map +1 -0
  21. package/dist/diagnostics/factory.d.ts +8 -0
  22. package/dist/diagnostics/factory.d.ts.map +1 -0
  23. package/dist/diagnostics/factory.js +17 -0
  24. package/dist/diagnostics/factory.js.map +1 -0
  25. package/dist/gate/decide.d.ts +27 -0
  26. package/dist/gate/decide.d.ts.map +1 -0
  27. package/dist/gate/decide.js +138 -0
  28. package/dist/gate/decide.js.map +1 -0
  29. package/dist/gate/gate.d.ts +25 -0
  30. package/dist/gate/gate.d.ts.map +1 -0
  31. package/dist/gate/gate.js +96 -0
  32. package/dist/gate/gate.js.map +1 -0
  33. package/dist/gate/types.d.ts +184 -0
  34. package/dist/gate/types.d.ts.map +1 -0
  35. package/dist/gate/types.js +2 -0
  36. package/dist/gate/types.js.map +1 -0
  37. package/dist/grammar/frame.d.ts +58 -0
  38. package/dist/grammar/frame.d.ts.map +1 -0
  39. package/dist/grammar/frame.js +87 -0
  40. package/dist/grammar/frame.js.map +1 -0
  41. package/dist/grammar/pointer.d.ts +10 -0
  42. package/dist/grammar/pointer.d.ts.map +1 -0
  43. package/dist/grammar/pointer.js +20 -0
  44. package/dist/grammar/pointer.js.map +1 -0
  45. package/dist/grammar/stack.d.ts +73 -0
  46. package/dist/grammar/stack.d.ts.map +1 -0
  47. package/dist/grammar/stack.js +168 -0
  48. package/dist/grammar/stack.js.map +1 -0
  49. package/dist/guard/ai-sdk.d.ts +48 -0
  50. package/dist/guard/ai-sdk.d.ts.map +1 -0
  51. package/dist/guard/ai-sdk.js +51 -0
  52. package/dist/guard/ai-sdk.js.map +1 -0
  53. package/dist/guard/provider-guard.d.ts +4 -0
  54. package/dist/guard/provider-guard.d.ts.map +1 -0
  55. package/dist/guard/provider-guard.js +38 -0
  56. package/dist/guard/provider-guard.js.map +1 -0
  57. package/dist/guard/types.d.ts +48 -0
  58. package/dist/guard/types.d.ts.map +1 -0
  59. package/dist/guard/types.js +2 -0
  60. package/dist/guard/types.js.map +1 -0
  61. package/dist/index.d.ts +45 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +45 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/lexer/scanner.d.ts +106 -0
  66. package/dist/lexer/scanner.d.ts.map +1 -0
  67. package/dist/lexer/scanner.js +658 -0
  68. package/dist/lexer/scanner.js.map +1 -0
  69. package/dist/lexer/states.d.ts +31 -0
  70. package/dist/lexer/states.d.ts.map +1 -0
  71. package/dist/lexer/states.js +35 -0
  72. package/dist/lexer/states.js.map +1 -0
  73. package/dist/lexer/tokens.d.ts +22 -0
  74. package/dist/lexer/tokens.d.ts.map +1 -0
  75. package/dist/lexer/tokens.js +22 -0
  76. package/dist/lexer/tokens.js.map +1 -0
  77. package/dist/limits.d.ts +14 -0
  78. package/dist/limits.d.ts.map +1 -0
  79. package/dist/limits.js +23 -0
  80. package/dist/limits.js.map +1 -0
  81. package/dist/parser.d.ts +6 -0
  82. package/dist/parser.d.ts.map +1 -0
  83. package/dist/parser.js +922 -0
  84. package/dist/parser.js.map +1 -0
  85. package/dist/providers/adapter.d.ts +10 -0
  86. package/dist/providers/adapter.d.ts.map +1 -0
  87. package/dist/providers/adapter.js +2 -0
  88. package/dist/providers/adapter.js.map +1 -0
  89. package/dist/providers/ai-sdk.d.ts +58 -0
  90. package/dist/providers/ai-sdk.d.ts.map +1 -0
  91. package/dist/providers/ai-sdk.js +212 -0
  92. package/dist/providers/ai-sdk.js.map +1 -0
  93. package/dist/providers/anthropic.d.ts +45 -0
  94. package/dist/providers/anthropic.d.ts.map +1 -0
  95. package/dist/providers/anthropic.js +112 -0
  96. package/dist/providers/anthropic.js.map +1 -0
  97. package/dist/providers/gemini.d.ts +31 -0
  98. package/dist/providers/gemini.d.ts.map +1 -0
  99. package/dist/providers/gemini.js +94 -0
  100. package/dist/providers/gemini.js.map +1 -0
  101. package/dist/providers/openai-compatible.d.ts +33 -0
  102. package/dist/providers/openai-compatible.d.ts.map +1 -0
  103. package/dist/providers/openai-compatible.js +160 -0
  104. package/dist/providers/openai-compatible.js.map +1 -0
  105. package/dist/providers/openai.d.ts +55 -0
  106. package/dist/providers/openai.d.ts.map +1 -0
  107. package/dist/providers/openai.js +263 -0
  108. package/dist/providers/openai.js.map +1 -0
  109. package/dist/providers/openrouter.d.ts +35 -0
  110. package/dist/providers/openrouter.d.ts.map +1 -0
  111. package/dist/providers/openrouter.js +55 -0
  112. package/dist/providers/openrouter.js.map +1 -0
  113. package/dist/semantic/builder.d.ts +55 -0
  114. package/dist/semantic/builder.d.ts.map +1 -0
  115. package/dist/semantic/builder.js +140 -0
  116. package/dist/semantic/builder.js.map +1 -0
  117. package/dist/semantic/events.d.ts +2 -0
  118. package/dist/semantic/events.d.ts.map +1 -0
  119. package/dist/semantic/events.js +5 -0
  120. package/dist/semantic/events.js.map +1 -0
  121. package/dist/semantic/snapshot.d.ts +56 -0
  122. package/dist/semantic/snapshot.d.ts.map +1 -0
  123. package/dist/semantic/snapshot.js +230 -0
  124. package/dist/semantic/snapshot.js.map +1 -0
  125. package/dist/types.d.ts +156 -0
  126. package/dist/types.d.ts.map +1 -0
  127. package/dist/types.js +5 -0
  128. package/dist/types.js.map +1 -0
  129. package/dist/utf8/decoder.d.ts +53 -0
  130. package/dist/utf8/decoder.d.ts.map +1 -0
  131. package/dist/utf8/decoder.js +323 -0
  132. package/dist/utf8/decoder.js.map +1 -0
  133. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ import { ProviderName, NormalizedToolStreamEvent, StreamEndReason } from "../coordinator/protocol.js";
2
+ import { ProviderStreamAdapter } from "./adapter.js";
3
+ export interface OpenRouterChoice {
4
+ index?: number;
5
+ delta?: {
6
+ tool_calls?: Array<{
7
+ index?: number;
8
+ id?: string;
9
+ type?: string;
10
+ function?: {
11
+ name?: string;
12
+ arguments?: string;
13
+ };
14
+ }>;
15
+ reasoning?: string;
16
+ };
17
+ finish_reason?: string | null;
18
+ error?: unknown;
19
+ }
20
+ export interface OpenRouterEvent {
21
+ choices?: OpenRouterChoice[];
22
+ error?: unknown;
23
+ }
24
+ export declare class OpenRouterStreamAdapter implements ProviderStreamAdapter<unknown> {
25
+ readonly provider: ProviderName;
26
+ private sequence;
27
+ private compatibleAdapter;
28
+ private finished;
29
+ push(rawEvent: unknown): readonly NormalizedToolStreamEvent[];
30
+ finish(meta?: {
31
+ reason?: StreamEndReason;
32
+ providerReason?: string;
33
+ }): readonly NormalizedToolStreamEvent[];
34
+ }
35
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAClD,CAAC,CAAC;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,uBAAwB,YAAW,qBAAqB,CAAC,OAAO,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAK;IAGrB,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,yBAAyB,EAAE;IA4C7D,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,yBAAyB,EAAE;CAO3G"}
@@ -0,0 +1,55 @@
1
+ import { OpenAICompatibleStreamAdapter } from "./openai-compatible.js";
2
+ export class OpenRouterStreamAdapter {
3
+ provider = "openrouter";
4
+ sequence = 0;
5
+ // Delegate standard tool_call formats to compatible adapter
6
+ compatibleAdapter = new OpenAICompatibleStreamAdapter();
7
+ finished = false;
8
+ push(rawEvent) {
9
+ if (this.finished)
10
+ return [];
11
+ const events = [];
12
+ if (!rawEvent || typeof rawEvent !== "object") {
13
+ events.push({
14
+ type: "provider_diagnostic",
15
+ sequence: ++this.sequence,
16
+ provider: this.provider,
17
+ code: "E_PROVIDER_EVENT_MALFORMED",
18
+ severity: "error",
19
+ message: "Raw event is not an object",
20
+ });
21
+ return events;
22
+ }
23
+ const chunk = rawEvent;
24
+ // Check for provider-level errors
25
+ if (chunk.error) {
26
+ events.push({
27
+ type: "provider_diagnostic",
28
+ sequence: ++this.sequence,
29
+ provider: this.provider,
30
+ code: "E_PROVIDER_ERROR",
31
+ severity: "error",
32
+ message: typeof chunk.error === "string" ? chunk.error : JSON.stringify(chunk.error)
33
+ });
34
+ const compatibleEvents = this.compatibleAdapter.finish({ reason: "provider_error", providerReason: "error" });
35
+ for (const e of compatibleEvents) {
36
+ events.push({ ...e, provider: this.provider, sequence: ++this.sequence });
37
+ }
38
+ this.finished = true;
39
+ return events;
40
+ }
41
+ const compatibleEvents = this.compatibleAdapter.push(chunk);
42
+ for (const e of compatibleEvents) {
43
+ events.push({ ...e, provider: this.provider, sequence: ++this.sequence });
44
+ }
45
+ return events;
46
+ }
47
+ finish(meta) {
48
+ if (this.finished)
49
+ return [];
50
+ this.finished = true;
51
+ const compatibleEvents = this.compatibleAdapter.finish(meta);
52
+ return compatibleEvents.map(e => ({ ...e, provider: this.provider, sequence: ++this.sequence }));
53
+ }
54
+ }
55
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAsBvE,MAAM,OAAO,uBAAuB;IACzB,QAAQ,GAAiB,YAAY,CAAC;IACvC,QAAQ,GAAG,CAAC,CAAC;IAErB,4DAA4D;IACpD,iBAAiB,GAAG,IAAI,6BAA6B,EAAE,CAAC;IACxD,QAAQ,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC,QAAiB;QACpB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAgC,EAAE,CAAC;QAE/C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,4BAA4B;aACtC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,QAA2B,CAAC;QAE1C,kCAAkC;QAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACrF,CAAC,CAAC;YACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9G,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,MAAM,CAAC;QACjB,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,IAA4D;QACjE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import type { ParserEvent, JsonValue, Diagnostic, RepairAction } from "../types.js";
2
+ /**
3
+ * Manages the monotonic event queue.
4
+ * Events are never retracted once emitted.
5
+ */
6
+ export declare class EventBuilder {
7
+ private queue;
8
+ private sequence;
9
+ private maxQueued;
10
+ private terminal;
11
+ constructor(maxQueuedEvents: number);
12
+ /** Current sequence number. */
13
+ get currentSequence(): number;
14
+ get isTerminal(): boolean;
15
+ /** Number of events in the queue. */
16
+ get queueLength(): number;
17
+ /**
18
+ * Emit a value_committed event.
19
+ */
20
+ emitValueCommitted(path: string, value: JsonValue, byteRange: readonly [number, number]): void;
21
+ /**
22
+ * Emit a container_closed event.
23
+ */
24
+ emitContainerClosed(path: string, container: "object" | "array"): void;
25
+ /**
26
+ * Emit a repair_applied event.
27
+ */
28
+ emitRepairApplied(repair: RepairAction): void;
29
+ /**
30
+ * Emit a diagnostic event.
31
+ */
32
+ emitDiagnostic(diagnostic: Diagnostic): void;
33
+ /**
34
+ * Emit a document_complete event.
35
+ */
36
+ emitDocumentComplete(executable: boolean): void;
37
+ /**
38
+ * Emit a stream_finished event.
39
+ */
40
+ emitStreamFinished(outcome: "valid" | "truncated" | "salvaged" | "invalid"): void;
41
+ /**
42
+ * Drain all pending events and clear the queue.
43
+ * Returns a frozen array.
44
+ */
45
+ drain(): readonly ParserEvent[];
46
+ /**
47
+ * Get the number of events emitted during the current push cycle.
48
+ * Call resetPushCount() before push processing.
49
+ */
50
+ private pushEmitCount;
51
+ resetPushCount(): void;
52
+ get emittedDuringPush(): number;
53
+ private enqueue;
54
+ }
55
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/semantic/builder.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,eAAe,EAAE,MAAM;IAInC,+BAA+B;IAC/B,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,qCAAqC;IACrC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,IAAI;IAWP;;OAEG;IACH,mBAAmB,CACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,QAAQ,GAAG,OAAO,GAC5B,IAAI;IASP;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAQ7C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQ5C;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAQ/C;;OAEG;IACH,kBAAkB,CAChB,OAAO,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GACtD,IAAI;IAQP;;;OAGG;IACH,KAAK,IAAI,SAAS,WAAW,EAAE;IAM/B;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAK;IAE1B,cAAc,IAAI,IAAI;IAItB,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,OAAO,CAAC,OAAO;CAwBhB"}
@@ -0,0 +1,140 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Semantic Event Builder
3
+ // ---------------------------------------------------------------------------
4
+ //
5
+ // Accumulates parser events and manages the event queue.
6
+ // Events are emitted monotonically with increasing sequence numbers.
7
+ // drainEvents() returns pending events and clears the queue.
8
+ // ---------------------------------------------------------------------------
9
+ /**
10
+ * Manages the monotonic event queue.
11
+ * Events are never retracted once emitted.
12
+ */
13
+ export class EventBuilder {
14
+ queue = [];
15
+ sequence = 0;
16
+ maxQueued;
17
+ terminal = false;
18
+ constructor(maxQueuedEvents) {
19
+ this.maxQueued = maxQueuedEvents;
20
+ }
21
+ /** Current sequence number. */
22
+ get currentSequence() {
23
+ return this.sequence;
24
+ }
25
+ get isTerminal() {
26
+ return this.terminal;
27
+ }
28
+ /** Number of events in the queue. */
29
+ get queueLength() {
30
+ return this.queue.length;
31
+ }
32
+ /**
33
+ * Emit a value_committed event.
34
+ */
35
+ emitValueCommitted(path, value, byteRange) {
36
+ this.enqueue({
37
+ type: "value_committed",
38
+ sequence: this.sequence++,
39
+ path,
40
+ operation: "add",
41
+ value,
42
+ byteRange,
43
+ });
44
+ }
45
+ /**
46
+ * Emit a container_closed event.
47
+ */
48
+ emitContainerClosed(path, container) {
49
+ this.enqueue({
50
+ type: "container_closed",
51
+ sequence: this.sequence++,
52
+ path,
53
+ container,
54
+ });
55
+ }
56
+ /**
57
+ * Emit a repair_applied event.
58
+ */
59
+ emitRepairApplied(repair) {
60
+ this.enqueue({
61
+ type: "repair_applied",
62
+ sequence: this.sequence++,
63
+ repair,
64
+ });
65
+ }
66
+ /**
67
+ * Emit a diagnostic event.
68
+ */
69
+ emitDiagnostic(diagnostic) {
70
+ this.enqueue({
71
+ type: "diagnostic",
72
+ sequence: this.sequence++,
73
+ diagnostic,
74
+ });
75
+ }
76
+ /**
77
+ * Emit a document_complete event.
78
+ */
79
+ emitDocumentComplete(executable) {
80
+ this.enqueue({
81
+ type: "document_complete",
82
+ sequence: this.sequence++,
83
+ executable,
84
+ });
85
+ }
86
+ /**
87
+ * Emit a stream_finished event.
88
+ */
89
+ emitStreamFinished(outcome) {
90
+ this.enqueue({
91
+ type: "stream_finished",
92
+ sequence: this.sequence++,
93
+ outcome,
94
+ });
95
+ }
96
+ /**
97
+ * Drain all pending events and clear the queue.
98
+ * Returns a frozen array.
99
+ */
100
+ drain() {
101
+ const events = this.queue;
102
+ this.queue = [];
103
+ return Object.freeze(events);
104
+ }
105
+ /**
106
+ * Get the number of events emitted during the current push cycle.
107
+ * Call resetPushCount() before push processing.
108
+ */
109
+ pushEmitCount = 0;
110
+ resetPushCount() {
111
+ this.pushEmitCount = 0;
112
+ }
113
+ get emittedDuringPush() {
114
+ return this.pushEmitCount;
115
+ }
116
+ enqueue(event) {
117
+ if (this.terminal)
118
+ return; // Stop accepting semantic progress, don't report as emitted
119
+ if (this.queue.length >= this.maxQueued) {
120
+ this.terminal = true;
121
+ // Emit terminal diagnostic if capacity theoretically permitted (i.e. we just push one more)
122
+ this.queue.push({
123
+ type: "diagnostic",
124
+ sequence: this.sequence++,
125
+ diagnostic: {
126
+ code: "E_LIMIT_EVENT_QUEUE",
127
+ severity: "fatal",
128
+ byteOffset: 0, // Event builder doesn't track exact byte offset
129
+ recoverable: false,
130
+ message: "Event queue capacity exceeded",
131
+ }
132
+ });
133
+ this.pushEmitCount++;
134
+ return;
135
+ }
136
+ this.queue.push(event);
137
+ this.pushEmitCount++;
138
+ }
139
+ }
140
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/semantic/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { ParserEvent, ValueCommittedEvent, ContainerClosedEvent, RepairAppliedEvent, DiagnosticEvent, DocumentCompleteEvent, StreamFinishedEvent, } from "../types.js";
2
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/semantic/events.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Semantic event types — re-exported for convenience
3
+ // ---------------------------------------------------------------------------
4
+ export {};
5
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/semantic/events.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E"}
@@ -0,0 +1,56 @@
1
+ import type { JsonValue } from "../types.js";
2
+ import type { GrammarFrame } from "../grammar/frame.js";
3
+ /**
4
+ * Maintains the stable value by processing committed events.
5
+ * Only committed values appear in the stable value.
6
+ */
7
+ export declare class SnapshotBuilder {
8
+ private root;
9
+ private hasRoot;
10
+ /**
11
+ * Maps each open container's grammar frame to its corresponding node in
12
+ * the stable-value tree, so a newly-opened child container can attach
13
+ * directly to its parent in O(1) via initContainerForFrame() instead of
14
+ * re-parsing a JSON Pointer path string and re-walking from the root on
15
+ * every single container open (see initContainerForFrame).
16
+ */
17
+ private frameNodes;
18
+ /**
19
+ * Integrate a committed value into the stable value.
20
+ * Takes just `{ path, value }` rather than a full `ValueCommittedEvent` -
21
+ * the only two fields this method has ever read - so its four call sites
22
+ * in parser.ts don't need to fabricate a `sequence`/`type`/`operation`/
23
+ * `byteRange` (already reported separately via the real event emitted to
24
+ * `drainEvents()`) purely to satisfy a wider parameter type.
25
+ */
26
+ processEvent(event: {
27
+ path: string;
28
+ value: JsonValue;
29
+ }): void;
30
+ /**
31
+ * Initialize the root as an object container.
32
+ * `frame` is registered so child containers can find it in O(1).
33
+ */
34
+ initRootObject(frame?: GrammarFrame): void;
35
+ /**
36
+ * Initialize the root as an array container.
37
+ * `frame` is registered so child containers can find it in O(1).
38
+ */
39
+ initRootArray(frame?: GrammarFrame): void;
40
+ /**
41
+ * Initialize a nested container for the given (already-pushed) grammar
42
+ * frame, attaching it directly to its parent's node.
43
+ *
44
+ * Uses frame._parent/_segment (see grammar/frame.ts) plus the frameNodes
45
+ * map instead of re-parsing frame.path and walking the tree from the
46
+ * root on every call — that walk is O(depth), and calling it once for
47
+ * every one of N nested containers made opening N levels cost O(N^2)
48
+ * total, independent of the grammar-stack path-string fix.
49
+ */
50
+ initContainerForFrame(frame: GrammarFrame, type: "object" | "array"): void;
51
+ /**
52
+ * Get a deep clone of the current stable value.
53
+ */
54
+ getStableValue(): JsonValue | undefined;
55
+ }
56
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAA0C;IAE5D;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IA6C7D;;;OAGG;IACH,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI;IAQ1C;;;OAGG;IACH,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI;IAQzC;;;;;;;;;OASG;IACH,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI;IA2B1E;;OAEG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS;CASxC"}
@@ -0,0 +1,230 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Snapshot builder — constructs stableValue from committed events
3
+ // ---------------------------------------------------------------------------
4
+ /**
5
+ * Maintains the stable value by processing committed events.
6
+ * Only committed values appear in the stable value.
7
+ */
8
+ export class SnapshotBuilder {
9
+ root = undefined;
10
+ hasRoot = false;
11
+ /**
12
+ * Maps each open container's grammar frame to its corresponding node in
13
+ * the stable-value tree, so a newly-opened child container can attach
14
+ * directly to its parent in O(1) via initContainerForFrame() instead of
15
+ * re-parsing a JSON Pointer path string and re-walking from the root on
16
+ * every single container open (see initContainerForFrame).
17
+ */
18
+ frameNodes = new WeakMap();
19
+ /**
20
+ * Integrate a committed value into the stable value.
21
+ * Takes just `{ path, value }` rather than a full `ValueCommittedEvent` -
22
+ * the only two fields this method has ever read - so its four call sites
23
+ * in parser.ts don't need to fabricate a `sequence`/`type`/`operation`/
24
+ * `byteRange` (already reported separately via the real event emitted to
25
+ * `drainEvents()`) purely to satisfy a wider parameter type.
26
+ */
27
+ processEvent(event) {
28
+ const { path, value } = event;
29
+ // Parse the JSON Pointer path to navigate to the parent
30
+ const segments = parsePointer(path);
31
+ if (segments.length === 0)
32
+ return;
33
+ // Ensure root exists
34
+ if (!this.hasRoot) {
35
+ // We need a container at root — determine from the first segment
36
+ // This shouldn't happen if events are emitted correctly,
37
+ // because container events come before child value events.
38
+ return;
39
+ }
40
+ const parentSegments = segments.slice(0, -1);
41
+ const lastSegment = segments[segments.length - 1];
42
+ if (lastSegment === undefined)
43
+ return;
44
+ let target = this.root;
45
+ for (const seg of parentSegments) {
46
+ if (target === null || target === undefined)
47
+ return;
48
+ if (typeof target === "object" && !Array.isArray(target)) {
49
+ target = target[seg];
50
+ }
51
+ else if (Array.isArray(target)) {
52
+ const idx = parseInt(seg, 10);
53
+ if (isNaN(idx))
54
+ return;
55
+ target = target[idx];
56
+ }
57
+ else {
58
+ return; // Can't navigate into scalar
59
+ }
60
+ }
61
+ if (target === null || target === undefined)
62
+ return;
63
+ if (typeof target === "object" && !Array.isArray(target)) {
64
+ safeSet(target, lastSegment, value);
65
+ }
66
+ else if (Array.isArray(target)) {
67
+ const idx = parseInt(lastSegment, 10);
68
+ if (!isNaN(idx)) {
69
+ target[idx] = value;
70
+ }
71
+ }
72
+ }
73
+ /**
74
+ * Initialize the root as an object container.
75
+ * `frame` is registered so child containers can find it in O(1).
76
+ */
77
+ initRootObject(frame) {
78
+ if (!this.hasRoot) {
79
+ this.root = {};
80
+ this.hasRoot = true;
81
+ }
82
+ if (frame)
83
+ this.frameNodes.set(frame, this.root);
84
+ }
85
+ /**
86
+ * Initialize the root as an array container.
87
+ * `frame` is registered so child containers can find it in O(1).
88
+ */
89
+ initRootArray(frame) {
90
+ if (!this.hasRoot) {
91
+ this.root = [];
92
+ this.hasRoot = true;
93
+ }
94
+ if (frame)
95
+ this.frameNodes.set(frame, this.root);
96
+ }
97
+ /**
98
+ * Initialize a nested container for the given (already-pushed) grammar
99
+ * frame, attaching it directly to its parent's node.
100
+ *
101
+ * Uses frame._parent/_segment (see grammar/frame.ts) plus the frameNodes
102
+ * map instead of re-parsing frame.path and walking the tree from the
103
+ * root on every call — that walk is O(depth), and calling it once for
104
+ * every one of N nested containers made opening N levels cost O(N^2)
105
+ * total, independent of the grammar-stack path-string fix.
106
+ */
107
+ initContainerForFrame(frame, type) {
108
+ if (!this.hasRoot)
109
+ return;
110
+ const parent = frame._parent;
111
+ const segment = frame._segment;
112
+ if (!parent || segment === null || segment === undefined)
113
+ return;
114
+ const parentNode = this.frameNodes.get(parent);
115
+ if (parentNode === undefined || parentNode === null)
116
+ return;
117
+ const newContainer = type === "object" ? {} : [];
118
+ if (typeof parentNode === "object" && !Array.isArray(parentNode)) {
119
+ safeSet(parentNode, segment, newContainer);
120
+ }
121
+ else if (Array.isArray(parentNode)) {
122
+ const idx = typeof segment === "number" ? segment : parseInt(segment, 10);
123
+ if (!isNaN(idx)) {
124
+ parentNode[idx] = newContainer;
125
+ }
126
+ }
127
+ else {
128
+ return;
129
+ }
130
+ this.frameNodes.set(frame, newContainer);
131
+ }
132
+ /**
133
+ * Get a deep clone of the current stable value.
134
+ */
135
+ getStableValue() {
136
+ if (!this.hasRoot)
137
+ return undefined;
138
+ // `root` is only ever assigned `{}` (initRootObject) or `[]`
139
+ // (initRootArray) - never a bare scalar (a root-level scalar bypasses
140
+ // SnapshotBuilder entirely; see parser.ts's rootScalarValue) - so this
141
+ // is always genuinely a container once hasRoot is true, not just an
142
+ // assertion of convenience.
143
+ return deepClone(this.root);
144
+ }
145
+ }
146
+ /**
147
+ * Parse a JSON Pointer string into segments.
148
+ * Handles ~0 (~) and ~1 (/) unescaping.
149
+ */
150
+ function parsePointer(pointer) {
151
+ if (pointer === "")
152
+ return [];
153
+ if (!pointer.startsWith("/"))
154
+ return [];
155
+ return pointer
156
+ .slice(1)
157
+ .split("/")
158
+ .map((seg) => seg.replace(/~1/g, "/").replace(/~0/g, "~"));
159
+ }
160
+ /**
161
+ * Assign a JSON-derived key onto a plain object without going through the
162
+ * inherited `__proto__` accessor. Bracket assignment (obj[key] = value) on a
163
+ * plain object silently reassigns the object's prototype instead of creating
164
+ * an own property when key === "__proto__", which makes that field vanish
165
+ * from Object.keys()/JSON.stringify(). defineProperty always creates a real
166
+ * own data property, matching native JSON.parse's behavior for such keys.
167
+ */
168
+ function safeSet(obj, key, value) {
169
+ Object.defineProperty(obj, key, {
170
+ value,
171
+ writable: true,
172
+ enumerable: true,
173
+ configurable: true,
174
+ });
175
+ }
176
+ /**
177
+ * Deep clone a JSON value.
178
+ * Iterative (explicit work-stack) rather than recursive: a recursive
179
+ * implementation overflows the JS call stack around ~5000 levels of nesting,
180
+ * well below values maxDepth's type otherwise permits.
181
+ */
182
+ function deepClone(value) {
183
+ const root = Array.isArray(value) ? [] : {};
184
+ const stack = [
185
+ { src: value, dst: root },
186
+ ];
187
+ while (stack.length > 0) {
188
+ const frame = stack.pop();
189
+ if (!frame)
190
+ continue;
191
+ const { src, dst } = frame;
192
+ if (Array.isArray(src)) {
193
+ const dstArr = dst;
194
+ for (let i = 0; i < src.length; i++) {
195
+ const child = src[i];
196
+ if (child !== null && typeof child === "object") {
197
+ const childClone = Array.isArray(child) ? [] : {};
198
+ dstArr[i] = childClone;
199
+ stack.push({
200
+ src: child,
201
+ dst: childClone,
202
+ });
203
+ }
204
+ else {
205
+ dstArr[i] = child;
206
+ }
207
+ }
208
+ }
209
+ else {
210
+ const srcObj = src;
211
+ const dstObj = dst;
212
+ for (const key of Object.keys(srcObj)) {
213
+ const child = srcObj[key];
214
+ if (child !== null && typeof child === "object") {
215
+ const childClone = Array.isArray(child) ? [] : {};
216
+ safeSet(dstObj, key, childClone);
217
+ stack.push({
218
+ src: child,
219
+ dst: childClone,
220
+ });
221
+ }
222
+ else {
223
+ safeSet(dstObj, key, child);
224
+ }
225
+ }
226
+ }
227
+ }
228
+ return root;
229
+ }
230
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"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"}