@ag-ui/encoder 0.1.1-canary.beta.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0 — 2026-09-17
4
+
5
+ - Updated for the 1.0 release, including generated models, the enforcement pipeline, protobuf wire, and compatibility middleware.
6
+
7
+ ### Breaking changes
8
+
9
+ None.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { AGUI_MEDIA_TYPE } from "@ag-ui/proto";
2
1
  import { BaseEvent } from "@ag-ui/core";
2
+ import { AGUI_MEDIA_TYPE } from "@ag-ui/proto";
3
3
 
4
4
  //#region src/encoder.d.ts
5
5
  interface EventEncoderParams {
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  }) : target, mod));
26
26
 
27
27
  //#endregion
28
+ let _ag_ui_core = require("@ag-ui/core");
28
29
  let _ag_ui_proto = require("@ag-ui/proto");
29
30
  _ag_ui_proto = __toESM(_ag_ui_proto);
30
31
 
@@ -56,7 +57,7 @@ function preferredMediaTypes(accept, provided) {
56
57
  * Module variables.
57
58
  * @private
58
59
  */
59
- const simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
60
+ const simpleMediaTypeRegExp = /^\s*([^\s/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
60
61
  /**
61
62
  * Parse the Accept header.
62
63
  * @private
@@ -228,7 +229,7 @@ var EventEncoder = class {
228
229
  return this.encodeSSE(event);
229
230
  }
230
231
  encodeSSE(event) {
231
- return `data: ${JSON.stringify(event)}\n\n`;
232
+ return `data: ${JSON.stringify((0, _ag_ui_core.omitOptionalNulls)(event, "Event"))}\n\n`;
232
233
  }
233
234
  encodeBinary(event) {
234
235
  if (this.acceptsProtobuf) return this.encodeProtobuf(event);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["proto"],"sources":["../src/media-type.ts","../src/encoder.ts"],"sourcesContent":["/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n// modified from https://github.com/jshttp/negotiator/blob/master/lib/mediaType.js\n\n/**\n * Module exports.\n * @public\n */\n\nexport function preferredMediaTypes(accept?: string, provided?: string[]): string[] {\n // RFC 2616 sec 14.2: no header = */*\n const accepts = parseAccept(accept === undefined ? \"*/*\" : accept || \"\");\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter((spec): spec is MediaType => spec.q > 0)\n .sort((a, b) => {\n return b.q - a.q || b.i - a.i || 0;\n })\n .map(getFullType);\n }\n\n const priorities = provided.map(function getPriority(type: string, index: number) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities\n .filter((spec): spec is Priority => spec.q > 0)\n .sort(compareSpecs)\n .map(function getType(priority: Priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Module variables.\n * @private\n */\n\nconst simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Media type interface\n * @private\n */\ninterface MediaType {\n type: string;\n subtype: string;\n params: Record<string, string>;\n q: number;\n i: number;\n}\n\n/**\n * Priority interface\n * @private\n */\ninterface Priority {\n o: number;\n q: number;\n s: number;\n i?: number;\n}\n\n/**\n * Parse the Accept header.\n * @private\n */\nfunction parseAccept(accept: string): MediaType[] {\n const accepts = splitMediaTypes(accept);\n const result: MediaType[] = [];\n\n for (let i = 0, j = 0; i < accepts.length; i++) {\n const mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n result[j++] = mediaType;\n }\n }\n\n return result;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\nfunction parseMediaType(str: string, i: number): MediaType | null {\n const match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n const params: Record<string, string> = Object.create(null);\n let q = 1;\n const subtype = match[2];\n const type = match[1];\n\n if (match[3]) {\n const kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (let j = 0; j < kvps.length; j++) {\n const pair = kvps[j];\n const key = pair[0].toLowerCase();\n const val = pair[1];\n\n // get the value, unwrapping quotes\n const value = val && val[0] === '\"' && val[val.length - 1] === '\"' ? val.slice(1, -1) : val;\n\n if (key === \"q\") {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i,\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\nfunction getMediaTypePriority(type: string, accepted: MediaType[], index: number): Priority {\n const priority: Priority = { o: -1, q: 0, s: 0 };\n\n for (let i = 0; i < accepted.length; i++) {\n const spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority.o = spec.o;\n priority.q = spec.q;\n priority.s = spec.s;\n priority.i = spec.i;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\nfunction specify(type: string, spec: MediaType, index: number): Priority | null {\n const p = parseMediaType(type, 0);\n let s = 0;\n\n if (!p) {\n return null;\n }\n\n if (spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4;\n } else if (spec.type != \"*\") {\n return null;\n }\n\n if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2;\n } else if (spec.subtype != \"*\") {\n return null;\n }\n\n const keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (\n keys.every(function (k) {\n return (\n spec.params[k] == \"*\" ||\n (spec.params[k] || \"\").toLowerCase() == (p.params[k] || \"\").toLowerCase()\n );\n })\n ) {\n s |= 1;\n } else {\n return null;\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n };\n}\n\n/**\n * Compare two specs.\n * @private\n */\nfunction compareSpecs(a: Priority, b: Priority): number {\n return b.q - a.q || b.s - a.s || (a.o || 0) - (b.o || 0) || (a.i || 0) - (b.i || 0) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\nfunction getFullType(spec: MediaType): string {\n return spec.type + \"/\" + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\nfunction isQuality(spec: Priority | MediaType): boolean {\n return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\nfunction quoteCount(string: string): number {\n let count = 0;\n let index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\nfunction splitKeyValuePair(str: string): [string, string] {\n const index = str.indexOf(\"=\");\n let key: string;\n let val: string = \"\";\n\n if (index === -1) {\n key = str;\n } else {\n key = str.slice(0, index);\n val = str.slice(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\nfunction splitMediaTypes(accept: string): string[] {\n const accepts = accept.split(\",\");\n const result: string[] = [accepts[0]];\n\n for (let i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = accepts[i];\n } else {\n result[j] += \",\" + accepts[i];\n }\n }\n\n // trim result\n return result;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\nfunction splitParameters(str: string): string[] {\n const parameters = str.split(\";\");\n const result: string[] = [parameters[0]];\n\n for (let i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = parameters[i];\n } else {\n result[j] += \";\" + parameters[i];\n }\n }\n\n // trim parameters\n for (let i = 0; i < result.length; i++) {\n result[i] = result[i].trim();\n }\n\n return result;\n}\n","import { BaseEvent } from \"@ag-ui/core\";\nimport * as proto from \"@ag-ui/proto\";\nimport { preferredMediaTypes } from \"./media-type\";\n\nexport interface EventEncoderParams {\n accept?: string;\n}\n\nexport class EventEncoder {\n private acceptsProtobuf: boolean;\n\n constructor(params?: EventEncoderParams) {\n this.acceptsProtobuf = params?.accept ? this.isProtobufAccepted(params.accept) : false;\n }\n\n getContentType(): string {\n if (this.acceptsProtobuf) {\n return proto.AGUI_MEDIA_TYPE;\n } else {\n return \"text/event-stream\";\n }\n }\n\n encode(event: BaseEvent): string {\n return this.encodeSSE(event);\n }\n\n encodeSSE(event: BaseEvent): string {\n return `data: ${JSON.stringify(event)}\\n\\n`;\n }\n\n encodeBinary(event: BaseEvent): Uint8Array {\n if (this.acceptsProtobuf) {\n return this.encodeProtobuf(event);\n } else {\n const sseString = this.encodeSSE(event);\n // Convert string to Uint8Array using TextEncoder\n const encoder = new TextEncoder();\n return encoder.encode(sseString);\n }\n }\n\n encodeProtobuf(event: BaseEvent): Uint8Array {\n const messageBytes = proto.encode(event);\n const length = messageBytes.length;\n\n // Create a buffer for 4 bytes (for the uint32 length) plus the message bytes\n const buffer = new ArrayBuffer(4 + length);\n const dataView = new DataView(buffer);\n\n // Write the length as a uint32\n // Set the third parameter to `false` for big-endian or `true` for little-endian\n dataView.setUint32(0, length, false);\n\n // Create a Uint8Array view and copy in the message bytes after the 4-byte header\n const result = new Uint8Array(buffer);\n result.set(messageBytes, 4);\n\n return result;\n }\n\n private isProtobufAccepted(acceptHeader: string): boolean {\n // Pass the Accept header and an array with your media type\n const preferred = preferredMediaTypes(acceptHeader, [proto.AGUI_MEDIA_TYPE]);\n\n // If the returned array includes your media type, it's acceptable\n return preferred.includes(proto.AGUI_MEDIA_TYPE);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["proto"],"sources":["../src/media-type.ts","../src/encoder.ts"],"sourcesContent":["/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n// modified from https://github.com/jshttp/negotiator/blob/master/lib/mediaType.js\n\n/**\n * Module exports.\n * @public\n */\n\nexport function preferredMediaTypes(accept?: string, provided?: string[]): string[] {\n // RFC 2616 sec 14.2: no header = */*\n const accepts = parseAccept(accept === undefined ? \"*/*\" : accept || \"\");\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter((spec): spec is MediaType => spec.q > 0)\n .sort((a, b) => {\n return b.q - a.q || b.i - a.i || 0;\n })\n .map(getFullType);\n }\n\n const priorities = provided.map(function getPriority(type: string, index: number) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities\n .filter((spec): spec is Priority => spec.q > 0)\n .sort(compareSpecs)\n .map(function getType(priority: Priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Module variables.\n * @private\n */\n\nconst simpleMediaTypeRegExp = /^\\s*([^\\s/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Media type interface\n * @private\n */\ninterface MediaType {\n type: string;\n subtype: string;\n params: Record<string, string>;\n q: number;\n i: number;\n}\n\n/**\n * Priority interface\n * @private\n */\ninterface Priority {\n o: number;\n q: number;\n s: number;\n i?: number;\n}\n\n/**\n * Parse the Accept header.\n * @private\n */\nfunction parseAccept(accept: string): MediaType[] {\n const accepts = splitMediaTypes(accept);\n const result: MediaType[] = [];\n\n for (let i = 0, j = 0; i < accepts.length; i++) {\n const mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n result[j++] = mediaType;\n }\n }\n\n return result;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\nfunction parseMediaType(str: string, i: number): MediaType | null {\n const match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n const params: Record<string, string> = Object.create(null);\n let q = 1;\n const subtype = match[2];\n const type = match[1];\n\n if (match[3]) {\n const kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (let j = 0; j < kvps.length; j++) {\n const pair = kvps[j];\n const key = pair[0].toLowerCase();\n const val = pair[1];\n\n // get the value, unwrapping quotes\n const value = val && val[0] === '\"' && val[val.length - 1] === '\"' ? val.slice(1, -1) : val;\n\n if (key === \"q\") {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i,\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\nfunction getMediaTypePriority(type: string, accepted: MediaType[], index: number): Priority {\n const priority: Priority = { o: -1, q: 0, s: 0 };\n\n for (let i = 0; i < accepted.length; i++) {\n const spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority.o = spec.o;\n priority.q = spec.q;\n priority.s = spec.s;\n priority.i = spec.i;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\nfunction specify(type: string, spec: MediaType, index: number): Priority | null {\n const p = parseMediaType(type, 0);\n let s = 0;\n\n if (!p) {\n return null;\n }\n\n if (spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4;\n } else if (spec.type != \"*\") {\n return null;\n }\n\n if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2;\n } else if (spec.subtype != \"*\") {\n return null;\n }\n\n const keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (\n keys.every(function (k) {\n return (\n spec.params[k] == \"*\" ||\n (spec.params[k] || \"\").toLowerCase() == (p.params[k] || \"\").toLowerCase()\n );\n })\n ) {\n s |= 1;\n } else {\n return null;\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n };\n}\n\n/**\n * Compare two specs.\n * @private\n */\nfunction compareSpecs(a: Priority, b: Priority): number {\n return b.q - a.q || b.s - a.s || (a.o || 0) - (b.o || 0) || (a.i || 0) - (b.i || 0) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\nfunction getFullType(spec: MediaType): string {\n return spec.type + \"/\" + spec.subtype;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\nfunction quoteCount(string: string): number {\n let count = 0;\n let index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\nfunction splitKeyValuePair(str: string): [string, string] {\n const index = str.indexOf(\"=\");\n let key: string;\n let val: string = \"\";\n\n if (index === -1) {\n key = str;\n } else {\n key = str.slice(0, index);\n val = str.slice(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\nfunction splitMediaTypes(accept: string): string[] {\n const accepts = accept.split(\",\");\n const result: string[] = [accepts[0]];\n\n for (let i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = accepts[i];\n } else {\n result[j] += \",\" + accepts[i];\n }\n }\n\n // trim result\n return result;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\nfunction splitParameters(str: string): string[] {\n const parameters = str.split(\";\");\n const result: string[] = [parameters[0]];\n\n for (let i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = parameters[i];\n } else {\n result[j] += \";\" + parameters[i];\n }\n }\n\n // trim parameters\n for (let i = 0; i < result.length; i++) {\n result[i] = result[i].trim();\n }\n\n return result;\n}\n","import { BaseEvent, omitOptionalNulls } from \"@ag-ui/core\";\nimport * as proto from \"@ag-ui/proto\";\nimport { preferredMediaTypes } from \"./media-type\";\n\nexport interface EventEncoderParams {\n accept?: string;\n}\n\nexport class EventEncoder {\n private acceptsProtobuf: boolean;\n\n constructor(params?: EventEncoderParams) {\n this.acceptsProtobuf = params?.accept ? this.isProtobufAccepted(params.accept) : false;\n }\n\n getContentType(): string {\n if (this.acceptsProtobuf) {\n return proto.AGUI_MEDIA_TYPE;\n } else {\n return \"text/event-stream\";\n }\n }\n\n encode(event: BaseEvent): string {\n return this.encodeSSE(event);\n }\n\n encodeSSE(event: BaseEvent): string {\n return `data: ${JSON.stringify(omitOptionalNulls(event, \"Event\"))}\\n\\n`;\n }\n\n encodeBinary(event: BaseEvent): Uint8Array {\n if (this.acceptsProtobuf) {\n return this.encodeProtobuf(event);\n } else {\n const sseString = this.encodeSSE(event);\n // Convert string to Uint8Array using TextEncoder\n const encoder = new TextEncoder();\n return encoder.encode(sseString);\n }\n }\n\n encodeProtobuf(event: BaseEvent): Uint8Array {\n const messageBytes = proto.encode(event);\n const length = messageBytes.length;\n\n // Create a buffer for 4 bytes (for the uint32 length) plus the message bytes\n const buffer = new ArrayBuffer(4 + length);\n const dataView = new DataView(buffer);\n\n // Write the length as a uint32\n // Set the third parameter to `false` for big-endian or `true` for little-endian\n dataView.setUint32(0, length, false);\n\n // Create a Uint8Array view and copy in the message bytes after the 4-byte header\n const result = new Uint8Array(buffer);\n result.set(messageBytes, 4);\n\n return result;\n }\n\n private isProtobufAccepted(acceptHeader: string): boolean {\n // Pass the Accept header and an array with your media type\n const preferred = preferredMediaTypes(acceptHeader, [proto.AGUI_MEDIA_TYPE]);\n\n // If the returned array includes your media type, it's acceptable\n return preferred.includes(proto.AGUI_MEDIA_TYPE);\n }\n}\n"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import { omitOptionalNulls } from "@ag-ui/core";
1
2
  import * as proto from "@ag-ui/proto";
2
3
  import { AGUI_MEDIA_TYPE } from "@ag-ui/proto";
3
4
 
@@ -29,7 +30,7 @@ function preferredMediaTypes(accept, provided) {
29
30
  * Module variables.
30
31
  * @private
31
32
  */
32
- const simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
33
+ const simpleMediaTypeRegExp = /^\s*([^\s/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
33
34
  /**
34
35
  * Parse the Accept header.
35
36
  * @private
@@ -201,7 +202,7 @@ var EventEncoder = class {
201
202
  return this.encodeSSE(event);
202
203
  }
203
204
  encodeSSE(event) {
204
- return `data: ${JSON.stringify(event)}\n\n`;
205
+ return `data: ${JSON.stringify(omitOptionalNulls(event, "Event"))}\n\n`;
205
206
  }
206
207
  encodeBinary(event) {
207
208
  if (this.acceptsProtobuf) return this.encodeProtobuf(event);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/media-type.ts","../src/encoder.ts"],"sourcesContent":["/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n// modified from https://github.com/jshttp/negotiator/blob/master/lib/mediaType.js\n\n/**\n * Module exports.\n * @public\n */\n\nexport function preferredMediaTypes(accept?: string, provided?: string[]): string[] {\n // RFC 2616 sec 14.2: no header = */*\n const accepts = parseAccept(accept === undefined ? \"*/*\" : accept || \"\");\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter((spec): spec is MediaType => spec.q > 0)\n .sort((a, b) => {\n return b.q - a.q || b.i - a.i || 0;\n })\n .map(getFullType);\n }\n\n const priorities = provided.map(function getPriority(type: string, index: number) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities\n .filter((spec): spec is Priority => spec.q > 0)\n .sort(compareSpecs)\n .map(function getType(priority: Priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Module variables.\n * @private\n */\n\nconst simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Media type interface\n * @private\n */\ninterface MediaType {\n type: string;\n subtype: string;\n params: Record<string, string>;\n q: number;\n i: number;\n}\n\n/**\n * Priority interface\n * @private\n */\ninterface Priority {\n o: number;\n q: number;\n s: number;\n i?: number;\n}\n\n/**\n * Parse the Accept header.\n * @private\n */\nfunction parseAccept(accept: string): MediaType[] {\n const accepts = splitMediaTypes(accept);\n const result: MediaType[] = [];\n\n for (let i = 0, j = 0; i < accepts.length; i++) {\n const mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n result[j++] = mediaType;\n }\n }\n\n return result;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\nfunction parseMediaType(str: string, i: number): MediaType | null {\n const match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n const params: Record<string, string> = Object.create(null);\n let q = 1;\n const subtype = match[2];\n const type = match[1];\n\n if (match[3]) {\n const kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (let j = 0; j < kvps.length; j++) {\n const pair = kvps[j];\n const key = pair[0].toLowerCase();\n const val = pair[1];\n\n // get the value, unwrapping quotes\n const value = val && val[0] === '\"' && val[val.length - 1] === '\"' ? val.slice(1, -1) : val;\n\n if (key === \"q\") {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i,\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\nfunction getMediaTypePriority(type: string, accepted: MediaType[], index: number): Priority {\n const priority: Priority = { o: -1, q: 0, s: 0 };\n\n for (let i = 0; i < accepted.length; i++) {\n const spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority.o = spec.o;\n priority.q = spec.q;\n priority.s = spec.s;\n priority.i = spec.i;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\nfunction specify(type: string, spec: MediaType, index: number): Priority | null {\n const p = parseMediaType(type, 0);\n let s = 0;\n\n if (!p) {\n return null;\n }\n\n if (spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4;\n } else if (spec.type != \"*\") {\n return null;\n }\n\n if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2;\n } else if (spec.subtype != \"*\") {\n return null;\n }\n\n const keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (\n keys.every(function (k) {\n return (\n spec.params[k] == \"*\" ||\n (spec.params[k] || \"\").toLowerCase() == (p.params[k] || \"\").toLowerCase()\n );\n })\n ) {\n s |= 1;\n } else {\n return null;\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n };\n}\n\n/**\n * Compare two specs.\n * @private\n */\nfunction compareSpecs(a: Priority, b: Priority): number {\n return b.q - a.q || b.s - a.s || (a.o || 0) - (b.o || 0) || (a.i || 0) - (b.i || 0) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\nfunction getFullType(spec: MediaType): string {\n return spec.type + \"/\" + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\nfunction isQuality(spec: Priority | MediaType): boolean {\n return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\nfunction quoteCount(string: string): number {\n let count = 0;\n let index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\nfunction splitKeyValuePair(str: string): [string, string] {\n const index = str.indexOf(\"=\");\n let key: string;\n let val: string = \"\";\n\n if (index === -1) {\n key = str;\n } else {\n key = str.slice(0, index);\n val = str.slice(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\nfunction splitMediaTypes(accept: string): string[] {\n const accepts = accept.split(\",\");\n const result: string[] = [accepts[0]];\n\n for (let i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = accepts[i];\n } else {\n result[j] += \",\" + accepts[i];\n }\n }\n\n // trim result\n return result;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\nfunction splitParameters(str: string): string[] {\n const parameters = str.split(\";\");\n const result: string[] = [parameters[0]];\n\n for (let i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = parameters[i];\n } else {\n result[j] += \";\" + parameters[i];\n }\n }\n\n // trim parameters\n for (let i = 0; i < result.length; i++) {\n result[i] = result[i].trim();\n }\n\n return result;\n}\n","import { BaseEvent } from \"@ag-ui/core\";\nimport * as proto from \"@ag-ui/proto\";\nimport { preferredMediaTypes } from \"./media-type\";\n\nexport interface EventEncoderParams {\n accept?: string;\n}\n\nexport class EventEncoder {\n private acceptsProtobuf: boolean;\n\n constructor(params?: EventEncoderParams) {\n this.acceptsProtobuf = params?.accept ? this.isProtobufAccepted(params.accept) : false;\n }\n\n getContentType(): string {\n if (this.acceptsProtobuf) {\n return proto.AGUI_MEDIA_TYPE;\n } else {\n return \"text/event-stream\";\n }\n }\n\n encode(event: BaseEvent): string {\n return this.encodeSSE(event);\n }\n\n encodeSSE(event: BaseEvent): string {\n return `data: ${JSON.stringify(event)}\\n\\n`;\n }\n\n encodeBinary(event: BaseEvent): Uint8Array {\n if (this.acceptsProtobuf) {\n return this.encodeProtobuf(event);\n } else {\n const sseString = this.encodeSSE(event);\n // Convert string to Uint8Array using TextEncoder\n const encoder = new TextEncoder();\n return encoder.encode(sseString);\n }\n }\n\n encodeProtobuf(event: BaseEvent): Uint8Array {\n const messageBytes = proto.encode(event);\n const length = messageBytes.length;\n\n // Create a buffer for 4 bytes (for the uint32 length) plus the message bytes\n const buffer = new ArrayBuffer(4 + length);\n const dataView = new DataView(buffer);\n\n // Write the length as a uint32\n // Set the third parameter to `false` for big-endian or `true` for little-endian\n dataView.setUint32(0, length, false);\n\n // Create a Uint8Array view and copy in the message bytes after the 4-byte header\n const result = new Uint8Array(buffer);\n result.set(messageBytes, 4);\n\n return result;\n }\n\n private isProtobufAccepted(acceptHeader: string): boolean {\n // Pass the Accept header and an array with your media type\n const preferred = preferredMediaTypes(acceptHeader, [proto.AGUI_MEDIA_TYPE]);\n\n // If the returned array includes your media type, it's acceptable\n return preferred.includes(proto.AGUI_MEDIA_TYPE);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/media-type.ts","../src/encoder.ts"],"sourcesContent":["/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n// modified from https://github.com/jshttp/negotiator/blob/master/lib/mediaType.js\n\n/**\n * Module exports.\n * @public\n */\n\nexport function preferredMediaTypes(accept?: string, provided?: string[]): string[] {\n // RFC 2616 sec 14.2: no header = */*\n const accepts = parseAccept(accept === undefined ? \"*/*\" : accept || \"\");\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter((spec): spec is MediaType => spec.q > 0)\n .sort((a, b) => {\n return b.q - a.q || b.i - a.i || 0;\n })\n .map(getFullType);\n }\n\n const priorities = provided.map(function getPriority(type: string, index: number) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities\n .filter((spec): spec is Priority => spec.q > 0)\n .sort(compareSpecs)\n .map(function getType(priority: Priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Module variables.\n * @private\n */\n\nconst simpleMediaTypeRegExp = /^\\s*([^\\s/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Media type interface\n * @private\n */\ninterface MediaType {\n type: string;\n subtype: string;\n params: Record<string, string>;\n q: number;\n i: number;\n}\n\n/**\n * Priority interface\n * @private\n */\ninterface Priority {\n o: number;\n q: number;\n s: number;\n i?: number;\n}\n\n/**\n * Parse the Accept header.\n * @private\n */\nfunction parseAccept(accept: string): MediaType[] {\n const accepts = splitMediaTypes(accept);\n const result: MediaType[] = [];\n\n for (let i = 0, j = 0; i < accepts.length; i++) {\n const mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n result[j++] = mediaType;\n }\n }\n\n return result;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\nfunction parseMediaType(str: string, i: number): MediaType | null {\n const match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n const params: Record<string, string> = Object.create(null);\n let q = 1;\n const subtype = match[2];\n const type = match[1];\n\n if (match[3]) {\n const kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (let j = 0; j < kvps.length; j++) {\n const pair = kvps[j];\n const key = pair[0].toLowerCase();\n const val = pair[1];\n\n // get the value, unwrapping quotes\n const value = val && val[0] === '\"' && val[val.length - 1] === '\"' ? val.slice(1, -1) : val;\n\n if (key === \"q\") {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i,\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\nfunction getMediaTypePriority(type: string, accepted: MediaType[], index: number): Priority {\n const priority: Priority = { o: -1, q: 0, s: 0 };\n\n for (let i = 0; i < accepted.length; i++) {\n const spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority.o = spec.o;\n priority.q = spec.q;\n priority.s = spec.s;\n priority.i = spec.i;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\nfunction specify(type: string, spec: MediaType, index: number): Priority | null {\n const p = parseMediaType(type, 0);\n let s = 0;\n\n if (!p) {\n return null;\n }\n\n if (spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4;\n } else if (spec.type != \"*\") {\n return null;\n }\n\n if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2;\n } else if (spec.subtype != \"*\") {\n return null;\n }\n\n const keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (\n keys.every(function (k) {\n return (\n spec.params[k] == \"*\" ||\n (spec.params[k] || \"\").toLowerCase() == (p.params[k] || \"\").toLowerCase()\n );\n })\n ) {\n s |= 1;\n } else {\n return null;\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n };\n}\n\n/**\n * Compare two specs.\n * @private\n */\nfunction compareSpecs(a: Priority, b: Priority): number {\n return b.q - a.q || b.s - a.s || (a.o || 0) - (b.o || 0) || (a.i || 0) - (b.i || 0) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\nfunction getFullType(spec: MediaType): string {\n return spec.type + \"/\" + spec.subtype;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\nfunction quoteCount(string: string): number {\n let count = 0;\n let index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\nfunction splitKeyValuePair(str: string): [string, string] {\n const index = str.indexOf(\"=\");\n let key: string;\n let val: string = \"\";\n\n if (index === -1) {\n key = str;\n } else {\n key = str.slice(0, index);\n val = str.slice(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\nfunction splitMediaTypes(accept: string): string[] {\n const accepts = accept.split(\",\");\n const result: string[] = [accepts[0]];\n\n for (let i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = accepts[i];\n } else {\n result[j] += \",\" + accepts[i];\n }\n }\n\n // trim result\n return result;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\nfunction splitParameters(str: string): string[] {\n const parameters = str.split(\";\");\n const result: string[] = [parameters[0]];\n\n for (let i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(result[j]) % 2 == 0) {\n result[++j] = parameters[i];\n } else {\n result[j] += \";\" + parameters[i];\n }\n }\n\n // trim parameters\n for (let i = 0; i < result.length; i++) {\n result[i] = result[i].trim();\n }\n\n return result;\n}\n","import { BaseEvent, omitOptionalNulls } from \"@ag-ui/core\";\nimport * as proto from \"@ag-ui/proto\";\nimport { preferredMediaTypes } from \"./media-type\";\n\nexport interface EventEncoderParams {\n accept?: string;\n}\n\nexport class EventEncoder {\n private acceptsProtobuf: boolean;\n\n constructor(params?: EventEncoderParams) {\n this.acceptsProtobuf = params?.accept ? this.isProtobufAccepted(params.accept) : false;\n }\n\n getContentType(): string {\n if (this.acceptsProtobuf) {\n return proto.AGUI_MEDIA_TYPE;\n } else {\n return \"text/event-stream\";\n }\n }\n\n encode(event: BaseEvent): string {\n return this.encodeSSE(event);\n }\n\n encodeSSE(event: BaseEvent): string {\n return `data: ${JSON.stringify(omitOptionalNulls(event, \"Event\"))}\\n\\n`;\n }\n\n encodeBinary(event: BaseEvent): Uint8Array {\n if (this.acceptsProtobuf) {\n return this.encodeProtobuf(event);\n } else {\n const sseString = this.encodeSSE(event);\n // Convert string to Uint8Array using TextEncoder\n const encoder = new TextEncoder();\n return encoder.encode(sseString);\n }\n }\n\n encodeProtobuf(event: BaseEvent): Uint8Array {\n const messageBytes = proto.encode(event);\n const length = messageBytes.length;\n\n // Create a buffer for 4 bytes (for the uint32 length) plus the message bytes\n const buffer = new ArrayBuffer(4 + length);\n const dataView = new DataView(buffer);\n\n // Write the length as a uint32\n // Set the third parameter to `false` for big-endian or `true` for little-endian\n dataView.setUint32(0, length, false);\n\n // Create a Uint8Array view and copy in the message bytes after the 4-byte header\n const result = new Uint8Array(buffer);\n result.set(messageBytes, 4);\n\n return result;\n }\n\n private isProtobufAccepted(acceptHeader: string): boolean {\n // Pass the Accept header and an array with your media type\n const preferred = preferredMediaTypes(acceptHeader, [proto.AGUI_MEDIA_TYPE]);\n\n // If the returned array includes your media type, it's acceptable\n return preferred.includes(proto.AGUI_MEDIA_TYPE);\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "@ag-ui/encoder",
3
3
  "author": "Markus Ecker <markus.ecker@gmail.com>",
4
- "version": "0.1.1-canary.beta.0",
4
+ "version": "1.0.0",
5
+ "agui": {
6
+ "protocolVersion": "1.0"
7
+ },
5
8
  "license": "MIT",
6
9
  "repository": {
7
10
  "type": "git",
@@ -15,11 +18,12 @@
15
18
  "module": "./dist/index.mjs",
16
19
  "types": "./dist/index.d.ts",
17
20
  "dependencies": {
18
- "@ag-ui/core": "0.1.1-canary.beta.0",
19
- "@ag-ui/proto": "0.1.1-canary.beta.0"
21
+ "@ag-ui/core": "1.0.0",
22
+ "@ag-ui/proto": "1.0.0"
20
23
  },
21
24
  "devDependencies": {
22
25
  "@vitest/coverage-istanbul": "^4.0.18",
26
+ "eslint": "^9.37.0",
23
27
  "publint": "^0.3.12",
24
28
  "@arethetypeswrong/cli": "^0.17.4",
25
29
  "vitest": "^4.0.18",
@@ -33,10 +37,21 @@
33
37
  },
34
38
  "./package.json": "./package.json"
35
39
  },
40
+ "nx": {
41
+ "targets": {
42
+ "test": {
43
+ "cache": false
44
+ },
45
+ "test:coverage": {
46
+ "cache": false
47
+ }
48
+ }
49
+ },
36
50
  "scripts": {
37
51
  "build": "tsdown",
38
52
  "dev": "tsdown --watch",
39
53
  "lint": "eslint \"src/**/*.ts*\"",
54
+ "typecheck": "tsc --noEmit",
40
55
  "clean": "git clean -fdX --exclude=\"!.env\"",
41
56
  "test": "vitest run",
42
57
  "test:coverage": "vitest run --coverage",