@azure/ai-agents 1.0.0-alpha.20250502.6

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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +907 -0
  3. package/dist/browser/agentsClient.d.ts +110 -0
  4. package/dist/browser/agentsClient.d.ts.map +1 -0
  5. package/dist/browser/agentsClient.js +203 -0
  6. package/dist/browser/agentsClient.js.map +1 -0
  7. package/dist/browser/api/agentsContext.d.ts +15 -0
  8. package/dist/browser/api/agentsContext.d.ts.map +1 -0
  9. package/dist/browser/api/agentsContext.js +55 -0
  10. package/dist/browser/api/agentsContext.js.map +1 -0
  11. package/dist/browser/api/index.d.ts +4 -0
  12. package/dist/browser/api/index.d.ts.map +1 -0
  13. package/dist/browser/api/index.js +5 -0
  14. package/dist/browser/api/index.js.map +1 -0
  15. package/dist/browser/api/operations.d.ts +212 -0
  16. package/dist/browser/api/operations.d.ts.map +1 -0
  17. package/dist/browser/api/operations.js +1348 -0
  18. package/dist/browser/api/operations.js.map +1 -0
  19. package/dist/browser/api/options.d.ts +456 -0
  20. package/dist/browser/api/options.d.ts.map +1 -0
  21. package/dist/browser/api/options.js +4 -0
  22. package/dist/browser/api/options.js.map +1 -0
  23. package/dist/browser/api/poller.d.ts +9 -0
  24. package/dist/browser/api/poller.d.ts.map +1 -0
  25. package/dist/browser/api/poller.js +137 -0
  26. package/dist/browser/api/poller.js.map +1 -0
  27. package/dist/browser/constants.d.ts +9 -0
  28. package/dist/browser/constants.d.ts.map +1 -0
  29. package/dist/browser/constants.js +11 -0
  30. package/dist/browser/constants.js.map +1 -0
  31. package/dist/browser/index.d.ts +8 -0
  32. package/dist/browser/index.d.ts.map +1 -0
  33. package/dist/browser/index.js +7 -0
  34. package/dist/browser/index.js.map +1 -0
  35. package/dist/browser/logger.d.ts +2 -0
  36. package/dist/browser/logger.d.ts.map +1 -0
  37. package/dist/browser/logger.js +5 -0
  38. package/dist/browser/logger.js.map +1 -0
  39. package/dist/browser/models/index.d.ts +3 -0
  40. package/dist/browser/models/index.d.ts.map +1 -0
  41. package/dist/browser/models/index.js +5 -0
  42. package/dist/browser/models/index.js.map +1 -0
  43. package/dist/browser/models/models.d.ts +1977 -0
  44. package/dist/browser/models/models.d.ts.map +1 -0
  45. package/dist/browser/models/models.js +2053 -0
  46. package/dist/browser/models/models.js.map +1 -0
  47. package/dist/browser/models/streamingModels.d.ts +108 -0
  48. package/dist/browser/models/streamingModels.d.ts.map +1 -0
  49. package/dist/browser/models/streamingModels.js +75 -0
  50. package/dist/browser/models/streamingModels.js.map +1 -0
  51. package/dist/browser/package.json +3 -0
  52. package/dist/browser/static-helpers/multipartHelpers.d.ts +6 -0
  53. package/dist/browser/static-helpers/multipartHelpers.d.ts.map +1 -0
  54. package/dist/browser/static-helpers/multipartHelpers.js +23 -0
  55. package/dist/browser/static-helpers/multipartHelpers.js.map +1 -0
  56. package/dist/browser/static-helpers/urlTemplate.d.ts +5 -0
  57. package/dist/browser/static-helpers/urlTemplate.d.ts.map +1 -0
  58. package/dist/browser/static-helpers/urlTemplate.js +169 -0
  59. package/dist/browser/static-helpers/urlTemplate.js.map +1 -0
  60. package/dist/browser/utils.d.ts +214 -0
  61. package/dist/browser/utils.d.ts.map +1 -0
  62. package/dist/browser/utils.js +311 -0
  63. package/dist/browser/utils.js.map +1 -0
  64. package/dist/commonjs/agentsClient.d.ts +110 -0
  65. package/dist/commonjs/agentsClient.d.ts.map +1 -0
  66. package/dist/commonjs/agentsClient.js +207 -0
  67. package/dist/commonjs/agentsClient.js.map +1 -0
  68. package/dist/commonjs/api/agentsContext.d.ts +15 -0
  69. package/dist/commonjs/api/agentsContext.d.ts.map +1 -0
  70. package/dist/commonjs/api/agentsContext.js +58 -0
  71. package/dist/commonjs/api/agentsContext.js.map +1 -0
  72. package/dist/commonjs/api/index.d.ts +4 -0
  73. package/dist/commonjs/api/index.d.ts.map +1 -0
  74. package/dist/commonjs/api/index.js +51 -0
  75. package/dist/commonjs/api/index.js.map +1 -0
  76. package/dist/commonjs/api/operations.d.ts +212 -0
  77. package/dist/commonjs/api/operations.d.ts.map +1 -0
  78. package/dist/commonjs/api/operations.js +1484 -0
  79. package/dist/commonjs/api/operations.js.map +1 -0
  80. package/dist/commonjs/api/options.d.ts +456 -0
  81. package/dist/commonjs/api/options.d.ts.map +1 -0
  82. package/dist/commonjs/api/options.js +5 -0
  83. package/dist/commonjs/api/options.js.map +1 -0
  84. package/dist/commonjs/api/poller.d.ts +9 -0
  85. package/dist/commonjs/api/poller.d.ts.map +1 -0
  86. package/dist/commonjs/api/poller.js +140 -0
  87. package/dist/commonjs/api/poller.js.map +1 -0
  88. package/dist/commonjs/constants.d.ts +9 -0
  89. package/dist/commonjs/constants.d.ts.map +1 -0
  90. package/dist/commonjs/constants.js +14 -0
  91. package/dist/commonjs/constants.js.map +1 -0
  92. package/dist/commonjs/index.d.ts +8 -0
  93. package/dist/commonjs/index.d.ts.map +1 -0
  94. package/dist/commonjs/index.js +13 -0
  95. package/dist/commonjs/index.js.map +1 -0
  96. package/dist/commonjs/logger.d.ts +2 -0
  97. package/dist/commonjs/logger.d.ts.map +1 -0
  98. package/dist/commonjs/logger.js +8 -0
  99. package/dist/commonjs/logger.js.map +1 -0
  100. package/dist/commonjs/models/index.d.ts +3 -0
  101. package/dist/commonjs/models/index.d.ts.map +1 -0
  102. package/dist/commonjs/models/index.js +10 -0
  103. package/dist/commonjs/models/index.js.map +1 -0
  104. package/dist/commonjs/models/models.d.ts +1977 -0
  105. package/dist/commonjs/models/models.d.ts.map +1 -0
  106. package/dist/commonjs/models/models.js +2340 -0
  107. package/dist/commonjs/models/models.js.map +1 -0
  108. package/dist/commonjs/models/streamingModels.d.ts +108 -0
  109. package/dist/commonjs/models/streamingModels.d.ts.map +1 -0
  110. package/dist/commonjs/models/streamingModels.js +78 -0
  111. package/dist/commonjs/models/streamingModels.js.map +1 -0
  112. package/dist/commonjs/package.json +3 -0
  113. package/dist/commonjs/static-helpers/multipartHelpers.d.ts +6 -0
  114. package/dist/commonjs/static-helpers/multipartHelpers.d.ts.map +1 -0
  115. package/dist/commonjs/static-helpers/multipartHelpers.js +26 -0
  116. package/dist/commonjs/static-helpers/multipartHelpers.js.map +1 -0
  117. package/dist/commonjs/static-helpers/urlTemplate.d.ts +5 -0
  118. package/dist/commonjs/static-helpers/urlTemplate.d.ts.map +1 -0
  119. package/dist/commonjs/static-helpers/urlTemplate.js +172 -0
  120. package/dist/commonjs/static-helpers/urlTemplate.js.map +1 -0
  121. package/dist/commonjs/tsdoc-metadata.json +11 -0
  122. package/dist/commonjs/utils.d.ts +214 -0
  123. package/dist/commonjs/utils.d.ts.map +1 -0
  124. package/dist/commonjs/utils.js +317 -0
  125. package/dist/commonjs/utils.js.map +1 -0
  126. package/dist/esm/agentsClient.d.ts +110 -0
  127. package/dist/esm/agentsClient.d.ts.map +1 -0
  128. package/dist/esm/agentsClient.js +203 -0
  129. package/dist/esm/agentsClient.js.map +1 -0
  130. package/dist/esm/api/agentsContext.d.ts +15 -0
  131. package/dist/esm/api/agentsContext.d.ts.map +1 -0
  132. package/dist/esm/api/agentsContext.js +55 -0
  133. package/dist/esm/api/agentsContext.js.map +1 -0
  134. package/dist/esm/api/index.d.ts +4 -0
  135. package/dist/esm/api/index.d.ts.map +1 -0
  136. package/dist/esm/api/index.js +5 -0
  137. package/dist/esm/api/index.js.map +1 -0
  138. package/dist/esm/api/operations.d.ts +212 -0
  139. package/dist/esm/api/operations.d.ts.map +1 -0
  140. package/dist/esm/api/operations.js +1348 -0
  141. package/dist/esm/api/operations.js.map +1 -0
  142. package/dist/esm/api/options.d.ts +456 -0
  143. package/dist/esm/api/options.d.ts.map +1 -0
  144. package/dist/esm/api/options.js +4 -0
  145. package/dist/esm/api/options.js.map +1 -0
  146. package/dist/esm/api/poller.d.ts +9 -0
  147. package/dist/esm/api/poller.d.ts.map +1 -0
  148. package/dist/esm/api/poller.js +137 -0
  149. package/dist/esm/api/poller.js.map +1 -0
  150. package/dist/esm/constants.d.ts +9 -0
  151. package/dist/esm/constants.d.ts.map +1 -0
  152. package/dist/esm/constants.js +11 -0
  153. package/dist/esm/constants.js.map +1 -0
  154. package/dist/esm/index.d.ts +8 -0
  155. package/dist/esm/index.d.ts.map +1 -0
  156. package/dist/esm/index.js +7 -0
  157. package/dist/esm/index.js.map +1 -0
  158. package/dist/esm/logger.d.ts +2 -0
  159. package/dist/esm/logger.d.ts.map +1 -0
  160. package/dist/esm/logger.js +5 -0
  161. package/dist/esm/logger.js.map +1 -0
  162. package/dist/esm/models/index.d.ts +3 -0
  163. package/dist/esm/models/index.d.ts.map +1 -0
  164. package/dist/esm/models/index.js +5 -0
  165. package/dist/esm/models/index.js.map +1 -0
  166. package/dist/esm/models/models.d.ts +1977 -0
  167. package/dist/esm/models/models.d.ts.map +1 -0
  168. package/dist/esm/models/models.js +2053 -0
  169. package/dist/esm/models/models.js.map +1 -0
  170. package/dist/esm/models/streamingModels.d.ts +108 -0
  171. package/dist/esm/models/streamingModels.d.ts.map +1 -0
  172. package/dist/esm/models/streamingModels.js +75 -0
  173. package/dist/esm/models/streamingModels.js.map +1 -0
  174. package/dist/esm/package.json +3 -0
  175. package/dist/esm/static-helpers/multipartHelpers.d.ts +6 -0
  176. package/dist/esm/static-helpers/multipartHelpers.d.ts.map +1 -0
  177. package/dist/esm/static-helpers/multipartHelpers.js +23 -0
  178. package/dist/esm/static-helpers/multipartHelpers.js.map +1 -0
  179. package/dist/esm/static-helpers/urlTemplate.d.ts +5 -0
  180. package/dist/esm/static-helpers/urlTemplate.d.ts.map +1 -0
  181. package/dist/esm/static-helpers/urlTemplate.js +169 -0
  182. package/dist/esm/static-helpers/urlTemplate.js.map +1 -0
  183. package/dist/esm/utils.d.ts +214 -0
  184. package/dist/esm/utils.d.ts.map +1 -0
  185. package/dist/esm/utils.js +311 -0
  186. package/dist/esm/utils.js.map +1 -0
  187. package/dist/react-native/agentsClient.d.ts +110 -0
  188. package/dist/react-native/agentsClient.d.ts.map +1 -0
  189. package/dist/react-native/agentsClient.js +203 -0
  190. package/dist/react-native/agentsClient.js.map +1 -0
  191. package/dist/react-native/api/agentsContext.d.ts +15 -0
  192. package/dist/react-native/api/agentsContext.d.ts.map +1 -0
  193. package/dist/react-native/api/agentsContext.js +55 -0
  194. package/dist/react-native/api/agentsContext.js.map +1 -0
  195. package/dist/react-native/api/index.d.ts +4 -0
  196. package/dist/react-native/api/index.d.ts.map +1 -0
  197. package/dist/react-native/api/index.js +5 -0
  198. package/dist/react-native/api/index.js.map +1 -0
  199. package/dist/react-native/api/operations.d.ts +212 -0
  200. package/dist/react-native/api/operations.d.ts.map +1 -0
  201. package/dist/react-native/api/operations.js +1348 -0
  202. package/dist/react-native/api/operations.js.map +1 -0
  203. package/dist/react-native/api/options.d.ts +456 -0
  204. package/dist/react-native/api/options.d.ts.map +1 -0
  205. package/dist/react-native/api/options.js +4 -0
  206. package/dist/react-native/api/options.js.map +1 -0
  207. package/dist/react-native/api/poller.d.ts +9 -0
  208. package/dist/react-native/api/poller.d.ts.map +1 -0
  209. package/dist/react-native/api/poller.js +137 -0
  210. package/dist/react-native/api/poller.js.map +1 -0
  211. package/dist/react-native/constants.d.ts +9 -0
  212. package/dist/react-native/constants.d.ts.map +1 -0
  213. package/dist/react-native/constants.js +11 -0
  214. package/dist/react-native/constants.js.map +1 -0
  215. package/dist/react-native/index.d.ts +8 -0
  216. package/dist/react-native/index.d.ts.map +1 -0
  217. package/dist/react-native/index.js +7 -0
  218. package/dist/react-native/index.js.map +1 -0
  219. package/dist/react-native/logger.d.ts +2 -0
  220. package/dist/react-native/logger.d.ts.map +1 -0
  221. package/dist/react-native/logger.js +5 -0
  222. package/dist/react-native/logger.js.map +1 -0
  223. package/dist/react-native/models/index.d.ts +3 -0
  224. package/dist/react-native/models/index.d.ts.map +1 -0
  225. package/dist/react-native/models/index.js +5 -0
  226. package/dist/react-native/models/index.js.map +1 -0
  227. package/dist/react-native/models/models.d.ts +1977 -0
  228. package/dist/react-native/models/models.d.ts.map +1 -0
  229. package/dist/react-native/models/models.js +2053 -0
  230. package/dist/react-native/models/models.js.map +1 -0
  231. package/dist/react-native/models/streamingModels.d.ts +108 -0
  232. package/dist/react-native/models/streamingModels.d.ts.map +1 -0
  233. package/dist/react-native/models/streamingModels.js +75 -0
  234. package/dist/react-native/models/streamingModels.js.map +1 -0
  235. package/dist/react-native/package.json +3 -0
  236. package/dist/react-native/static-helpers/multipartHelpers.d.ts +6 -0
  237. package/dist/react-native/static-helpers/multipartHelpers.d.ts.map +1 -0
  238. package/dist/react-native/static-helpers/multipartHelpers.js +23 -0
  239. package/dist/react-native/static-helpers/multipartHelpers.js.map +1 -0
  240. package/dist/react-native/static-helpers/urlTemplate.d.ts +5 -0
  241. package/dist/react-native/static-helpers/urlTemplate.d.ts.map +1 -0
  242. package/dist/react-native/static-helpers/urlTemplate.js +169 -0
  243. package/dist/react-native/static-helpers/urlTemplate.js.map +1 -0
  244. package/dist/react-native/utils.d.ts +214 -0
  245. package/dist/react-native/utils.d.ts.map +1 -0
  246. package/dist/react-native/utils.js +311 -0
  247. package/dist/react-native/utils.js.map +1 -0
  248. package/package.json +159 -0
@@ -0,0 +1,108 @@
1
+ import { AgentStreamEvent, AgentThread, MessageDeltaChunk, RunStep, RunStepDeltaChunk, ThreadMessage, ThreadRun } from "./models.js";
2
+ /**
3
+ Each event in a server-sent events stream has an `event` and `data` property:
4
+ *
5
+ * @example
6
+ * ``` ts
7
+ * event: thread.created
8
+ * data: {"id": "thread_123", "object": "thread", ...}
9
+ * ```
10
+ *
11
+ * We emit events whenever a new object is created, transitions to a new state, or is being
12
+ * streamed in parts (deltas). For example, we emit `thread.run.created` when a new run
13
+ * is created, `thread.run.completed` when a run completes, and so on. When an Agent chooses
14
+ * to create a message during a run, we emit a `thread.message.created event`, a
15
+ * `thread.message.in_progress` event, many `thread.message.delta` events, and finally a
16
+ * `thread.message.completed` event.
17
+ *
18
+ * We may add additional events over time, so we recommend handling unknown events gracefully
19
+ * in your code.
20
+ **/
21
+ export interface AgentEventMessage {
22
+ /** The data of the event. The data can be of type AgentThreadOutput, ThreadRunOutput, RunStepOutput, ThreadMessageOutput, MessageDeltaChunk,RunStepDeltaChunk */
23
+ data: AgentEventStreamData;
24
+ /** The type of the event. */
25
+ event: AgentStreamEvent | string;
26
+ }
27
+ /** Represents a stream event data in the agent. */
28
+ export type AgentEventStreamData = AgentThread | ThreadRun | RunStep | ThreadMessage | MessageDeltaChunk | RunStepDeltaChunk | string;
29
+ /** Thread operation related streaming events */
30
+ export declare enum ThreadStreamEvent {
31
+ /** Event sent when a new thread is created. The data of this event is of type AgentThread */
32
+ ThreadCreated = "thread.created"
33
+ }
34
+ /** Run operation related streaming events */
35
+ export declare enum RunStreamEvent {
36
+ /** Event sent when a new run is created. The data of this event is of type ThreadRun */
37
+ ThreadRunCreated = "thread.run.created",
38
+ /** Event sent when a run moves to `queued` status. The data of this event is of type ThreadRun */
39
+ ThreadRunQueued = "thread.run.queued",
40
+ /** Event sent when a run moves to `in_progress` status. The data of this event is of type ThreadRun */
41
+ ThreadRunInProgress = "thread.run.in_progress",
42
+ /** Event sent when a run moves to `requires_action` status. The data of this event is of type ThreadRun */
43
+ ThreadRunRequiresAction = "thread.run.requires_action",
44
+ /** Event sent when a run is completed. The data of this event is of type ThreadRun */
45
+ ThreadRunCompleted = "thread.run.completed",
46
+ /** Event sent when a run fails. The data of this event is of type ThreadRun */
47
+ ThreadRunFailed = "thread.run.failed",
48
+ /** Event sent when a run moves to `cancelling` status. The data of this event is of type ThreadRun */
49
+ ThreadRunCancelling = "thread.run.cancelling",
50
+ /** Event sent when a run is cancelled. The data of this event is of type ThreadRun */
51
+ ThreadRunCancelled = "thread.run.cancelled",
52
+ /** Event sent when a run is expired. The data of this event is of type ThreadRun */
53
+ ThreadRunExpired = "thread.run.expired"
54
+ }
55
+ /** Run step operation related streaming events */
56
+ export declare enum RunStepStreamEvent {
57
+ /** Event sent when a new thread run step is created. The data of this event is of type RunStep */
58
+ ThreadRunStepCreated = "thread.run.step.created",
59
+ /** Event sent when a run step moves to `in_progress` status. The data of this event is of type RunStep */
60
+ ThreadRunStepInProgress = "thread.run.step.in_progress",
61
+ /** Event sent when a run step is being streamed. The data of this event is of type RunStepDeltaChunk */
62
+ ThreadRunStepDelta = "thread.run.step.delta",
63
+ /** Event sent when a run step is completed. The data of this event is of type RunStep */
64
+ ThreadRunStepCompleted = "thread.run.step.completed",
65
+ /** Event sent when a run step fails. The data of this event is of type RunStep */
66
+ ThreadRunStepFailed = "thread.run.step.failed",
67
+ /** Event sent when a run step is cancelled. The data of this event is of type RunStep */
68
+ ThreadRunStepCancelled = "thread.run.step.cancelled",
69
+ /** Event sent when a run step is expired. The data of this event is of type RunStep */
70
+ ThreadRunStepExpired = "thread.run.step.expired"
71
+ }
72
+ /** Message operation related streaming events */
73
+ export declare enum MessageStreamEvent {
74
+ /** Event sent when a new message is created. The data of this event is of type ThreadMessage */
75
+ ThreadMessageCreated = "thread.message.created",
76
+ /** Event sent when a message moves to `in_progress` status. The data of this event is of type ThreadMessage */
77
+ ThreadMessageInProgress = "thread.message.in_progress",
78
+ /** Event sent when a message is being streamed. The data of this event is of type MessageDeltaChunk */
79
+ ThreadMessageDelta = "thread.message.delta",
80
+ /** Event sent when a message is completed. The data of this event is of type ThreadMessage */
81
+ ThreadMessageCompleted = "thread.message.completed",
82
+ /** Event sent before a message is completed. The data of this event is of type ThreadMessage */
83
+ ThreadMessageIncomplete = "thread.message.incomplete"
84
+ }
85
+ /** Terminal event indicating a server side error while streaming. */
86
+ export declare enum ErrorEvent {
87
+ /** Event sent when an error occurs, such as an internal server error or a timeout. */
88
+ Error = "error"
89
+ }
90
+ /** Terminal event indicating the successful end of a stream. */
91
+ export declare enum DoneEvent {
92
+ /** Event sent when the stream is done. */
93
+ Done = "done"
94
+ }
95
+ /** Represents a stream of agent event message. */
96
+ export interface AgentEventMessageStream extends AsyncDisposable, AsyncIterable<AgentEventMessage> {
97
+ }
98
+ /**
99
+ * Agent run response with support to stream.
100
+ */
101
+ export type AgentRunResponse = PromiseLike<ThreadRun> & {
102
+ /**
103
+ * Function to start streaming the agent event messages.
104
+ * @returns A promise that resolves to an AgentEventMessageStream.
105
+ */
106
+ stream: () => Promise<AgentEventMessageStream>;
107
+ };
108
+ //# sourceMappingURL=streamingModels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamingModels.d.ts","sourceRoot":"","sources":["../../../src/models/streamingModels.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,SAAS,EACV,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAiB;IAChC,kKAAkK;IAClK,IAAI,EAAE,oBAAoB,CAAC;IAC3B,6BAA6B;IAC7B,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAClC;AAED,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,SAAS,GACT,OAAO,GACP,aAAa,GACb,iBAAiB,GACjB,iBAAiB,GACjB,MAAM,CAAC;AAEX,gDAAgD;AAChD,oBAAY,iBAAiB;IAC3B,6FAA6F;IAC7F,aAAa,mBAAmB;CACjC;AAED,6CAA6C;AAC7C,oBAAY,cAAc;IACxB,wFAAwF;IACxF,gBAAgB,uBAAuB;IAEvC,kGAAkG;IAClG,eAAe,sBAAsB;IAErC,uGAAuG;IACvG,mBAAmB,2BAA2B;IAE9C,2GAA2G;IAC3G,uBAAuB,+BAA+B;IAEtD,sFAAsF;IACtF,kBAAkB,yBAAyB;IAE3C,+EAA+E;IAC/E,eAAe,sBAAsB;IAErC,sGAAsG;IACtG,mBAAmB,0BAA0B;IAE7C,sFAAsF;IACtF,kBAAkB,yBAAyB;IAE3C,oFAAoF;IACpF,gBAAgB,uBAAuB;CACxC;AAED,kDAAkD;AAClD,oBAAY,kBAAkB;IAC5B,kGAAkG;IAClG,oBAAoB,4BAA4B;IAEhD,0GAA0G;IAC1G,uBAAuB,gCAAgC;IAEvD,wGAAwG;IACxG,kBAAkB,0BAA0B;IAE5C,yFAAyF;IACzF,sBAAsB,8BAA8B;IAEpD,kFAAkF;IAClF,mBAAmB,2BAA2B;IAE9C,yFAAyF;IACzF,sBAAsB,8BAA8B;IAEpD,uFAAuF;IACvF,oBAAoB,4BAA4B;CACjD;AAED,iDAAiD;AACjD,oBAAY,kBAAkB;IAC5B,gGAAgG;IAChG,oBAAoB,2BAA2B;IAE/C,+GAA+G;IAC/G,uBAAuB,+BAA+B;IAEtD,uGAAuG;IACvG,kBAAkB,yBAAyB;IAE3C,8FAA8F;IAC9F,sBAAsB,6BAA6B;IAEnD,gGAAgG;IAChG,uBAAuB,8BAA8B;CACtD;AAED,qEAAqE;AACrE,oBAAY,UAAU;IACpB,sFAAsF;IACtF,KAAK,UAAU;CAChB;AAED,gEAAgE;AAChE,oBAAY,SAAS;IACnB,0CAA0C;IAC1C,IAAI,SAAS;CACd;AAED,kDAAkD;AAClD,MAAM,WAAW,uBACf,SAAQ,eAAe,EACrB,aAAa,CAAC,iBAAiB,CAAC;CAAG;AAEvC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG;IACtD;;;OAGG;IACH,MAAM,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChD,CAAC"}
@@ -0,0 +1,75 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ /** Thread operation related streaming events */
4
+ export var ThreadStreamEvent;
5
+ (function (ThreadStreamEvent) {
6
+ /** Event sent when a new thread is created. The data of this event is of type AgentThread */
7
+ ThreadStreamEvent["ThreadCreated"] = "thread.created";
8
+ })(ThreadStreamEvent || (ThreadStreamEvent = {}));
9
+ /** Run operation related streaming events */
10
+ export var RunStreamEvent;
11
+ (function (RunStreamEvent) {
12
+ /** Event sent when a new run is created. The data of this event is of type ThreadRun */
13
+ RunStreamEvent["ThreadRunCreated"] = "thread.run.created";
14
+ /** Event sent when a run moves to `queued` status. The data of this event is of type ThreadRun */
15
+ RunStreamEvent["ThreadRunQueued"] = "thread.run.queued";
16
+ /** Event sent when a run moves to `in_progress` status. The data of this event is of type ThreadRun */
17
+ RunStreamEvent["ThreadRunInProgress"] = "thread.run.in_progress";
18
+ /** Event sent when a run moves to `requires_action` status. The data of this event is of type ThreadRun */
19
+ RunStreamEvent["ThreadRunRequiresAction"] = "thread.run.requires_action";
20
+ /** Event sent when a run is completed. The data of this event is of type ThreadRun */
21
+ RunStreamEvent["ThreadRunCompleted"] = "thread.run.completed";
22
+ /** Event sent when a run fails. The data of this event is of type ThreadRun */
23
+ RunStreamEvent["ThreadRunFailed"] = "thread.run.failed";
24
+ /** Event sent when a run moves to `cancelling` status. The data of this event is of type ThreadRun */
25
+ RunStreamEvent["ThreadRunCancelling"] = "thread.run.cancelling";
26
+ /** Event sent when a run is cancelled. The data of this event is of type ThreadRun */
27
+ RunStreamEvent["ThreadRunCancelled"] = "thread.run.cancelled";
28
+ /** Event sent when a run is expired. The data of this event is of type ThreadRun */
29
+ RunStreamEvent["ThreadRunExpired"] = "thread.run.expired";
30
+ })(RunStreamEvent || (RunStreamEvent = {}));
31
+ /** Run step operation related streaming events */
32
+ export var RunStepStreamEvent;
33
+ (function (RunStepStreamEvent) {
34
+ /** Event sent when a new thread run step is created. The data of this event is of type RunStep */
35
+ RunStepStreamEvent["ThreadRunStepCreated"] = "thread.run.step.created";
36
+ /** Event sent when a run step moves to `in_progress` status. The data of this event is of type RunStep */
37
+ RunStepStreamEvent["ThreadRunStepInProgress"] = "thread.run.step.in_progress";
38
+ /** Event sent when a run step is being streamed. The data of this event is of type RunStepDeltaChunk */
39
+ RunStepStreamEvent["ThreadRunStepDelta"] = "thread.run.step.delta";
40
+ /** Event sent when a run step is completed. The data of this event is of type RunStep */
41
+ RunStepStreamEvent["ThreadRunStepCompleted"] = "thread.run.step.completed";
42
+ /** Event sent when a run step fails. The data of this event is of type RunStep */
43
+ RunStepStreamEvent["ThreadRunStepFailed"] = "thread.run.step.failed";
44
+ /** Event sent when a run step is cancelled. The data of this event is of type RunStep */
45
+ RunStepStreamEvent["ThreadRunStepCancelled"] = "thread.run.step.cancelled";
46
+ /** Event sent when a run step is expired. The data of this event is of type RunStep */
47
+ RunStepStreamEvent["ThreadRunStepExpired"] = "thread.run.step.expired";
48
+ })(RunStepStreamEvent || (RunStepStreamEvent = {}));
49
+ /** Message operation related streaming events */
50
+ export var MessageStreamEvent;
51
+ (function (MessageStreamEvent) {
52
+ /** Event sent when a new message is created. The data of this event is of type ThreadMessage */
53
+ MessageStreamEvent["ThreadMessageCreated"] = "thread.message.created";
54
+ /** Event sent when a message moves to `in_progress` status. The data of this event is of type ThreadMessage */
55
+ MessageStreamEvent["ThreadMessageInProgress"] = "thread.message.in_progress";
56
+ /** Event sent when a message is being streamed. The data of this event is of type MessageDeltaChunk */
57
+ MessageStreamEvent["ThreadMessageDelta"] = "thread.message.delta";
58
+ /** Event sent when a message is completed. The data of this event is of type ThreadMessage */
59
+ MessageStreamEvent["ThreadMessageCompleted"] = "thread.message.completed";
60
+ /** Event sent before a message is completed. The data of this event is of type ThreadMessage */
61
+ MessageStreamEvent["ThreadMessageIncomplete"] = "thread.message.incomplete";
62
+ })(MessageStreamEvent || (MessageStreamEvent = {}));
63
+ /** Terminal event indicating a server side error while streaming. */
64
+ export var ErrorEvent;
65
+ (function (ErrorEvent) {
66
+ /** Event sent when an error occurs, such as an internal server error or a timeout. */
67
+ ErrorEvent["Error"] = "error";
68
+ })(ErrorEvent || (ErrorEvent = {}));
69
+ /** Terminal event indicating the successful end of a stream. */
70
+ export var DoneEvent;
71
+ (function (DoneEvent) {
72
+ /** Event sent when the stream is done. */
73
+ DoneEvent["Done"] = "done";
74
+ })(DoneEvent || (DoneEvent = {}));
75
+ //# sourceMappingURL=streamingModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamingModels.js","sourceRoot":"","sources":["../../../src/models/streamingModels.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAgDlC,gDAAgD;AAChD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,6FAA6F;IAC7F,qDAAgC,CAAA;AAClC,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAED,6CAA6C;AAC7C,MAAM,CAAN,IAAY,cA2BX;AA3BD,WAAY,cAAc;IACxB,wFAAwF;IACxF,yDAAuC,CAAA;IAEvC,kGAAkG;IAClG,uDAAqC,CAAA;IAErC,uGAAuG;IACvG,gEAA8C,CAAA;IAE9C,2GAA2G;IAC3G,wEAAsD,CAAA;IAEtD,sFAAsF;IACtF,6DAA2C,CAAA;IAE3C,+EAA+E;IAC/E,uDAAqC,CAAA;IAErC,sGAAsG;IACtG,+DAA6C,CAAA;IAE7C,sFAAsF;IACtF,6DAA2C,CAAA;IAE3C,oFAAoF;IACpF,yDAAuC,CAAA;AACzC,CAAC,EA3BW,cAAc,KAAd,cAAc,QA2BzB;AAED,kDAAkD;AAClD,MAAM,CAAN,IAAY,kBAqBX;AArBD,WAAY,kBAAkB;IAC5B,kGAAkG;IAClG,sEAAgD,CAAA;IAEhD,0GAA0G;IAC1G,6EAAuD,CAAA;IAEvD,wGAAwG;IACxG,kEAA4C,CAAA;IAE5C,yFAAyF;IACzF,0EAAoD,CAAA;IAEpD,kFAAkF;IAClF,oEAA8C,CAAA;IAE9C,yFAAyF;IACzF,0EAAoD,CAAA;IAEpD,uFAAuF;IACvF,sEAAgD,CAAA;AAClD,CAAC,EArBW,kBAAkB,KAAlB,kBAAkB,QAqB7B;AAED,iDAAiD;AACjD,MAAM,CAAN,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B,gGAAgG;IAChG,qEAA+C,CAAA;IAE/C,+GAA+G;IAC/G,4EAAsD,CAAA;IAEtD,uGAAuG;IACvG,iEAA2C,CAAA;IAE3C,8FAA8F;IAC9F,yEAAmD,CAAA;IAEnD,gGAAgG;IAChG,2EAAqD,CAAA;AACvD,CAAC,EAfW,kBAAkB,KAAlB,kBAAkB,QAe7B;AAED,qEAAqE;AACrE,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,sFAAsF;IACtF,6BAAe,CAAA;AACjB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,gEAAgE;AAChE,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,0CAA0C;IAC1C,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n AgentStreamEvent,\n AgentThread,\n MessageDeltaChunk,\n RunStep,\n RunStepDeltaChunk,\n ThreadMessage,\n ThreadRun,\n} from \"./models.js\";\n\n/**\nEach event in a server-sent events stream has an `event` and `data` property:\n* \n* @example\n* ``` ts\n* event: thread.created\n* data: {\"id\": \"thread_123\", \"object\": \"thread\", ...}\n* ``` \n* \n* We emit events whenever a new object is created, transitions to a new state, or is being\n* streamed in parts (deltas). For example, we emit `thread.run.created` when a new run\n* is created, `thread.run.completed` when a run completes, and so on. When an Agent chooses\n* to create a message during a run, we emit a `thread.message.created event`, a\n* `thread.message.in_progress` event, many `thread.message.delta` events, and finally a\n* `thread.message.completed` event.\n* \n* We may add additional events over time, so we recommend handling unknown events gracefully\n* in your code.\n**/\nexport interface AgentEventMessage {\n /** The data of the event. The data can be of type AgentThreadOutput, ThreadRunOutput, RunStepOutput, ThreadMessageOutput, MessageDeltaChunk,RunStepDeltaChunk */\n data: AgentEventStreamData;\n /** The type of the event. */\n event: AgentStreamEvent | string;\n}\n\n/** Represents a stream event data in the agent. */\nexport type AgentEventStreamData =\n | AgentThread\n | ThreadRun\n | RunStep\n | ThreadMessage\n | MessageDeltaChunk\n | RunStepDeltaChunk\n | string;\n\n/** Thread operation related streaming events */\nexport enum ThreadStreamEvent {\n /** Event sent when a new thread is created. The data of this event is of type AgentThread */\n ThreadCreated = \"thread.created\",\n}\n\n/** Run operation related streaming events */\nexport enum RunStreamEvent {\n /** Event sent when a new run is created. The data of this event is of type ThreadRun */\n ThreadRunCreated = \"thread.run.created\",\n\n /** Event sent when a run moves to `queued` status. The data of this event is of type ThreadRun */\n ThreadRunQueued = \"thread.run.queued\",\n\n /** Event sent when a run moves to `in_progress` status. The data of this event is of type ThreadRun */\n ThreadRunInProgress = \"thread.run.in_progress\",\n\n /** Event sent when a run moves to `requires_action` status. The data of this event is of type ThreadRun */\n ThreadRunRequiresAction = \"thread.run.requires_action\",\n\n /** Event sent when a run is completed. The data of this event is of type ThreadRun */\n ThreadRunCompleted = \"thread.run.completed\",\n\n /** Event sent when a run fails. The data of this event is of type ThreadRun */\n ThreadRunFailed = \"thread.run.failed\",\n\n /** Event sent when a run moves to `cancelling` status. The data of this event is of type ThreadRun */\n ThreadRunCancelling = \"thread.run.cancelling\",\n\n /** Event sent when a run is cancelled. The data of this event is of type ThreadRun */\n ThreadRunCancelled = \"thread.run.cancelled\",\n\n /** Event sent when a run is expired. The data of this event is of type ThreadRun */\n ThreadRunExpired = \"thread.run.expired\",\n}\n\n/** Run step operation related streaming events */\nexport enum RunStepStreamEvent {\n /** Event sent when a new thread run step is created. The data of this event is of type RunStep */\n ThreadRunStepCreated = \"thread.run.step.created\",\n\n /** Event sent when a run step moves to `in_progress` status. The data of this event is of type RunStep */\n ThreadRunStepInProgress = \"thread.run.step.in_progress\",\n\n /** Event sent when a run step is being streamed. The data of this event is of type RunStepDeltaChunk */\n ThreadRunStepDelta = \"thread.run.step.delta\",\n\n /** Event sent when a run step is completed. The data of this event is of type RunStep */\n ThreadRunStepCompleted = \"thread.run.step.completed\",\n\n /** Event sent when a run step fails. The data of this event is of type RunStep */\n ThreadRunStepFailed = \"thread.run.step.failed\",\n\n /** Event sent when a run step is cancelled. The data of this event is of type RunStep */\n ThreadRunStepCancelled = \"thread.run.step.cancelled\",\n\n /** Event sent when a run step is expired. The data of this event is of type RunStep */\n ThreadRunStepExpired = \"thread.run.step.expired\",\n}\n\n/** Message operation related streaming events */\nexport enum MessageStreamEvent {\n /** Event sent when a new message is created. The data of this event is of type ThreadMessage */\n ThreadMessageCreated = \"thread.message.created\",\n\n /** Event sent when a message moves to `in_progress` status. The data of this event is of type ThreadMessage */\n ThreadMessageInProgress = \"thread.message.in_progress\",\n\n /** Event sent when a message is being streamed. The data of this event is of type MessageDeltaChunk */\n ThreadMessageDelta = \"thread.message.delta\",\n\n /** Event sent when a message is completed. The data of this event is of type ThreadMessage */\n ThreadMessageCompleted = \"thread.message.completed\",\n\n /** Event sent before a message is completed. The data of this event is of type ThreadMessage */\n ThreadMessageIncomplete = \"thread.message.incomplete\",\n}\n\n/** Terminal event indicating a server side error while streaming. */\nexport enum ErrorEvent {\n /** Event sent when an error occurs, such as an internal server error or a timeout. */\n Error = \"error\",\n}\n\n/** Terminal event indicating the successful end of a stream. */\nexport enum DoneEvent {\n /** Event sent when the stream is done. */\n Done = \"done\",\n}\n\n/** Represents a stream of agent event message. */\nexport interface AgentEventMessageStream\n extends AsyncDisposable,\n AsyncIterable<AgentEventMessage> {}\n\n/**\n * Agent run response with support to stream.\n */\nexport type AgentRunResponse = PromiseLike<ThreadRun> & {\n /**\n * Function to start streaming the agent event messages.\n * @returns A promise that resolves to an AgentEventMessageStream.\n */\n stream: () => Promise<AgentEventMessageStream>;\n};\n"]}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Valid values for the contents of a binary file.
3
+ */
4
+ export type FileContents = string | NodeJS.ReadableStream | ReadableStream | Uint8Array | Blob;
5
+ export declare function createFilePartDescriptor(partName: string, fileInput: any, defaultContentType?: string): any;
6
+ //# sourceMappingURL=multipartHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipartHelpers.d.ts","sourceRoot":"","sources":["../../../src/static-helpers/multipartHelpers.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,IAAI,CAAC;AAE/F,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAEhB,SAAS,EAAE,GAAG,EACd,kBAAkB,CAAC,EAAE,MAAM,GAC1B,GAAG,CAeL"}
@@ -0,0 +1,23 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export function createFilePartDescriptor(partName,
4
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
5
+ fileInput, defaultContentType) {
6
+ var _a;
7
+ if (fileInput.contents) {
8
+ return {
9
+ name: partName,
10
+ body: fileInput.contents,
11
+ contentType: (_a = fileInput.contentType) !== null && _a !== void 0 ? _a : defaultContentType,
12
+ filename: fileInput.filename,
13
+ };
14
+ }
15
+ else {
16
+ return {
17
+ name: partName,
18
+ body: fileInput,
19
+ contentType: defaultContentType,
20
+ };
21
+ }
22
+ }
23
+ //# sourceMappingURL=multipartHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipartHelpers.js","sourceRoot":"","sources":["../../../src/static-helpers/multipartHelpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAOlC,MAAM,UAAU,wBAAwB,CACtC,QAAgB;AAChB,6EAA6E;AAC7E,SAAc,EACd,kBAA2B;;IAE3B,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,WAAW,EAAE,MAAA,SAAS,CAAC,WAAW,mCAAI,kBAAkB;YACxD,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC7B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,kBAAkB;SAChC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Valid values for the contents of a binary file.\n */\nexport type FileContents = string | NodeJS.ReadableStream | ReadableStream | Uint8Array | Blob;\n\nexport function createFilePartDescriptor(\n partName: string,\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n fileInput: any,\n defaultContentType?: string,\n): any {\n if (fileInput.contents) {\n return {\n name: partName,\n body: fileInput.contents,\n contentType: fileInput.contentType ?? defaultContentType,\n filename: fileInput.filename,\n };\n } else {\n return {\n name: partName,\n body: fileInput,\n contentType: defaultContentType,\n };\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export interface UrlTemplateOptions {
2
+ allowReserved?: boolean;
3
+ }
4
+ export declare function expandUrlTemplate(template: string, context: Record<string, any>, option?: UrlTemplateOptions): string;
5
+ //# sourceMappingURL=urlTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlTemplate.d.ts","sourceRoot":"","sources":["../../../src/static-helpers/urlTemplate.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IAEjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAgJD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,MAAM,CA8BR"}
@@ -0,0 +1,169 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ // ---------------------
4
+ // helpers
5
+ // ---------------------
6
+ function encodeComponent(val, reserved, op) {
7
+ return (reserved !== null && reserved !== void 0 ? reserved : op === "+") || op === "#"
8
+ ? encodeReservedComponent(val)
9
+ : encodeRFC3986URIComponent(val);
10
+ }
11
+ function encodeReservedComponent(str) {
12
+ return str
13
+ .split(/(%[0-9A-Fa-f]{2})/g)
14
+ .map((part) => (!/%[0-9A-Fa-f]/.test(part) ? encodeURI(part) : part))
15
+ .join("");
16
+ }
17
+ function encodeRFC3986URIComponent(str) {
18
+ return encodeURIComponent(str).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
19
+ }
20
+ function isDefined(val) {
21
+ return val !== undefined && val !== null;
22
+ }
23
+ function getNamedAndIfEmpty(op) {
24
+ return [!!op && [";", "?", "&"].includes(op), !!op && ["?", "&"].includes(op) ? "=" : ""];
25
+ }
26
+ function getFirstOrSep(op, isFirst = false) {
27
+ if (isFirst) {
28
+ return !op || op === "+" ? "" : op;
29
+ }
30
+ else if (!op || op === "+" || op === "#") {
31
+ return ",";
32
+ }
33
+ else if (op === "?") {
34
+ return "&";
35
+ }
36
+ else {
37
+ return op;
38
+ }
39
+ }
40
+ function getExpandedValue(option) {
41
+ let isFirst = option.isFirst;
42
+ const { op, varName, varValue: value, reserved } = option;
43
+ const vals = [];
44
+ const [named, ifEmpty] = getNamedAndIfEmpty(op);
45
+ if (Array.isArray(value)) {
46
+ for (const val of value.filter(isDefined)) {
47
+ // prepare the following parts: separator, varName, value
48
+ vals.push(`${getFirstOrSep(op, isFirst)}`);
49
+ if (named && varName) {
50
+ vals.push(`${encodeURIComponent(varName)}`);
51
+ val === "" ? vals.push(ifEmpty) : vals.push("=");
52
+ }
53
+ vals.push(encodeComponent(val, reserved, op));
54
+ isFirst = false;
55
+ }
56
+ }
57
+ else if (typeof value === "object") {
58
+ for (const key of Object.keys(value)) {
59
+ const val = value[key];
60
+ if (!isDefined(val)) {
61
+ continue;
62
+ }
63
+ // prepare the following parts: separator, key, value
64
+ vals.push(`${getFirstOrSep(op, isFirst)}`);
65
+ if (key) {
66
+ vals.push(`${encodeURIComponent(key)}`);
67
+ named && val === "" ? vals.push(ifEmpty) : vals.push("=");
68
+ }
69
+ vals.push(encodeComponent(val, reserved, op));
70
+ isFirst = false;
71
+ }
72
+ }
73
+ return vals.join("");
74
+ }
75
+ function getNonExpandedValue(option) {
76
+ const { op, varName, varValue: value, isFirst, reserved } = option;
77
+ const vals = [];
78
+ const first = getFirstOrSep(op, isFirst);
79
+ const [named, ifEmpty] = getNamedAndIfEmpty(op);
80
+ if (named && varName) {
81
+ vals.push(encodeComponent(varName, reserved, op));
82
+ if (value === "") {
83
+ if (!ifEmpty) {
84
+ vals.push(ifEmpty);
85
+ }
86
+ return !vals.join("") ? undefined : `${first}${vals.join("")}`;
87
+ }
88
+ vals.push("=");
89
+ }
90
+ const items = [];
91
+ if (Array.isArray(value)) {
92
+ for (const val of value.filter(isDefined)) {
93
+ items.push(encodeComponent(val, reserved, op));
94
+ }
95
+ }
96
+ else if (typeof value === "object") {
97
+ for (const key of Object.keys(value)) {
98
+ if (!isDefined(value[key])) {
99
+ continue;
100
+ }
101
+ items.push(encodeRFC3986URIComponent(key));
102
+ items.push(encodeComponent(value[key], reserved, op));
103
+ }
104
+ }
105
+ vals.push(items.join(","));
106
+ return !vals.join(",") ? undefined : `${first}${vals.join("")}`;
107
+ }
108
+ function getVarValue(option) {
109
+ const { op, varName, modifier, isFirst, reserved, varValue: value } = option;
110
+ if (!isDefined(value)) {
111
+ return undefined;
112
+ }
113
+ else if (["string", "number", "boolean"].includes(typeof value)) {
114
+ let val = value.toString();
115
+ const [named, ifEmpty] = getNamedAndIfEmpty(op);
116
+ const vals = [getFirstOrSep(op, isFirst)];
117
+ if (named && varName) {
118
+ // No need to encode varName considering it is already encoded
119
+ vals.push(varName);
120
+ val === "" ? vals.push(ifEmpty) : vals.push("=");
121
+ }
122
+ if (modifier && modifier !== "*") {
123
+ val = val.substring(0, parseInt(modifier, 10));
124
+ }
125
+ vals.push(encodeComponent(val, reserved, op));
126
+ return vals.join("");
127
+ }
128
+ else if (modifier === "*") {
129
+ return getExpandedValue(option);
130
+ }
131
+ else {
132
+ return getNonExpandedValue(option);
133
+ }
134
+ }
135
+ // ---------------------------------------------------------------------------------------------------
136
+ // This is an implementation of RFC 6570 URI Template: https://datatracker.ietf.org/doc/html/rfc6570.
137
+ // ---------------------------------------------------------------------------------------------------
138
+ export function expandUrlTemplate(template, context, option) {
139
+ return template.replace(/\{([^{}]+)\}|([^{}]+)/g, (_, expr, text) => {
140
+ if (!expr) {
141
+ return encodeReservedComponent(text);
142
+ }
143
+ let op;
144
+ if (["+", "#", ".", "/", ";", "?", "&"].includes(expr[0])) {
145
+ (op = expr[0]), (expr = expr.slice(1));
146
+ }
147
+ const varList = expr.split(/,/g);
148
+ const result = [];
149
+ for (const varSpec of varList) {
150
+ const varMatch = /([^:*]*)(?::(\d+)|(\*))?/.exec(varSpec);
151
+ if (!varMatch || !varMatch[1]) {
152
+ continue;
153
+ }
154
+ const varValue = getVarValue({
155
+ isFirst: result.length === 0,
156
+ op,
157
+ varValue: context[varMatch[1]],
158
+ varName: varMatch[1],
159
+ modifier: varMatch[2] || varMatch[3],
160
+ reserved: option === null || option === void 0 ? void 0 : option.allowReserved,
161
+ });
162
+ if (varValue) {
163
+ result.push(varValue);
164
+ }
165
+ }
166
+ return result.join("");
167
+ });
168
+ }
169
+ //# sourceMappingURL=urlTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlTemplate.js","sourceRoot":"","sources":["../../../src/static-helpers/urlTemplate.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAuBlC,wBAAwB;AACxB,UAAU;AACV,wBAAwB;AACxB,SAAS,eAAe,CAAC,GAAW,EAAE,QAAkB,EAAE,EAAW;IACnE,OAAO,CAAC,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG;QAC3C,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC;QAC9B,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,OAAO,GAAG;SACP,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACpE,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAW;IAC5C,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,CACpC,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAQ;IACzB,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAW;IACrC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,aAAa,CAAC,EAAW,EAAE,OAAO,GAAG,KAAK;IACjD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;SAAM,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAoB;IAC5C,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC7B,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC1D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAEhD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,yDAAyD;YACzD,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5C,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,qDAAqD;YACrD,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxC,KAAK,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAoB;IAC/C,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACnE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,MAAoB;IACvC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE7E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAClE,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAa,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACrB,8DAA8D;YAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,qGAAqG;AACrG,sGAAsG;AACtG,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,OAA4B,EAC5B,MAA2B;IAE3B,OAAO,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,EAAE,CAAC;QACP,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC;gBAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC5B,EAAE;gBACF,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC9B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;gBACpC,QAAQ,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa;aAChC,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* eslint-disable no-unused-expressions */\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n// ---------------------\n// interfaces\n// ---------------------\ninterface ValueOptions {\n isFirst: boolean; // is first value in the expression\n op?: string; // operator\n varValue?: any; // variable value\n varName?: string; // variable name\n modifier?: string; // modifier e.g *\n reserved?: boolean; // if true we'll keep reserved words with not encoding\n}\n\nexport interface UrlTemplateOptions {\n // if set to true, reserved characters will not be encoded\n allowReserved?: boolean;\n}\n\n// ---------------------\n// helpers\n// ---------------------\nfunction encodeComponent(val: string, reserved?: boolean, op?: string) {\n return (reserved ?? op === \"+\") || op === \"#\"\n ? encodeReservedComponent(val)\n : encodeRFC3986URIComponent(val);\n}\n\nfunction encodeReservedComponent(str: string) {\n return str\n .split(/(%[0-9A-Fa-f]{2})/g)\n .map((part) => (!/%[0-9A-Fa-f]/.test(part) ? encodeURI(part) : part))\n .join(\"\");\n}\n\nfunction encodeRFC3986URIComponent(str: string) {\n return encodeURIComponent(str).replace(\n /[!'()*]/g,\n (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,\n );\n}\n\nfunction isDefined(val: any) {\n return val !== undefined && val !== null;\n}\n\nfunction getNamedAndIfEmpty(op?: string): [boolean, string] {\n return [!!op && [\";\", \"?\", \"&\"].includes(op), !!op && [\"?\", \"&\"].includes(op) ? \"=\" : \"\"];\n}\n\nfunction getFirstOrSep(op?: string, isFirst = false) {\n if (isFirst) {\n return !op || op === \"+\" ? \"\" : op;\n } else if (!op || op === \"+\" || op === \"#\") {\n return \",\";\n } else if (op === \"?\") {\n return \"&\";\n } else {\n return op;\n }\n}\n\nfunction getExpandedValue(option: ValueOptions) {\n let isFirst = option.isFirst;\n const { op, varName, varValue: value, reserved } = option;\n const vals: string[] = [];\n const [named, ifEmpty] = getNamedAndIfEmpty(op);\n\n if (Array.isArray(value)) {\n for (const val of value.filter(isDefined)) {\n // prepare the following parts: separator, varName, value\n vals.push(`${getFirstOrSep(op, isFirst)}`);\n if (named && varName) {\n vals.push(`${encodeURIComponent(varName)}`);\n val === \"\" ? vals.push(ifEmpty) : vals.push(\"=\");\n }\n vals.push(encodeComponent(val, reserved, op));\n isFirst = false;\n }\n } else if (typeof value === \"object\") {\n for (const key of Object.keys(value)) {\n const val = value[key];\n if (!isDefined(val)) {\n continue;\n }\n // prepare the following parts: separator, key, value\n vals.push(`${getFirstOrSep(op, isFirst)}`);\n if (key) {\n vals.push(`${encodeURIComponent(key)}`);\n named && val === \"\" ? vals.push(ifEmpty) : vals.push(\"=\");\n }\n vals.push(encodeComponent(val, reserved, op));\n isFirst = false;\n }\n }\n return vals.join(\"\");\n}\n\nfunction getNonExpandedValue(option: ValueOptions) {\n const { op, varName, varValue: value, isFirst, reserved } = option;\n const vals: string[] = [];\n const first = getFirstOrSep(op, isFirst);\n const [named, ifEmpty] = getNamedAndIfEmpty(op);\n if (named && varName) {\n vals.push(encodeComponent(varName, reserved, op));\n if (value === \"\") {\n if (!ifEmpty) {\n vals.push(ifEmpty);\n }\n return !vals.join(\"\") ? undefined : `${first}${vals.join(\"\")}`;\n }\n vals.push(\"=\");\n }\n\n const items = [];\n if (Array.isArray(value)) {\n for (const val of value.filter(isDefined)) {\n items.push(encodeComponent(val, reserved, op));\n }\n } else if (typeof value === \"object\") {\n for (const key of Object.keys(value)) {\n if (!isDefined(value[key])) {\n continue;\n }\n items.push(encodeRFC3986URIComponent(key));\n items.push(encodeComponent(value[key], reserved, op));\n }\n }\n vals.push(items.join(\",\"));\n return !vals.join(\",\") ? undefined : `${first}${vals.join(\"\")}`;\n}\n\nfunction getVarValue(option: ValueOptions): string | undefined {\n const { op, varName, modifier, isFirst, reserved, varValue: value } = option;\n\n if (!isDefined(value)) {\n return undefined;\n } else if ([\"string\", \"number\", \"boolean\"].includes(typeof value)) {\n let val = value.toString();\n const [named, ifEmpty] = getNamedAndIfEmpty(op);\n const vals: string[] = [getFirstOrSep(op, isFirst)];\n if (named && varName) {\n // No need to encode varName considering it is already encoded\n vals.push(varName);\n val === \"\" ? vals.push(ifEmpty) : vals.push(\"=\");\n }\n if (modifier && modifier !== \"*\") {\n val = val.substring(0, parseInt(modifier, 10));\n }\n vals.push(encodeComponent(val, reserved, op));\n return vals.join(\"\");\n } else if (modifier === \"*\") {\n return getExpandedValue(option);\n } else {\n return getNonExpandedValue(option);\n }\n}\n\n// ---------------------------------------------------------------------------------------------------\n// This is an implementation of RFC 6570 URI Template: https://datatracker.ietf.org/doc/html/rfc6570.\n// ---------------------------------------------------------------------------------------------------\nexport function expandUrlTemplate(\n template: string,\n context: Record<string, any>,\n option?: UrlTemplateOptions,\n): string {\n return template.replace(/\\{([^{}]+)\\}|([^{}]+)/g, (_, expr, text) => {\n if (!expr) {\n return encodeReservedComponent(text);\n }\n let op;\n if ([\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"].includes(expr[0])) {\n (op = expr[0]), (expr = expr.slice(1));\n }\n const varList = expr.split(/,/g);\n const result = [];\n for (const varSpec of varList) {\n const varMatch = /([^:*]*)(?::(\\d+)|(\\*))?/.exec(varSpec);\n if (!varMatch || !varMatch[1]) {\n continue;\n }\n const varValue = getVarValue({\n isFirst: result.length === 0,\n op,\n varValue: context[varMatch[1]],\n varName: varMatch[1],\n modifier: varMatch[2] || varMatch[3],\n reserved: option?.allowReserved,\n });\n if (varValue) {\n result.push(varValue);\n }\n }\n return result.join(\"\");\n });\n}\n"]}