@typespec/ts-http-runtime 0.3.5-alpha.20260311.2 → 0.3.5

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 (230) hide show
  1. package/dist/browser/client/multipart.js.map +1 -1
  2. package/dist/browser/client/sendRequest.js +12 -4
  3. package/dist/browser/client/sendRequest.js.map +1 -1
  4. package/dist/browser/client/urlHelpers.js +9 -3
  5. package/dist/browser/client/urlHelpers.js.map +1 -1
  6. package/dist/browser/fetchHttpClient.d.ts +5 -0
  7. package/dist/browser/fetchHttpClient.js.map +1 -1
  8. package/dist/browser/logger/logger.js.map +1 -1
  9. package/dist/browser/policies/retryPolicy.js +4 -3
  10. package/dist/browser/policies/retryPolicy.js.map +1 -1
  11. package/dist/browser/util/concat.d.ts +16 -1
  12. package/dist/browser/util/concat.js +55 -1
  13. package/dist/browser/util/concat.js.map +1 -1
  14. package/dist/browser/util/sanitizer.js +3 -3
  15. package/dist/browser/util/sanitizer.js.map +1 -1
  16. package/dist/browser/util/typeGuards.js +2 -2
  17. package/dist/browser/util/typeGuards.js.map +1 -1
  18. package/dist/browser/util/userAgentPlatform.d.ts +28 -0
  19. package/dist/browser/util/userAgentPlatform.js +9 -10
  20. package/dist/browser/util/userAgentPlatform.js.map +1 -1
  21. package/dist/browser/util/uuidUtils.common.js +1 -1
  22. package/dist/browser/util/uuidUtils.common.js.map +1 -1
  23. package/dist/commonjs/abort-controller/AbortError.js +1 -0
  24. package/dist/commonjs/abort-controller/AbortError.js.map +1 -1
  25. package/dist/commonjs/auth/credentials.js +1 -0
  26. package/dist/commonjs/auth/credentials.js.map +1 -1
  27. package/dist/commonjs/auth/oauth2Flows.js +1 -0
  28. package/dist/commonjs/auth/oauth2Flows.js.map +1 -1
  29. package/dist/commonjs/auth/schemes.js +1 -0
  30. package/dist/commonjs/auth/schemes.js.map +1 -1
  31. package/dist/commonjs/client/apiVersionPolicy.js +1 -0
  32. package/dist/commonjs/client/apiVersionPolicy.js.map +1 -1
  33. package/dist/commonjs/client/clientHelpers.js +1 -0
  34. package/dist/commonjs/client/clientHelpers.js.map +1 -1
  35. package/dist/commonjs/client/common.js +1 -0
  36. package/dist/commonjs/client/common.js.map +1 -1
  37. package/dist/commonjs/client/getClient.js +1 -0
  38. package/dist/commonjs/client/getClient.js.map +1 -1
  39. package/dist/commonjs/client/multipart.js +1 -0
  40. package/dist/commonjs/client/multipart.js.map +3 -3
  41. package/dist/commonjs/client/operationOptionHelpers.js +1 -0
  42. package/dist/commonjs/client/operationOptionHelpers.js.map +1 -1
  43. package/dist/commonjs/client/restError.js +1 -0
  44. package/dist/commonjs/client/restError.js.map +1 -1
  45. package/dist/commonjs/client/sendRequest.js +13 -2
  46. package/dist/commonjs/client/sendRequest.js.map +3 -3
  47. package/dist/commonjs/client/urlHelpers.js +7 -3
  48. package/dist/commonjs/client/urlHelpers.js.map +3 -3
  49. package/dist/commonjs/constants.js +1 -0
  50. package/dist/commonjs/constants.js.map +1 -1
  51. package/dist/commonjs/createPipelineFromOptions.js +1 -0
  52. package/dist/commonjs/createPipelineFromOptions.js.map +1 -1
  53. package/dist/commonjs/defaultHttpClient.js +1 -0
  54. package/dist/commonjs/defaultHttpClient.js.map +1 -1
  55. package/dist/commonjs/fetchHttpClient.d.ts +5 -0
  56. package/dist/commonjs/fetchHttpClient.js +1 -0
  57. package/dist/commonjs/fetchHttpClient.js.map +3 -3
  58. package/dist/commonjs/httpHeaders.js +1 -0
  59. package/dist/commonjs/httpHeaders.js.map +1 -1
  60. package/dist/commonjs/index.js +1 -0
  61. package/dist/commonjs/index.js.map +1 -1
  62. package/dist/commonjs/interfaces.js +1 -0
  63. package/dist/commonjs/interfaces.js.map +1 -1
  64. package/dist/commonjs/log.js +1 -0
  65. package/dist/commonjs/log.js.map +1 -1
  66. package/dist/commonjs/logger/debug.js +1 -0
  67. package/dist/commonjs/logger/debug.js.map +1 -1
  68. package/dist/commonjs/logger/internal.js +1 -0
  69. package/dist/commonjs/logger/internal.js.map +1 -1
  70. package/dist/commonjs/logger/log.common.js +1 -0
  71. package/dist/commonjs/logger/log.common.js.map +1 -1
  72. package/dist/commonjs/logger/log.js +1 -0
  73. package/dist/commonjs/logger/log.js.map +1 -1
  74. package/dist/commonjs/logger/logger.js +1 -0
  75. package/dist/commonjs/logger/logger.js.map +3 -3
  76. package/dist/commonjs/nodeHttpClient.js +1 -0
  77. package/dist/commonjs/nodeHttpClient.js.map +1 -1
  78. package/dist/commonjs/pipeline.js +1 -0
  79. package/dist/commonjs/pipeline.js.map +1 -1
  80. package/dist/commonjs/pipelineRequest.js +1 -0
  81. package/dist/commonjs/pipelineRequest.js.map +1 -1
  82. package/dist/commonjs/policies/agentPolicy.js +1 -0
  83. package/dist/commonjs/policies/agentPolicy.js.map +1 -1
  84. package/dist/commonjs/policies/auth/apiKeyAuthenticationPolicy.js +1 -0
  85. package/dist/commonjs/policies/auth/apiKeyAuthenticationPolicy.js.map +1 -1
  86. package/dist/commonjs/policies/auth/basicAuthenticationPolicy.js +1 -0
  87. package/dist/commonjs/policies/auth/basicAuthenticationPolicy.js.map +1 -1
  88. package/dist/commonjs/policies/auth/bearerAuthenticationPolicy.js +1 -0
  89. package/dist/commonjs/policies/auth/bearerAuthenticationPolicy.js.map +1 -1
  90. package/dist/commonjs/policies/auth/checkInsecureConnection.js +1 -0
  91. package/dist/commonjs/policies/auth/checkInsecureConnection.js.map +1 -1
  92. package/dist/commonjs/policies/auth/oauth2AuthenticationPolicy.js +1 -0
  93. package/dist/commonjs/policies/auth/oauth2AuthenticationPolicy.js.map +1 -1
  94. package/dist/commonjs/policies/decompressResponsePolicy.js +1 -0
  95. package/dist/commonjs/policies/decompressResponsePolicy.js.map +1 -1
  96. package/dist/commonjs/policies/defaultRetryPolicy.js +1 -0
  97. package/dist/commonjs/policies/defaultRetryPolicy.js.map +1 -1
  98. package/dist/commonjs/policies/exponentialRetryPolicy.js +1 -0
  99. package/dist/commonjs/policies/exponentialRetryPolicy.js.map +1 -1
  100. package/dist/commonjs/policies/formDataPolicy.js +1 -0
  101. package/dist/commonjs/policies/formDataPolicy.js.map +1 -1
  102. package/dist/commonjs/policies/internal.js +1 -0
  103. package/dist/commonjs/policies/internal.js.map +1 -1
  104. package/dist/commonjs/policies/logPolicy.js +1 -0
  105. package/dist/commonjs/policies/logPolicy.js.map +1 -1
  106. package/dist/commonjs/policies/multipartPolicy.js +1 -0
  107. package/dist/commonjs/policies/multipartPolicy.js.map +1 -1
  108. package/dist/commonjs/policies/proxyPolicy.common.js +1 -0
  109. package/dist/commonjs/policies/proxyPolicy.common.js.map +1 -1
  110. package/dist/commonjs/policies/proxyPolicy.js +3 -3
  111. package/dist/commonjs/policies/proxyPolicy.js.map +3 -3
  112. package/dist/commonjs/policies/redirectPolicy.js +1 -0
  113. package/dist/commonjs/policies/redirectPolicy.js.map +1 -1
  114. package/dist/commonjs/policies/retryPolicy.js +5 -3
  115. package/dist/commonjs/policies/retryPolicy.js.map +3 -3
  116. package/dist/commonjs/policies/systemErrorRetryPolicy.js +1 -0
  117. package/dist/commonjs/policies/systemErrorRetryPolicy.js.map +1 -1
  118. package/dist/commonjs/policies/throttlingRetryPolicy.js +1 -0
  119. package/dist/commonjs/policies/throttlingRetryPolicy.js.map +1 -1
  120. package/dist/commonjs/policies/tlsPolicy.js +1 -0
  121. package/dist/commonjs/policies/tlsPolicy.js.map +1 -1
  122. package/dist/commonjs/policies/userAgentPolicy.js +1 -0
  123. package/dist/commonjs/policies/userAgentPolicy.js.map +1 -1
  124. package/dist/commonjs/restError.js +1 -0
  125. package/dist/commonjs/restError.js.map +1 -1
  126. package/dist/commonjs/retryStrategies/exponentialRetryStrategy.js +1 -0
  127. package/dist/commonjs/retryStrategies/exponentialRetryStrategy.js.map +1 -1
  128. package/dist/commonjs/retryStrategies/retryStrategy.js +1 -0
  129. package/dist/commonjs/retryStrategies/retryStrategy.js.map +1 -1
  130. package/dist/commonjs/retryStrategies/throttlingRetryStrategy.js +1 -0
  131. package/dist/commonjs/retryStrategies/throttlingRetryStrategy.js.map +1 -1
  132. package/dist/commonjs/tsdoc-metadata.json +1 -1
  133. package/dist/commonjs/util/arrayBuffer.js +1 -0
  134. package/dist/commonjs/util/arrayBuffer.js.map +1 -1
  135. package/dist/commonjs/util/bytesEncoding.common.js +1 -0
  136. package/dist/commonjs/util/bytesEncoding.common.js.map +1 -1
  137. package/dist/commonjs/util/bytesEncoding.js +1 -0
  138. package/dist/commonjs/util/bytesEncoding.js.map +1 -1
  139. package/dist/commonjs/util/checkEnvironment.js +1 -0
  140. package/dist/commonjs/util/checkEnvironment.js.map +1 -1
  141. package/dist/commonjs/util/concat.js +1 -0
  142. package/dist/commonjs/util/concat.js.map +1 -1
  143. package/dist/commonjs/util/delay.js +1 -0
  144. package/dist/commonjs/util/delay.js.map +1 -1
  145. package/dist/commonjs/util/error.js +1 -0
  146. package/dist/commonjs/util/error.js.map +1 -1
  147. package/dist/commonjs/util/helpers.js +1 -0
  148. package/dist/commonjs/util/helpers.js.map +1 -1
  149. package/dist/commonjs/util/inspect.common.js +1 -0
  150. package/dist/commonjs/util/inspect.common.js.map +1 -1
  151. package/dist/commonjs/util/inspect.js +1 -0
  152. package/dist/commonjs/util/inspect.js.map +1 -1
  153. package/dist/commonjs/util/internal.js +1 -0
  154. package/dist/commonjs/util/internal.js.map +1 -1
  155. package/dist/commonjs/util/object.js +1 -0
  156. package/dist/commonjs/util/object.js.map +1 -1
  157. package/dist/commonjs/util/random.js +1 -0
  158. package/dist/commonjs/util/random.js.map +1 -1
  159. package/dist/commonjs/util/sanitizer.js +4 -3
  160. package/dist/commonjs/util/sanitizer.js.map +3 -3
  161. package/dist/commonjs/util/sha256.common.js +1 -0
  162. package/dist/commonjs/util/sha256.common.js.map +1 -1
  163. package/dist/commonjs/util/sha256.js +1 -0
  164. package/dist/commonjs/util/sha256.js.map +1 -1
  165. package/dist/commonjs/util/typeGuards.js +3 -2
  166. package/dist/commonjs/util/typeGuards.js.map +3 -3
  167. package/dist/commonjs/util/userAgent.js +1 -0
  168. package/dist/commonjs/util/userAgent.js.map +1 -1
  169. package/dist/commonjs/util/userAgentPlatform.d.ts +8 -0
  170. package/dist/commonjs/util/userAgentPlatform.js +7 -7
  171. package/dist/commonjs/util/userAgentPlatform.js.map +3 -3
  172. package/dist/commonjs/util/uuidUtils.common.js +2 -1
  173. package/dist/commonjs/util/uuidUtils.common.js.map +3 -3
  174. package/dist/commonjs/util/uuidUtils.js +1 -0
  175. package/dist/commonjs/util/uuidUtils.js.map +1 -1
  176. package/dist/commonjs/xhrHttpClient.js +1 -0
  177. package/dist/commonjs/xhrHttpClient.js.map +1 -1
  178. package/dist/esm/client/multipart.js.map +1 -1
  179. package/dist/esm/client/sendRequest.js +12 -4
  180. package/dist/esm/client/sendRequest.js.map +1 -1
  181. package/dist/esm/client/urlHelpers.js +9 -3
  182. package/dist/esm/client/urlHelpers.js.map +1 -1
  183. package/dist/esm/fetchHttpClient.d.ts +5 -0
  184. package/dist/esm/fetchHttpClient.js.map +1 -1
  185. package/dist/esm/logger/logger.js.map +1 -1
  186. package/dist/esm/policies/proxyPolicy.js +2 -3
  187. package/dist/esm/policies/proxyPolicy.js.map +1 -1
  188. package/dist/esm/policies/retryPolicy.js +4 -3
  189. package/dist/esm/policies/retryPolicy.js.map +1 -1
  190. package/dist/esm/util/sanitizer.js +3 -3
  191. package/dist/esm/util/sanitizer.js.map +1 -1
  192. package/dist/esm/util/typeGuards.js +2 -2
  193. package/dist/esm/util/typeGuards.js.map +1 -1
  194. package/dist/esm/util/userAgentPlatform.d.ts +8 -0
  195. package/dist/esm/util/userAgentPlatform.js +6 -7
  196. package/dist/esm/util/userAgentPlatform.js.map +1 -1
  197. package/dist/esm/util/uuidUtils.common.js +1 -1
  198. package/dist/esm/util/uuidUtils.common.js.map +1 -1
  199. package/dist/react-native/client/multipart.js.map +1 -1
  200. package/dist/react-native/client/sendRequest.js +12 -4
  201. package/dist/react-native/client/sendRequest.js.map +1 -1
  202. package/dist/react-native/client/urlHelpers.js +9 -3
  203. package/dist/react-native/client/urlHelpers.js.map +1 -1
  204. package/dist/react-native/fetchHttpClient.d.ts +5 -0
  205. package/dist/react-native/fetchHttpClient.js.map +1 -1
  206. package/dist/react-native/logger/logger.js.map +1 -1
  207. package/dist/react-native/policies/retryPolicy.js +4 -3
  208. package/dist/react-native/policies/retryPolicy.js.map +1 -1
  209. package/dist/react-native/util/concat.d.ts +34 -1
  210. package/dist/react-native/util/concat.js +48 -1
  211. package/dist/react-native/util/concat.js.map +1 -1
  212. package/dist/react-native/util/sanitizer.js +3 -3
  213. package/dist/react-native/util/sanitizer.js.map +1 -1
  214. package/dist/react-native/util/typeGuards.js +2 -2
  215. package/dist/react-native/util/typeGuards.js.map +1 -1
  216. package/dist/react-native/util/uuidUtils.common.js +1 -1
  217. package/dist/react-native/util/uuidUtils.common.js.map +1 -1
  218. package/package.json +10 -8
  219. package/dist/browser/util/concat.common.d.ts +0 -17
  220. package/dist/browser/util/concat.common.js +0 -58
  221. package/dist/browser/util/concat.common.js.map +0 -1
  222. package/dist/commonjs/util/concat.common.d.ts +0 -17
  223. package/dist/commonjs/util/concat.common.js +0 -60
  224. package/dist/commonjs/util/concat.common.js.map +0 -7
  225. package/dist/esm/util/concat.common.d.ts +0 -17
  226. package/dist/esm/util/concat.common.js +0 -58
  227. package/dist/esm/util/concat.common.js.map +0 -1
  228. package/dist/react-native/util/concat.common.d.ts +0 -17
  229. package/dist/react-native/util/concat.common.js +0 -58
  230. package/dist/react-native/util/concat.common.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/client/sendRequest.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n HttpClient,\n HttpMethods,\n MultipartRequestBody,\n PipelineRequest,\n PipelineResponse,\n RequestBodyType,\n} from \"../interfaces.js\";\nimport { isRestError, RestError } from \"../restError.js\";\nimport type { Pipeline } from \"../pipeline.js\";\nimport { createHttpHeaders } from \"../httpHeaders.js\";\nimport { createPipelineRequest } from \"../pipelineRequest.js\";\nimport { getCachedDefaultHttpsClient } from \"./clientHelpers.js\";\nimport { isBlob, isReadableStream } from \"../util/typeGuards.js\";\nimport type { HttpResponse, RequestParameters } from \"./common.js\";\nimport type { PartDescriptor } from \"./multipart.js\";\nimport { buildMultipartBody } from \"./multipart.js\";\n\n/**\n * Helper function to send request used by the client\n * @param method - method to use to send the request\n * @param url - url to send the request to\n * @param pipeline - pipeline with the policies to run when sending the request\n * @param options - request options\n * @param customHttpClient - a custom HttpClient to use when making the request\n * @returns returns and HttpResponse\n */\nexport async function sendRequest(\n method: HttpMethods,\n url: string,\n pipeline: Pipeline,\n options: InternalRequestParameters = {},\n customHttpClient?: HttpClient,\n): Promise<HttpResponse> {\n const httpClient = customHttpClient ?? getCachedDefaultHttpsClient();\n const request = buildPipelineRequest(method, url, options);\n\n try {\n const response = await pipeline.sendRequest(httpClient, request);\n const headers = response.headers.toJSON();\n const stream = response.readableStreamBody ?? response.browserStreamBody;\n const parsedBody =\n options.responseAsStream || stream !== undefined ? undefined : getResponseBody(response);\n const body = stream ?? parsedBody;\n\n if (options?.onResponse) {\n options.onResponse({ ...response, request, rawHeaders: headers, parsedBody });\n }\n\n return {\n request,\n headers,\n status: `${response.status}`,\n body,\n };\n } catch (e: unknown) {\n if (isRestError(e) && e.response && options.onResponse) {\n const { response } = e;\n const rawHeaders = response.headers.toJSON();\n // UNBRANDED DIFFERENCE: onResponse callback does not have a second __legacyError property\n options?.onResponse({ ...response, request, rawHeaders }, e);\n }\n\n throw e;\n }\n}\n\n/**\n * Function to determine the request content type\n * @param options - request options InternalRequestParameters\n * @returns returns the content-type\n */\nfunction getRequestContentType(options: InternalRequestParameters = {}): string | undefined {\n return (\n options.contentType ??\n (options.headers?.[\"content-type\"] as string) ??\n getContentType(options.body)\n );\n}\n\n/**\n * Function to determine the content-type of a body\n * this is used if an explicit content-type is not provided\n * @param body - body in the request\n * @returns returns the content-type\n */\nfunction getContentType(body: any): string | undefined {\n if (body === undefined) {\n return undefined;\n }\n\n if (ArrayBuffer.isView(body)) {\n return \"application/octet-stream\";\n }\n\n if (isBlob(body) && body.type) {\n return body.type;\n }\n\n if (typeof body === \"string\") {\n try {\n JSON.parse(body);\n return \"application/json\";\n } catch (error: any) {\n // If we fail to parse the body, it is not json\n return undefined;\n }\n }\n // By default return json\n return \"application/json\";\n}\n\nexport interface InternalRequestParameters extends RequestParameters {\n responseAsStream?: boolean;\n}\n\nfunction buildPipelineRequest(\n method: HttpMethods,\n url: string,\n options: InternalRequestParameters = {},\n): PipelineRequest {\n const requestContentType = getRequestContentType(options);\n const { body, multipartBody } = getRequestBody(options.body, requestContentType);\n\n const headers = createHttpHeaders({\n ...(options.headers ? options.headers : {}),\n accept: options.accept ?? options.headers?.accept ?? \"application/json\",\n ...(requestContentType && {\n \"content-type\": requestContentType,\n }),\n });\n\n return createPipelineRequest({\n url,\n method,\n body,\n multipartBody,\n headers,\n allowInsecureConnection: options.allowInsecureConnection,\n abortSignal: options.abortSignal,\n onUploadProgress: options.onUploadProgress,\n onDownloadProgress: options.onDownloadProgress,\n timeout: options.timeout,\n enableBrowserStreams: true,\n streamResponseStatusCodes: options.responseAsStream\n ? new Set([Number.POSITIVE_INFINITY])\n : undefined,\n });\n}\n\ninterface RequestBody {\n body?: RequestBodyType;\n multipartBody?: MultipartRequestBody;\n}\n\n/**\n * Prepares the body before sending the request\n */\nexport function getRequestBody(body?: unknown, contentType: string = \"\"): RequestBody {\n if (body === undefined) {\n return { body: undefined };\n }\n\n if (typeof FormData !== \"undefined\" && body instanceof FormData) {\n return { body };\n }\n\n if (isBlob(body)) {\n return { body };\n }\n\n if (isReadableStream(body) || typeof body === \"function\") {\n return { body } as RequestBody;\n }\n\n if (ArrayBuffer.isView(body)) {\n return { body: body instanceof Uint8Array ? body : JSON.stringify(body) };\n }\n\n const firstType = contentType.split(\";\")[0];\n\n switch (firstType) {\n case \"application/json\":\n return { body: JSON.stringify(body) };\n case \"multipart/form-data\":\n if (Array.isArray(body)) {\n return { multipartBody: buildMultipartBody(body as PartDescriptor[]) };\n }\n return { body: JSON.stringify(body) };\n case \"text/plain\":\n return { body: String(body) };\n default:\n if (typeof body === \"string\") {\n return { body };\n }\n return { body: JSON.stringify(body) };\n }\n}\n\n/**\n * Prepares the response body\n */\nfunction getResponseBody(response: PipelineResponse): RequestBodyType | undefined {\n // Set the default response type\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const firstType = contentType.split(\";\")[0];\n const bodyToParse = response.bodyAsText ?? \"\";\n\n if (firstType === \"text/plain\") {\n return String(bodyToParse);\n }\n // Default to \"application/json\" and fallback to string;\n try {\n return bodyToParse ? JSON.parse(bodyToParse) : undefined;\n } catch (error: any) {\n // If we were supposed to get a JSON object and failed to\n // parse, throw a parse error\n if (firstType === \"application/json\") {\n throw createParseError(response, error);\n }\n\n // We are not sure how to handle the response so we return it as\n // plain text.\n return String(bodyToParse);\n }\n}\n\nfunction createParseError(response: PipelineResponse, err: any): RestError {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${response.bodyAsText}.`;\n const errCode = err.code ?? RestError.PARSE_ERROR;\n return new RestError(msg, {\n code: errCode,\n statusCode: response.status,\n request: response.request,\n response: response,\n });\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src/client/sendRequest.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n HttpClient,\n HttpMethods,\n MultipartRequestBody,\n PipelineRequest,\n PipelineResponse,\n RequestBodyType,\n} from \"../interfaces.js\";\nimport { isRestError, RestError } from \"../restError.js\";\nimport type { Pipeline } from \"../pipeline.js\";\nimport { createHttpHeaders } from \"../httpHeaders.js\";\nimport { createPipelineRequest } from \"../pipelineRequest.js\";\nimport { getCachedDefaultHttpsClient } from \"./clientHelpers.js\";\nimport { isBlob, isReadableStream } from \"../util/typeGuards.js\";\nimport type { HttpResponse, RequestParameters } from \"./common.js\";\nimport type { PartDescriptor } from \"./multipart.js\";\nimport { buildMultipartBody } from \"./multipart.js\";\n\n/**\n * Helper function to send request used by the client\n * @param method - method to use to send the request\n * @param url - url to send the request to\n * @param pipeline - pipeline with the policies to run when sending the request\n * @param options - request options\n * @param customHttpClient - a custom HttpClient to use when making the request\n * @returns returns and HttpResponse\n */\nexport async function sendRequest(\n method: HttpMethods,\n url: string,\n pipeline: Pipeline,\n options: InternalRequestParameters = {},\n customHttpClient?: HttpClient,\n): Promise<HttpResponse> {\n const httpClient = customHttpClient ?? getCachedDefaultHttpsClient();\n const request = buildPipelineRequest(method, url, options);\n\n try {\n const response = await pipeline.sendRequest(httpClient, request);\n const headers = response.headers.toJSON();\n const stream = response.readableStreamBody ?? response.browserStreamBody;\n const parsedBody =\n options.responseAsStream || stream !== undefined ? undefined : getResponseBody(response);\n const body = stream ?? parsedBody;\n\n if (options?.onResponse) {\n options.onResponse({ ...response, request, rawHeaders: headers, parsedBody });\n }\n\n return {\n request,\n headers,\n status: `${response.status}`,\n body,\n };\n } catch (e: unknown) {\n if (isRestError(e) && e.response && options.onResponse) {\n const { response } = e;\n const rawHeaders = response.headers.toJSON();\n // UNBRANDED DIFFERENCE: onResponse callback does not have a second __legacyError property\n options?.onResponse({ ...response, request, rawHeaders }, e);\n }\n\n throw e;\n }\n}\n\n/**\n * Function to determine the request content type\n * @param options - request options InternalRequestParameters\n * @returns returns the content-type\n */\nfunction getRequestContentType(options: InternalRequestParameters = {}): string | undefined {\n if (options.contentType) {\n return options.contentType;\n }\n const headerContentType = options.headers?.[\"content-type\"];\n if (typeof headerContentType === \"string\") {\n return headerContentType;\n }\n return getContentType(options.body);\n}\n\n/**\n * Function to determine the content-type of a body\n * this is used if an explicit content-type is not provided\n * @param body - body in the request\n * @returns returns the content-type\n */\nfunction getContentType(body: any): string | undefined {\n if (body === undefined) {\n return undefined;\n }\n\n if (ArrayBuffer.isView(body)) {\n return \"application/octet-stream\";\n }\n\n if (isBlob(body) && body.type) {\n return body.type;\n }\n\n if (typeof body === \"string\") {\n try {\n JSON.parse(body);\n return \"application/json\";\n } catch (error: any) {\n // If we fail to parse the body, it is not json\n return undefined;\n }\n }\n // By default return json\n return \"application/json\";\n}\n\nexport interface InternalRequestParameters extends RequestParameters {\n responseAsStream?: boolean;\n}\n\nfunction buildPipelineRequest(\n method: HttpMethods,\n url: string,\n options: InternalRequestParameters = {},\n): PipelineRequest {\n const requestContentType = getRequestContentType(options);\n const { body, multipartBody } = getRequestBody(options.body, requestContentType);\n\n const headers = createHttpHeaders({\n ...(options.headers ? options.headers : {}),\n accept: options.accept ?? options.headers?.accept ?? \"application/json\",\n ...(requestContentType && {\n \"content-type\": requestContentType,\n }),\n });\n\n return createPipelineRequest({\n url,\n method,\n body,\n multipartBody,\n headers,\n allowInsecureConnection: options.allowInsecureConnection,\n abortSignal: options.abortSignal,\n onUploadProgress: options.onUploadProgress,\n onDownloadProgress: options.onDownloadProgress,\n timeout: options.timeout,\n enableBrowserStreams: true,\n streamResponseStatusCodes: options.responseAsStream\n ? new Set([Number.POSITIVE_INFINITY])\n : undefined,\n });\n}\n\ninterface RequestBody {\n body?: RequestBodyType;\n multipartBody?: MultipartRequestBody;\n}\n\n/**\n * Prepares the body before sending the request\n */\nexport function getRequestBody(body?: unknown, contentType: string = \"\"): RequestBody {\n if (body === undefined) {\n return { body: undefined };\n }\n\n if (typeof FormData !== \"undefined\" && body instanceof FormData) {\n return { body };\n }\n\n if (isBlob(body)) {\n return { body };\n }\n\n if (isReadableStream(body)) {\n return { body };\n }\n\n if (typeof body === \"function\") {\n return { body: body as RequestBodyType };\n }\n\n if (ArrayBuffer.isView(body)) {\n return { body: body instanceof Uint8Array ? body : JSON.stringify(body) };\n }\n\n const firstType = contentType.split(\";\")[0];\n\n switch (firstType) {\n case \"application/json\":\n return { body: JSON.stringify(body) };\n case \"multipart/form-data\":\n if (Array.isArray(body)) {\n return { multipartBody: buildMultipartBody(body as PartDescriptor[]) };\n }\n return { body: JSON.stringify(body) };\n case \"text/plain\":\n return { body: String(body) };\n default:\n if (typeof body === \"string\") {\n return { body };\n }\n return { body: JSON.stringify(body) };\n }\n}\n\n/**\n * Prepares the response body\n */\nfunction getResponseBody(response: PipelineResponse): RequestBodyType | undefined {\n // Set the default response type\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const firstType = contentType.split(\";\")[0];\n const bodyToParse = response.bodyAsText ?? \"\";\n\n if (firstType === \"text/plain\") {\n return String(bodyToParse);\n }\n // Default to \"application/json\" and fallback to string;\n try {\n return bodyToParse ? JSON.parse(bodyToParse) : undefined;\n } catch (error: any) {\n // If we were supposed to get a JSON object and failed to\n // parse, throw a parse error\n if (firstType === \"application/json\") {\n throw createParseError(response, error);\n }\n\n // We are not sure how to handle the response so we return it as\n // plain text.\n return String(bodyToParse);\n }\n}\n\nfunction createParseError(response: PipelineResponse, err: any): RestError {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${response.bodyAsText}.`;\n const errCode = err.code ?? RestError.PARSE_ERROR;\n return new RestError(msg, {\n code: errCode,\n statusCode: response.status,\n request: response.request,\n response: response,\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -24,8 +24,11 @@ __export(urlHelpers_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(urlHelpers_exports);
26
26
  function isQueryParameterWithOptions(x) {
27
+ if (typeof x !== "object" || x === null || !Object.hasOwn(x, "value")) {
28
+ return false;
29
+ }
27
30
  const value = x.value;
28
- return value !== void 0 && value.toString !== void 0 && typeof value.toString === "function";
31
+ return typeof value?.toString === "function";
29
32
  }
30
33
  function buildRequestUrl(endpoint, routePath, pathParameters, options = {}) {
31
34
  if (routePath.startsWith("https://") || routePath.startsWith("http://")) {
@@ -43,7 +46,7 @@ function appendPath(endpoint, pathToAppend) {
43
46
  const endpointParts = endpointSearchStart !== -1 ? [endpoint.substring(0, endpointSearchStart), endpoint.substring(endpointSearchStart + 1)] : [endpoint, ""];
44
47
  const pathParts = pathSearchStart !== -1 ? [pathToAppend.substring(0, pathSearchStart), pathToAppend.substring(pathSearchStart + 1)] : [pathToAppend, ""];
45
48
  const combinedSearch = [endpointParts[1], pathParts[1].replaceAll("?", "&")].filter(Boolean).join("&");
46
- const baseEndpoint = endpointParts[0];
49
+ const baseEndpoint = endpointParts[0].replace(/(^[^:]+:\/\/[^/]+)\/\/+/, "$1/");
47
50
  const basePathToAppend = pathParts[0];
48
51
  let combinedUrl = baseEndpoint;
49
52
  if (!baseEndpoint.endsWith("/") && !basePathToAppend.startsWith("/") && basePathToAppend !== "") {
@@ -135,7 +138,7 @@ function appendQueryParams(url, options = {}) {
135
138
  getQueryParamValue(key, options.skipUrlEncoding ?? false, style, item)
136
139
  );
137
140
  }
138
- } else if (typeof rawValue === "object") {
141
+ } else if (rawValue !== null && typeof rawValue === "object") {
139
142
  for (const [actualKey, value] of Object.entries(rawValue)) {
140
143
  newParamStrings.push(
141
144
  getQueryParamValue(actualKey, options.skipUrlEncoding ?? false, style, value)
@@ -221,3 +224,4 @@ function replaceAll(value, searchValue, replaceValue) {
221
224
  buildRequestUrl,
222
225
  replaceAll
223
226
  });
227
+ //# sourceMappingURL=urlHelpers.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/client/urlHelpers.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { PathParameterWithOptions, RequestParameters } from \"./common.js\";\n\ntype QueryParameterStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\n\n/**\n * An object that can be passed as a query parameter, allowing for additional options to be set relating to how the parameter is encoded.\n */\ninterface QueryParameterWithOptions {\n /**\n * The value of the query parameter.\n */\n value: unknown;\n\n /**\n * If set to true, value must be an array. Setting this option to true will cause the array to be encoded as multiple query parameters.\n * Setting it to false will cause the array values to be encoded as a single query parameter, with each value separated by a comma ','.\n *\n * For example, with `explode` set to true, a query parameter named \"foo\" with value [\"a\", \"b\", \"c\"] will be encoded as foo=a&foo=b&foo=c.\n * If `explode` was set to false, the same example would instead be encouded as foo=a,b,c.\n *\n * Defaults to false.\n */\n explode?: boolean;\n\n /**\n * Style for encoding arrays. Three possible values:\n * - \"form\": array values will be separated by a comma \",\" in the query parameter value.\n * - \"spaceDelimited\": array values will be separated by a space (\" \", url-encoded to \"%20\").\n * - \"pipeDelimited\": array values will be separated by a pipe (\"|\").\n *\n * Defaults to \"form\".\n */\n style?: QueryParameterStyle;\n}\n\nfunction isQueryParameterWithOptions(x: unknown): x is QueryParameterWithOptions {\n const value = (x as QueryParameterWithOptions).value as any;\n return (\n value !== undefined && value.toString !== undefined && typeof value.toString === \"function\"\n );\n}\n\n/**\n * Builds the request url, filling in query and path parameters\n * @param endpoint - base url which can be a template url\n * @param routePath - path to append to the endpoint\n * @param pathParameters - values of the path parameters\n * @param options - request parameters including query parameters\n * @returns a full url with path and query parameters\n */\nexport function buildRequestUrl(\n endpoint: string,\n routePath: string,\n pathParameters: (string | number | PathParameterWithOptions)[],\n options: RequestParameters = {},\n): string {\n if (routePath.startsWith(\"https://\") || routePath.startsWith(\"http://\")) {\n return routePath;\n }\n endpoint = buildBaseUrl(endpoint, options);\n // the route could be\n // 1. a path: \"container123/blob456\"\n // 2. a component string from template which starts with \"?\" and may contain more \"?\" after template is expanded,\n // e.g., \"?restype=container&comp=blobs?where=key177196556777405927%3D%27val1177196556777407626%27\"\n const updatedRoutePath = buildRoutePath(routePath, pathParameters, options);\n\n const requestUrl = appendQueryParams(appendPath(endpoint, updatedRoutePath), options);\n const url = new URL(requestUrl);\n\n return url.toString();\n}\n\nfunction appendPath(endpoint: string, pathToAppend: string): string {\n const endpointSearchStart = endpoint.indexOf(\"?\");\n const pathSearchStart = pathToAppend.indexOf(\"?\");\n const endpointParts =\n endpointSearchStart !== -1\n ? [endpoint.substring(0, endpointSearchStart), endpoint.substring(endpointSearchStart + 1)]\n : [endpoint, \"\"];\n const pathParts =\n pathSearchStart !== -1\n ? [pathToAppend.substring(0, pathSearchStart), pathToAppend.substring(pathSearchStart + 1)]\n : [pathToAppend, \"\"];\n\n const combinedSearch = [endpointParts[1], pathParts[1].replaceAll(\"?\", \"&\")]\n .filter(Boolean)\n .join(\"&\");\n const baseEndpoint = endpointParts[0];\n const basePathToAppend = pathParts[0];\n\n let combinedUrl = baseEndpoint;\n if (!baseEndpoint.endsWith(\"/\") && !basePathToAppend.startsWith(\"/\") && basePathToAppend !== \"\") {\n combinedUrl += `/${basePathToAppend}`;\n } else if (baseEndpoint.endsWith(\"/\") && basePathToAppend.startsWith(\"/\")) {\n combinedUrl += basePathToAppend.substring(1);\n } else {\n combinedUrl += basePathToAppend;\n }\n\n if (combinedSearch) {\n combinedUrl += `?${combinedSearch}`;\n }\n\n return combinedUrl;\n}\n\nfunction getQueryParamValue(\n key: string,\n allowReserved: boolean,\n style: QueryParameterStyle,\n param: any,\n): string {\n let separator: string;\n if (style === \"pipeDelimited\") {\n separator = \"|\";\n } else if (style === \"spaceDelimited\") {\n separator = \"%20\";\n } else {\n separator = \",\";\n }\n\n let paramValues: any[];\n if (Array.isArray(param)) {\n paramValues = param;\n } else if (typeof param === \"object\" && param.toString === Object.prototype.toString) {\n // If the parameter is an object without a custom toString implementation (e.g. a Date),\n // then we should deconstruct the object into an array [key1, value1, key2, value2, ...].\n paramValues = Object.entries(param).flat();\n } else {\n paramValues = [param];\n }\n\n const value = paramValues\n .map((p) => {\n if (p === null || p === undefined) {\n return \"\";\n }\n\n if (!p.toString || typeof p.toString !== \"function\") {\n throw new Error(`Query parameters must be able to be represented as string, ${key} can't`);\n }\n\n const rawValue = p.toISOString !== undefined ? p.toISOString() : p.toString();\n return allowReserved ? rawValue : encodeURIComponent(rawValue);\n })\n .join(separator);\n\n return `${allowReserved ? key : encodeURIComponent(key)}=${value}`;\n}\n\n/**\n * Parses a query string into a map of key/value pairs without decoding the values.\n * This avoids the issue where `URL.searchParams` would decode values, potentially\n * corrupting already-encoded values such as SAS signatures.\n */\nfunction simpleParseQueryParams(queryString: string): Map<string, string | string[]> {\n const result = new Map<string, string | string[]>();\n if (!queryString || queryString[0] !== \"?\") {\n return result;\n }\n\n // remove the leading ?\n queryString = queryString.slice(1);\n const pairs = queryString.split(\"&\");\n\n for (const pair of pairs) {\n const eqIndex = pair.indexOf(\"=\");\n const name = eqIndex === -1 ? pair : pair.substring(0, eqIndex);\n const value = eqIndex === -1 ? \"\" : pair.substring(eqIndex + 1);\n\n const existingValue = result.get(name);\n if (existingValue !== undefined) {\n if (Array.isArray(existingValue)) {\n existingValue.push(value);\n } else {\n result.set(name, [existingValue, value]);\n }\n } else {\n result.set(name, value);\n }\n }\n\n return result;\n}\n\n/** @internal */\nexport function appendQueryParams(url: string, options: RequestParameters = {}): string {\n if (!options.queryParameters) {\n return url;\n }\n const parsedUrl = new URL(url);\n const queryParams = options.queryParameters;\n\n // Parse existing query params from the URL manually to avoid re-encoding issues\n const existingParams = simpleParseQueryParams(parsedUrl.search);\n\n const newParamStrings: string[] = [];\n for (const key of Object.keys(queryParams)) {\n const param = queryParams[key] as any;\n if (param === undefined || param === null) {\n continue;\n }\n\n const hasMetadata = isQueryParameterWithOptions(param);\n const rawValue = hasMetadata ? param.value : param;\n const explode = hasMetadata ? (param.explode ?? false) : false;\n const style = hasMetadata && param.style ? param.style : \"form\";\n\n if (explode) {\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n newParamStrings.push(\n getQueryParamValue(key, options.skipUrlEncoding ?? false, style, item),\n );\n }\n } else if (typeof rawValue === \"object\") {\n // For object explode, the name of the query parameter is ignored and we use the object key instead\n for (const [actualKey, value] of Object.entries(rawValue)) {\n newParamStrings.push(\n getQueryParamValue(actualKey, options.skipUrlEncoding ?? false, style, value),\n );\n }\n } else {\n // Explode doesn't really make sense for primitives\n throw new Error(\"explode can only be set to true for objects and arrays\");\n }\n } else {\n newParamStrings.push(\n getQueryParamValue(key, options.skipUrlEncoding ?? false, style, rawValue),\n );\n }\n }\n\n // Merge new params into existing params, deduplicating values for the same key\n for (const paramString of newParamStrings) {\n const eqIndex = paramString.indexOf(\"=\");\n const name = paramString.substring(0, eqIndex);\n const value = paramString.substring(eqIndex + 1);\n\n const existingValue = existingParams.get(name);\n if (existingValue !== undefined) {\n if (Array.isArray(existingValue)) {\n if (!existingValue.includes(value)) {\n existingValue.push(value);\n }\n } else if (existingValue !== value) {\n existingParams.set(name, [existingValue, value]);\n }\n // if existingValue === value (single string match), no change needed\n } else {\n existingParams.set(name, value);\n }\n }\n\n // Reconstruct the search string manually to avoid URL re-encoding\n const searchPieces: string[] = [];\n for (const [name, value] of existingParams) {\n if (Array.isArray(value)) {\n for (const subValue of value) {\n searchPieces.push(`${name}=${subValue}`);\n }\n } else {\n searchPieces.push(`${name}=${value}`);\n }\n }\n\n parsedUrl.search = searchPieces.length ? `?${searchPieces.join(\"&\")}` : \"\";\n return parsedUrl.toString();\n}\n\nexport function buildBaseUrl(endpoint: string, options: RequestParameters): string {\n if (!options.pathParameters) {\n return endpoint;\n }\n const pathParams = options.pathParameters;\n for (const [key, param] of Object.entries(pathParams)) {\n if (param === undefined || param === null) {\n throw new Error(`Path parameters ${key} must not be undefined or null`);\n }\n if (!param.toString || typeof param.toString !== \"function\") {\n throw new Error(`Path parameters must be able to be represented as string, ${key} can't`);\n }\n let value = param.toISOString !== undefined ? param.toISOString() : String(param);\n if (!options.skipUrlEncoding) {\n value = encodeURIComponent(param);\n }\n endpoint = replaceAll(endpoint, `{${key}}`, value) ?? \"\";\n }\n return endpoint;\n}\n\nfunction buildRoutePath(\n routePath: string,\n pathParameters: (string | number | PathParameterWithOptions)[],\n options: RequestParameters = {},\n): string {\n for (const pathParam of pathParameters) {\n const allowReserved = typeof pathParam === \"object\" && (pathParam.allowReserved ?? false);\n let value = typeof pathParam === \"object\" ? pathParam.value : pathParam;\n\n if (!options.skipUrlEncoding && !allowReserved) {\n value = encodeURIComponent(value);\n }\n\n routePath = routePath.replace(/\\{[\\w-]+\\}/, String(value));\n }\n return routePath;\n}\n\n/**\n * Replace all of the instances of searchValue in value with the provided replaceValue.\n * @param value - The value to search and replace in.\n * @param searchValue - The value to search for in the value argument.\n * @param replaceValue - The value to replace searchValue with in the value argument.\n * @returns The value where each instance of searchValue was replaced with replacedValue.\n */\nexport function replaceAll(\n value: string | undefined,\n searchValue: string,\n replaceValue: string,\n): string | undefined {\n return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || \"\");\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src/client/urlHelpers.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { PathParameterWithOptions, RequestParameters } from \"./common.js\";\n\ntype QueryParameterStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\n\n/**\n * An object that can be passed as a query parameter, allowing for additional options to be set relating to how the parameter is encoded.\n */\ninterface QueryParameterWithOptions {\n /**\n * The value of the query parameter.\n */\n value: unknown;\n\n /**\n * If set to true, value must be an array. Setting this option to true will cause the array to be encoded as multiple query parameters.\n * Setting it to false will cause the array values to be encoded as a single query parameter, with each value separated by a comma ','.\n *\n * For example, with `explode` set to true, a query parameter named \"foo\" with value [\"a\", \"b\", \"c\"] will be encoded as foo=a&foo=b&foo=c.\n * If `explode` was set to false, the same example would instead be encouded as foo=a,b,c.\n *\n * Defaults to false.\n */\n explode?: boolean;\n\n /**\n * Style for encoding arrays. Three possible values:\n * - \"form\": array values will be separated by a comma \",\" in the query parameter value.\n * - \"spaceDelimited\": array values will be separated by a space (\" \", url-encoded to \"%20\").\n * - \"pipeDelimited\": array values will be separated by a pipe (\"|\").\n *\n * Defaults to \"form\".\n */\n style?: QueryParameterStyle;\n}\n\nfunction isQueryParameterWithOptions(x: unknown): x is QueryParameterWithOptions {\n if (typeof x !== \"object\" || x === null || !Object.hasOwn(x, \"value\")) {\n return false;\n }\n const value = (x as QueryParameterWithOptions).value;\n return typeof value?.toString === \"function\";\n}\n\n/**\n * Builds the request url, filling in query and path parameters\n * @param endpoint - base url which can be a template url\n * @param routePath - path to append to the endpoint\n * @param pathParameters - values of the path parameters\n * @param options - request parameters including query parameters\n * @returns a full url with path and query parameters\n */\nexport function buildRequestUrl(\n endpoint: string,\n routePath: string,\n pathParameters: (string | number | PathParameterWithOptions)[],\n options: RequestParameters = {},\n): string {\n if (routePath.startsWith(\"https://\") || routePath.startsWith(\"http://\")) {\n return routePath;\n }\n endpoint = buildBaseUrl(endpoint, options);\n // the route could be\n // 1. a path: \"container123/blob456\"\n // 2. a component string from template which starts with \"?\" and may contain more \"?\" after template is expanded,\n // e.g., \"?restype=container&comp=blobs?where=key177196556777405927%3D%27val1177196556777407626%27\"\n const updatedRoutePath = buildRoutePath(routePath, pathParameters, options);\n\n const requestUrl = appendQueryParams(appendPath(endpoint, updatedRoutePath), options);\n const url = new URL(requestUrl);\n\n return url.toString();\n}\n\nfunction appendPath(endpoint: string, pathToAppend: string): string {\n const endpointSearchStart = endpoint.indexOf(\"?\");\n const pathSearchStart = pathToAppend.indexOf(\"?\");\n const endpointParts =\n endpointSearchStart !== -1\n ? [endpoint.substring(0, endpointSearchStart), endpoint.substring(endpointSearchStart + 1)]\n : [endpoint, \"\"];\n const pathParts =\n pathSearchStart !== -1\n ? [pathToAppend.substring(0, pathSearchStart), pathToAppend.substring(pathSearchStart + 1)]\n : [pathToAppend, \"\"];\n\n const combinedSearch = [endpointParts[1], pathParts[1].replaceAll(\"?\", \"&\")]\n .filter(Boolean)\n .join(\"&\");\n // Replace consecutive forward slashes with a single forward slash, but only for the part right after the host in the endpoint.\n // This is to maintain compatibility with old behavior for cases where the endpoint has been provided with extra forward slashes,\n // while still allowing for intentional consecutive forward slashes in the path to be preserved.\n const baseEndpoint = endpointParts[0].replace(/(^[^:]+:\\/\\/[^/]+)\\/\\/+/, \"$1/\");\n const basePathToAppend = pathParts[0];\n let combinedUrl = baseEndpoint;\n if (!baseEndpoint.endsWith(\"/\") && !basePathToAppend.startsWith(\"/\") && basePathToAppend !== \"\") {\n combinedUrl += `/${basePathToAppend}`;\n } else if (baseEndpoint.endsWith(\"/\") && basePathToAppend.startsWith(\"/\")) {\n combinedUrl += basePathToAppend.substring(1);\n } else {\n combinedUrl += basePathToAppend;\n }\n\n if (combinedSearch) {\n combinedUrl += `?${combinedSearch}`;\n }\n\n return combinedUrl;\n}\n\nfunction getQueryParamValue(\n key: string,\n allowReserved: boolean,\n style: QueryParameterStyle,\n param: any,\n): string {\n let separator: string;\n if (style === \"pipeDelimited\") {\n separator = \"|\";\n } else if (style === \"spaceDelimited\") {\n separator = \"%20\";\n } else {\n separator = \",\";\n }\n\n let paramValues: any[];\n if (Array.isArray(param)) {\n paramValues = param;\n } else if (typeof param === \"object\" && param.toString === Object.prototype.toString) {\n // If the parameter is an object without a custom toString implementation (e.g. a Date),\n // then we should deconstruct the object into an array [key1, value1, key2, value2, ...].\n paramValues = Object.entries(param).flat();\n } else {\n paramValues = [param];\n }\n\n const value = paramValues\n .map((p) => {\n if (p === null || p === undefined) {\n return \"\";\n }\n\n if (!p.toString || typeof p.toString !== \"function\") {\n throw new Error(`Query parameters must be able to be represented as string, ${key} can't`);\n }\n\n const rawValue = p.toISOString !== undefined ? p.toISOString() : p.toString();\n return allowReserved ? rawValue : encodeURIComponent(rawValue);\n })\n .join(separator);\n\n return `${allowReserved ? key : encodeURIComponent(key)}=${value}`;\n}\n\n/**\n * Parses a query string into a map of key/value pairs without decoding the values.\n * This avoids the issue where `URL.searchParams` would decode values, potentially\n * corrupting already-encoded values such as SAS signatures.\n */\nfunction simpleParseQueryParams(queryString: string): Map<string, string | string[]> {\n const result = new Map<string, string | string[]>();\n if (!queryString || queryString[0] !== \"?\") {\n return result;\n }\n\n // remove the leading ?\n queryString = queryString.slice(1);\n const pairs = queryString.split(\"&\");\n\n for (const pair of pairs) {\n const eqIndex = pair.indexOf(\"=\");\n const name = eqIndex === -1 ? pair : pair.substring(0, eqIndex);\n const value = eqIndex === -1 ? \"\" : pair.substring(eqIndex + 1);\n\n const existingValue = result.get(name);\n if (existingValue !== undefined) {\n if (Array.isArray(existingValue)) {\n existingValue.push(value);\n } else {\n result.set(name, [existingValue, value]);\n }\n } else {\n result.set(name, value);\n }\n }\n\n return result;\n}\n\n/** @internal */\nexport function appendQueryParams(url: string, options: RequestParameters = {}): string {\n if (!options.queryParameters) {\n return url;\n }\n const parsedUrl = new URL(url);\n const queryParams = options.queryParameters;\n\n // Parse existing query params from the URL manually to avoid re-encoding issues\n const existingParams = simpleParseQueryParams(parsedUrl.search);\n\n const newParamStrings: string[] = [];\n for (const key of Object.keys(queryParams)) {\n const param = queryParams[key];\n if (param === undefined || param === null) {\n continue;\n }\n\n const hasMetadata = isQueryParameterWithOptions(param);\n const rawValue = hasMetadata ? param.value : param;\n const explode = hasMetadata ? (param.explode ?? false) : false;\n const style = hasMetadata && param.style ? param.style : \"form\";\n\n if (explode) {\n if (Array.isArray(rawValue)) {\n for (const item of rawValue) {\n newParamStrings.push(\n getQueryParamValue(key, options.skipUrlEncoding ?? false, style, item),\n );\n }\n } else if (rawValue !== null && typeof rawValue === \"object\") {\n // For object explode, the name of the query parameter is ignored and we use the object key instead\n for (const [actualKey, value] of Object.entries(rawValue)) {\n newParamStrings.push(\n getQueryParamValue(actualKey, options.skipUrlEncoding ?? false, style, value),\n );\n }\n } else {\n // Explode doesn't really make sense for primitives\n throw new Error(\"explode can only be set to true for objects and arrays\");\n }\n } else {\n newParamStrings.push(\n getQueryParamValue(key, options.skipUrlEncoding ?? false, style, rawValue),\n );\n }\n }\n\n // Merge new params into existing params, deduplicating values for the same key\n for (const paramString of newParamStrings) {\n const eqIndex = paramString.indexOf(\"=\");\n const name = paramString.substring(0, eqIndex);\n const value = paramString.substring(eqIndex + 1);\n\n const existingValue = existingParams.get(name);\n if (existingValue !== undefined) {\n if (Array.isArray(existingValue)) {\n if (!existingValue.includes(value)) {\n existingValue.push(value);\n }\n } else if (existingValue !== value) {\n existingParams.set(name, [existingValue, value]);\n }\n // if existingValue === value (single string match), no change needed\n } else {\n existingParams.set(name, value);\n }\n }\n\n // Reconstruct the search string manually to avoid URL re-encoding\n const searchPieces: string[] = [];\n for (const [name, value] of existingParams) {\n if (Array.isArray(value)) {\n for (const subValue of value) {\n searchPieces.push(`${name}=${subValue}`);\n }\n } else {\n searchPieces.push(`${name}=${value}`);\n }\n }\n\n parsedUrl.search = searchPieces.length ? `?${searchPieces.join(\"&\")}` : \"\";\n return parsedUrl.toString();\n}\n\nexport function buildBaseUrl(endpoint: string, options: RequestParameters): string {\n if (!options.pathParameters) {\n return endpoint;\n }\n const pathParams = options.pathParameters;\n for (const [key, param] of Object.entries(pathParams)) {\n if (param === undefined || param === null) {\n throw new Error(`Path parameters ${key} must not be undefined or null`);\n }\n if (!param.toString || typeof param.toString !== \"function\") {\n throw new Error(`Path parameters must be able to be represented as string, ${key} can't`);\n }\n let value = param.toISOString !== undefined ? param.toISOString() : String(param);\n if (!options.skipUrlEncoding) {\n value = encodeURIComponent(param);\n }\n endpoint = replaceAll(endpoint, `{${key}}`, value) ?? \"\";\n }\n\n return endpoint;\n}\n\nfunction buildRoutePath(\n routePath: string,\n pathParameters: (string | number | PathParameterWithOptions)[],\n options: RequestParameters = {},\n): string {\n for (const pathParam of pathParameters) {\n const allowReserved = typeof pathParam === \"object\" && (pathParam.allowReserved ?? false);\n let value = typeof pathParam === \"object\" ? pathParam.value : pathParam;\n\n if (!options.skipUrlEncoding && !allowReserved) {\n value = encodeURIComponent(value);\n }\n\n routePath = routePath.replace(/\\{[\\w-]+\\}/, String(value));\n }\n return routePath;\n}\n\n/**\n * Replace all of the instances of searchValue in value with the provided replaceValue.\n * @param value - The value to search and replace in.\n * @param searchValue - The value to search for in the value argument.\n * @param replaceValue - The value to replace searchValue with in the value argument.\n * @returns The value where each instance of searchValue was replaced with replacedValue.\n */\nexport function replaceAll(\n value: string | undefined,\n searchValue: string,\n replaceValue: string,\n): string | undefined {\n return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || \"\");\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -28,3 +28,4 @@ const DEFAULT_RETRY_POLICY_COUNT = 3;
28
28
  DEFAULT_RETRY_POLICY_COUNT,
29
29
  SDK_VERSION
30
30
  });
31
+ //# sourceMappingURL=constants.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/constants.ts"],
3
+ "sources": ["../../src/constants.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const SDK_VERSION: string = \"0.3.5\";\n\nexport const DEFAULT_RETRY_POLICY_COUNT = 3;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,cAAsB;AAE5B,MAAM,6BAA6B;",
6
6
  "names": []
@@ -58,3 +58,4 @@ function createPipelineFromOptions(options) {
58
58
  0 && (module.exports = {
59
59
  createPipelineFromOptions
60
60
  });
61
+ //# sourceMappingURL=createPipelineFromOptions.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/createPipelineFromOptions.ts"],
3
+ "sources": ["../../src/createPipelineFromOptions.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { type LogPolicyOptions, logPolicy } from \"./policies/logPolicy.js\";\nimport { type Pipeline, createEmptyPipeline } from \"./pipeline.js\";\nimport type { Agent, PipelineRetryOptions, ProxySettings, TlsSettings } from \"./interfaces.js\";\nimport { type RedirectPolicyOptions, redirectPolicy } from \"./policies/redirectPolicy.js\";\nimport { type UserAgentPolicyOptions, userAgentPolicy } from \"./policies/userAgentPolicy.js\";\nimport { decompressResponsePolicy } from \"./policies/decompressResponsePolicy.js\";\nimport { defaultRetryPolicy } from \"./policies/defaultRetryPolicy.js\";\nimport { formDataPolicy } from \"./policies/formDataPolicy.js\";\nimport { isNodeLike } from \"./util/checkEnvironment.js\";\nimport { proxyPolicy } from \"./policies/proxyPolicy.js\";\nimport { agentPolicy } from \"./policies/agentPolicy.js\";\nimport { tlsPolicy } from \"./policies/tlsPolicy.js\";\nimport { multipartPolicy, multipartPolicyName } from \"./policies/multipartPolicy.js\";\n\n/**\n * Defines options that are used to configure the HTTP pipeline for\n * an SDK client.\n */\nexport interface PipelineOptions {\n /**\n * Options that control how to retry failed requests.\n */\n retryOptions?: PipelineRetryOptions;\n\n /**\n * Options to configure a proxy for outgoing requests.\n */\n proxyOptions?: ProxySettings;\n\n /** Options for configuring Agent instance for outgoing requests */\n agent?: Agent;\n\n /** Options for configuring TLS authentication */\n tlsOptions?: TlsSettings;\n\n /**\n * Options for how redirect responses are handled.\n */\n redirectOptions?: RedirectPolicyOptions;\n\n /**\n * Options for adding user agent details to outgoing requests.\n */\n userAgentOptions?: UserAgentPolicyOptions;\n\n /**\n * Options for setting common telemetry and tracing info to outgoing requests.\n */\n telemetryOptions?: TelemetryOptions;\n}\n\n/**\n * Defines options that are used to configure common telemetry and tracing info\n */\nexport interface TelemetryOptions {\n /**\n * The name of the header to pass the request ID to.\n */\n clientRequestIdHeaderName?: string;\n}\n\n/**\n * Defines options that are used to configure internal options of\n * the HTTP pipeline for an SDK client.\n */\nexport interface InternalPipelineOptions extends PipelineOptions {\n /**\n * Options to configure request/response logging.\n */\n loggingOptions?: LogPolicyOptions;\n}\n\n/**\n * Create a new pipeline with a default set of customizable policies.\n * @param options - Options to configure a custom pipeline.\n */\nexport function createPipelineFromOptions(options: InternalPipelineOptions): Pipeline {\n const pipeline = createEmptyPipeline();\n\n if (isNodeLike) {\n if (options.agent) {\n pipeline.addPolicy(agentPolicy(options.agent));\n }\n if (options.tlsOptions) {\n pipeline.addPolicy(tlsPolicy(options.tlsOptions));\n }\n pipeline.addPolicy(proxyPolicy(options.proxyOptions));\n pipeline.addPolicy(decompressResponsePolicy());\n }\n\n pipeline.addPolicy(formDataPolicy(), { beforePolicies: [multipartPolicyName] });\n pipeline.addPolicy(userAgentPolicy(options.userAgentOptions));\n // The multipart policy is added after policies with no phase, so that\n // policies can be added between it and formDataPolicy to modify\n // properties (e.g., making the boundary constant in recorded tests).\n pipeline.addPolicy(multipartPolicy(), { afterPhase: \"Deserialize\" });\n pipeline.addPolicy(defaultRetryPolicy(options.retryOptions), { phase: \"Retry\" });\n if (isNodeLike) {\n // Both XHR and Fetch expect to handle redirects automatically,\n // so only include this policy when we're in Node.\n pipeline.addPolicy(redirectPolicy(options.redirectOptions), { afterPhase: \"Retry\" });\n }\n pipeline.addPolicy(logPolicy(options.loggingOptions), { afterPhase: \"Sign\" });\n\n return pipeline;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAiD;AACjD,sBAAmD;AAEnD,4BAA2D;AAC3D,6BAA6D;AAC7D,sCAAyC;AACzC,gCAAmC;AACnC,4BAA+B;AAC/B,8BAA2B;AAC3B,yBAA4B;AAC5B,yBAA4B;AAC5B,uBAA0B;AAC1B,6BAAqD;AAgE9C,SAAS,0BAA0B,SAA4C;AACpF,QAAM,eAAW,qCAAoB;AAErC,MAAI,oCAAY;AACd,QAAI,QAAQ,OAAO;AACjB,eAAS,cAAU,gCAAY,QAAQ,KAAK,CAAC;AAAA,IAC/C;AACA,QAAI,QAAQ,YAAY;AACtB,eAAS,cAAU,4BAAU,QAAQ,UAAU,CAAC;AAAA,IAClD;AACA,aAAS,cAAU,gCAAY,QAAQ,YAAY,CAAC;AACpD,aAAS,cAAU,0DAAyB,CAAC;AAAA,EAC/C;AAEA,WAAS,cAAU,sCAAe,GAAG,EAAE,gBAAgB,CAAC,0CAAmB,EAAE,CAAC;AAC9E,WAAS,cAAU,wCAAgB,QAAQ,gBAAgB,CAAC;AAI5D,WAAS,cAAU,wCAAgB,GAAG,EAAE,YAAY,cAAc,CAAC;AACnE,WAAS,cAAU,8CAAmB,QAAQ,YAAY,GAAG,EAAE,OAAO,QAAQ,CAAC;AAC/E,MAAI,oCAAY;AAGd,aAAS,cAAU,sCAAe,QAAQ,eAAe,GAAG,EAAE,YAAY,QAAQ,CAAC;AAAA,EACrF;AACA,WAAS,cAAU,4BAAU,QAAQ,cAAc,GAAG,EAAE,YAAY,OAAO,CAAC;AAE5E,SAAO;AACT;",
6
6
  "names": []
@@ -28,3 +28,4 @@ function createDefaultHttpClient() {
28
28
  0 && (module.exports = {
29
29
  createDefaultHttpClient
30
30
  });
31
+ //# sourceMappingURL=defaultHttpClient.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/defaultHttpClient.ts"],
3
+ "sources": ["../../src/defaultHttpClient.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { HttpClient } from \"./interfaces.js\";\nimport { createNodeHttpClient } from \"./nodeHttpClient.js\";\n\n/**\n * Create the correct HttpClient for the current environment.\n */\nexport function createDefaultHttpClient(): HttpClient {\n return createNodeHttpClient();\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,4BAAqC;AAK9B,SAAS,0BAAsC;AACpD,aAAO,4CAAqB;AAC9B;",
6
6
  "names": []
@@ -1,4 +1,9 @@
1
1
  import type { HttpClient } from "./interfaces.js";
2
+ declare global {
3
+ interface RequestInit {
4
+ duplex?: "half";
5
+ }
6
+ }
2
7
  /**
3
8
  * Create a new HttpClient instance for the browser environment.
4
9
  * @internal
@@ -235,3 +235,4 @@ function isTransformStreamSupported(readableStream) {
235
235
  0 && (module.exports = {
236
236
  createFetchHttpClient
237
237
  });
238
+ //# sourceMappingURL=fetchHttpClient.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/fetchHttpClient.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortError } from \"./abort-controller/AbortError.js\";\nimport type {\n HttpClient,\n HttpHeaders as PipelineHeaders,\n PipelineRequest,\n PipelineResponse,\n TransferProgressEvent,\n} from \"./interfaces.js\";\nimport { RestError } from \"./restError.js\";\nimport { createHttpHeaders } from \"./httpHeaders.js\";\nimport { isNodeReadableStream, isWebReadableStream } from \"./util/typeGuards.js\";\nimport { arrayBufferViewToArrayBuffer } from \"./util/arrayBuffer.js\";\n\n/**\n * Checks if the body is a Blob or Blob-like\n */\nfunction isBlob(body: unknown): body is Blob {\n // File objects count as a type of Blob, so we want to use instanceof explicitly\n return (typeof Blob === \"function\" || typeof Blob === \"object\") && body instanceof Blob;\n}\n\n/**\n * A HttpClient implementation that uses window.fetch to send HTTP requests.\n * @internal\n */\nclass FetchHttpClient implements HttpClient {\n /**\n * Makes a request over an underlying transport layer and returns the response.\n * @param request - The request to be made.\n */\n public async sendRequest(request: PipelineRequest): Promise<PipelineResponse> {\n const url = new URL(request.url);\n const isInsecure = url.protocol !== \"https:\";\n\n if (isInsecure && !request.allowInsecureConnection) {\n throw new Error(`Cannot connect to ${request.url} while allowInsecureConnection is false.`);\n }\n\n if (request.proxySettings) {\n throw new Error(\"HTTP proxy is not supported in browser environment\");\n }\n\n try {\n return await makeRequest(request);\n } catch (e: any) {\n throw getError(e, request);\n }\n }\n}\n\n/**\n * Sends a request\n */\nasync function makeRequest(request: PipelineRequest): Promise<PipelineResponse> {\n const { abortController, abortControllerCleanup } = setupAbortSignal(request);\n try {\n const headers = buildFetchHeaders(request.headers);\n const { streaming, body: requestBody } = buildRequestBody(request);\n const requestInit: RequestInit = {\n body: requestBody,\n method: request.method,\n headers: headers,\n signal: abortController.signal,\n // Cloudflare doesn't implement the full Fetch API spec\n // because of some of it doesn't make sense in the edge.\n // See https://github.com/cloudflare/workerd/issues/902\n ...(\"credentials\" in Request.prototype\n ? { credentials: request.withCredentials ? \"include\" : \"same-origin\" }\n : {}),\n ...(\"cache\" in Request.prototype ? { cache: \"no-store\" } : {}),\n };\n\n // According to https://fetch.spec.whatwg.org/#fetch-method,\n // init.duplex must be set when body is a ReadableStream object.\n // currently \"half\" is the only valid value.\n if (streaming) {\n (requestInit as any).duplex = \"half\";\n }\n /**\n * Developers of the future:\n * Do not set redirect: \"manual\" as part\n * of request options.\n * It will not work as you expect.\n */\n const response = await fetch(request.url, {\n ...requestInit,\n ...request.requestOverrides,\n });\n // If we're uploading a blob, we need to fire the progress event manually\n if (isBlob(request.body) && request.onUploadProgress) {\n request.onUploadProgress({ loadedBytes: request.body.size });\n }\n return buildPipelineResponse(response, request, abortControllerCleanup);\n } catch (e) {\n abortControllerCleanup?.();\n throw e;\n }\n}\n\n/**\n * Creates a pipeline response from a Fetch response;\n */\nasync function buildPipelineResponse(\n httpResponse: Response,\n request: PipelineRequest,\n abortControllerCleanup?: () => void,\n): Promise<PipelineResponse> {\n const headers = buildPipelineHeaders(httpResponse);\n const response: PipelineResponse = {\n request,\n headers,\n status: httpResponse.status,\n };\n\n const bodyStream = isWebReadableStream(httpResponse.body)\n ? buildBodyStream(httpResponse.body, {\n onProgress: request.onDownloadProgress,\n onEnd: abortControllerCleanup,\n })\n : httpResponse.body;\n\n if (\n // Value of POSITIVE_INFINITY in streamResponseStatusCodes is considered as any status code\n request.streamResponseStatusCodes?.has(Number.POSITIVE_INFINITY) ||\n request.streamResponseStatusCodes?.has(response.status)\n ) {\n if (request.enableBrowserStreams) {\n response.browserStreamBody = bodyStream ?? undefined;\n } else {\n const responseStream = new Response(bodyStream);\n response.blobBody = responseStream.blob();\n abortControllerCleanup?.();\n }\n } else {\n const responseStream = new Response(bodyStream);\n\n response.bodyAsText = await responseStream.text();\n abortControllerCleanup?.();\n }\n\n return response;\n}\n\nfunction setupAbortSignal(request: PipelineRequest): {\n abortController: AbortController;\n abortControllerCleanup: (() => void) | undefined;\n} {\n const abortController = new AbortController();\n\n // Cleanup function\n let abortControllerCleanup: (() => void) | undefined;\n\n /**\n * Attach an abort listener to the request\n */\n let abortListener: ((event: any) => void) | undefined;\n if (request.abortSignal) {\n if (request.abortSignal.aborted) {\n throw new AbortError(\"The operation was aborted. Request has already been canceled.\");\n }\n\n abortListener = (event: Event) => {\n if (event.type === \"abort\") {\n abortController.abort();\n }\n };\n request.abortSignal.addEventListener(\"abort\", abortListener);\n abortControllerCleanup = () => {\n if (abortListener) {\n request.abortSignal?.removeEventListener(\"abort\", abortListener);\n }\n };\n }\n\n // If a timeout was passed, call the abort signal once the time elapses\n if (request.timeout > 0) {\n setTimeout(() => {\n abortController.abort();\n }, request.timeout);\n }\n\n return { abortController, abortControllerCleanup };\n}\n\n/**\n * Gets the specific error\n */\n// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\nfunction getError(e: RestError, request: PipelineRequest): RestError {\n if (e && e?.name === \"AbortError\") {\n return e;\n } else {\n return new RestError(`Error sending request: ${e.message}`, {\n code: e?.code ?? RestError.REQUEST_SEND_ERROR,\n request,\n });\n }\n}\n\n/**\n * Converts PipelineRequest headers to Fetch headers\n */\nfunction buildFetchHeaders(pipelineHeaders: PipelineHeaders): Headers {\n const headers = new Headers();\n for (const [name, value] of pipelineHeaders) {\n headers.append(name, value);\n }\n\n return headers;\n}\n\nfunction buildPipelineHeaders(httpResponse: Response): PipelineHeaders {\n const responseHeaders = createHttpHeaders();\n for (const [name, value] of httpResponse.headers) {\n responseHeaders.set(name, value);\n }\n\n return responseHeaders;\n}\n\ninterface BuildRequestBodyResponse {\n body?: BodyInit | null;\n streaming: boolean;\n}\n\nfunction buildRequestBody(request: PipelineRequest): BuildRequestBodyResponse {\n const body = typeof request.body === \"function\" ? request.body() : request.body;\n if (isNodeReadableStream(body)) {\n throw new Error(\"Node streams are not supported in browser environment.\");\n }\n\n if (isWebReadableStream(body)) {\n return {\n streaming: true,\n body: buildBodyStream(body, { onProgress: request.onUploadProgress }),\n };\n } else if (typeof body === \"object\" && body && \"buffer\" in body) {\n // ArrayBufferView\n return { streaming: false, body: arrayBufferViewToArrayBuffer(body) };\n } else if (body === undefined) {\n return { streaming: false };\n } else {\n return { streaming: false, body };\n }\n}\n\n/**\n * Reads the request/response original stream and stream it through a new\n * ReadableStream, this is done to be able to report progress in a way that\n * all modern browsers support. TransformStreams would be an alternative,\n * however they are not yet supported by all browsers i.e Firefox\n */\nfunction buildBodyStream(\n readableStream: ReadableStream<Uint8Array>,\n options: { onProgress?: (progress: TransferProgressEvent) => void; onEnd?: () => void } = {},\n): ReadableStream<Uint8Array> {\n let loadedBytes = 0;\n const { onProgress, onEnd } = options;\n\n // If the current browser supports pipeThrough we use a TransformStream\n // to report progress\n if (isTransformStreamSupported(readableStream)) {\n return readableStream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n if (chunk === null) {\n controller.terminate();\n return;\n }\n\n controller.enqueue(chunk);\n loadedBytes += chunk.length;\n if (onProgress) {\n onProgress({ loadedBytes });\n }\n },\n flush() {\n onEnd?.();\n },\n }),\n );\n } else {\n // If we can't use transform streams, wrap the original stream in a new readable stream\n // and use pull to enqueue each chunk and report progress.\n const reader = readableStream.getReader();\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n // When no more data needs to be consumed, break the reading\n if (done || !value) {\n onEnd?.();\n // Close the stream\n controller.close();\n reader.releaseLock();\n return;\n }\n\n loadedBytes += value?.length ?? 0;\n\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n\n if (onProgress) {\n onProgress({ loadedBytes });\n }\n },\n cancel(reason?: string) {\n onEnd?.();\n return reader.cancel(reason);\n },\n });\n }\n}\n\n/**\n * Create a new HttpClient instance for the browser environment.\n * @internal\n */\nexport function createFetchHttpClient(): HttpClient {\n return new FetchHttpClient();\n}\n\nfunction isTransformStreamSupported(readableStream: ReadableStream): boolean {\n return readableStream.pipeThrough !== undefined && self.TransformStream !== undefined;\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../src/fetchHttpClient.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortError } from \"./abort-controller/AbortError.js\";\nimport type {\n HttpClient,\n HttpHeaders as PipelineHeaders,\n PipelineRequest,\n PipelineResponse,\n TransferProgressEvent,\n} from \"./interfaces.js\";\nimport { RestError } from \"./restError.js\";\nimport { createHttpHeaders } from \"./httpHeaders.js\";\nimport { isNodeReadableStream, isWebReadableStream } from \"./util/typeGuards.js\";\nimport { arrayBufferViewToArrayBuffer } from \"./util/arrayBuffer.js\";\n\n// The Fetch spec requires `duplex: \"half\"` when body is a ReadableStream,\n// but TypeScript's lib.dom.d.ts hasn't added it to RequestInit yet.\ndeclare global {\n interface RequestInit {\n duplex?: \"half\";\n }\n}\n\n/**\n * Checks if the body is a Blob or Blob-like\n */\nfunction isBlob(body: unknown): body is Blob {\n // File objects count as a type of Blob, so we want to use instanceof explicitly\n return (typeof Blob === \"function\" || typeof Blob === \"object\") && body instanceof Blob;\n}\n\n/**\n * A HttpClient implementation that uses window.fetch to send HTTP requests.\n * @internal\n */\nclass FetchHttpClient implements HttpClient {\n /**\n * Makes a request over an underlying transport layer and returns the response.\n * @param request - The request to be made.\n */\n public async sendRequest(request: PipelineRequest): Promise<PipelineResponse> {\n const url = new URL(request.url);\n const isInsecure = url.protocol !== \"https:\";\n\n if (isInsecure && !request.allowInsecureConnection) {\n throw new Error(`Cannot connect to ${request.url} while allowInsecureConnection is false.`);\n }\n\n if (request.proxySettings) {\n throw new Error(\"HTTP proxy is not supported in browser environment\");\n }\n\n try {\n return await makeRequest(request);\n } catch (e: any) {\n throw getError(e, request);\n }\n }\n}\n\n/**\n * Sends a request\n */\nasync function makeRequest(request: PipelineRequest): Promise<PipelineResponse> {\n const { abortController, abortControllerCleanup } = setupAbortSignal(request);\n try {\n const headers = buildFetchHeaders(request.headers);\n const { streaming, body: requestBody } = buildRequestBody(request);\n const requestInit: RequestInit = {\n body: requestBody,\n method: request.method,\n headers: headers,\n signal: abortController.signal,\n // Cloudflare doesn't implement the full Fetch API spec\n // because of some of it doesn't make sense in the edge.\n // See https://github.com/cloudflare/workerd/issues/902\n ...(\"credentials\" in Request.prototype\n ? { credentials: request.withCredentials ? \"include\" : \"same-origin\" }\n : {}),\n ...(\"cache\" in Request.prototype ? { cache: \"no-store\" } : {}),\n };\n\n // According to https://fetch.spec.whatwg.org/#fetch-method,\n // init.duplex must be set when body is a ReadableStream object.\n // currently \"half\" is the only valid value.\n if (streaming) {\n requestInit.duplex = \"half\";\n }\n /**\n * Developers of the future:\n * Do not set redirect: \"manual\" as part\n * of request options.\n * It will not work as you expect.\n */\n const response = await fetch(request.url, {\n ...requestInit,\n ...request.requestOverrides,\n });\n // If we're uploading a blob, we need to fire the progress event manually\n if (isBlob(request.body) && request.onUploadProgress) {\n request.onUploadProgress({ loadedBytes: request.body.size });\n }\n return buildPipelineResponse(response, request, abortControllerCleanup);\n } catch (e) {\n abortControllerCleanup?.();\n throw e;\n }\n}\n\n/**\n * Creates a pipeline response from a Fetch response;\n */\nasync function buildPipelineResponse(\n httpResponse: Response,\n request: PipelineRequest,\n abortControllerCleanup?: () => void,\n): Promise<PipelineResponse> {\n const headers = buildPipelineHeaders(httpResponse);\n const response: PipelineResponse = {\n request,\n headers,\n status: httpResponse.status,\n };\n\n const bodyStream = isWebReadableStream(httpResponse.body)\n ? buildBodyStream(httpResponse.body, {\n onProgress: request.onDownloadProgress,\n onEnd: abortControllerCleanup,\n })\n : httpResponse.body;\n\n if (\n // Value of POSITIVE_INFINITY in streamResponseStatusCodes is considered as any status code\n request.streamResponseStatusCodes?.has(Number.POSITIVE_INFINITY) ||\n request.streamResponseStatusCodes?.has(response.status)\n ) {\n if (request.enableBrowserStreams) {\n response.browserStreamBody = bodyStream ?? undefined;\n } else {\n const responseStream = new Response(bodyStream);\n response.blobBody = responseStream.blob();\n abortControllerCleanup?.();\n }\n } else {\n const responseStream = new Response(bodyStream);\n\n response.bodyAsText = await responseStream.text();\n abortControllerCleanup?.();\n }\n\n return response;\n}\n\nfunction setupAbortSignal(request: PipelineRequest): {\n abortController: AbortController;\n abortControllerCleanup: (() => void) | undefined;\n} {\n const abortController = new AbortController();\n\n // Cleanup function\n let abortControllerCleanup: (() => void) | undefined;\n\n /**\n * Attach an abort listener to the request\n */\n let abortListener: ((event: any) => void) | undefined;\n if (request.abortSignal) {\n if (request.abortSignal.aborted) {\n throw new AbortError(\"The operation was aborted. Request has already been canceled.\");\n }\n\n abortListener = (event: Event) => {\n if (event.type === \"abort\") {\n abortController.abort();\n }\n };\n request.abortSignal.addEventListener(\"abort\", abortListener);\n abortControllerCleanup = () => {\n if (abortListener) {\n request.abortSignal?.removeEventListener(\"abort\", abortListener);\n }\n };\n }\n\n // If a timeout was passed, call the abort signal once the time elapses\n if (request.timeout > 0) {\n setTimeout(() => {\n abortController.abort();\n }, request.timeout);\n }\n\n return { abortController, abortControllerCleanup };\n}\n\n/**\n * Gets the specific error\n */\n// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\nfunction getError(e: RestError, request: PipelineRequest): RestError {\n if (e && e?.name === \"AbortError\") {\n return e;\n } else {\n return new RestError(`Error sending request: ${e.message}`, {\n code: e?.code ?? RestError.REQUEST_SEND_ERROR,\n request,\n });\n }\n}\n\n/**\n * Converts PipelineRequest headers to Fetch headers\n */\nfunction buildFetchHeaders(pipelineHeaders: PipelineHeaders): Headers {\n const headers = new Headers();\n for (const [name, value] of pipelineHeaders) {\n headers.append(name, value);\n }\n\n return headers;\n}\n\nfunction buildPipelineHeaders(httpResponse: Response): PipelineHeaders {\n const responseHeaders = createHttpHeaders();\n for (const [name, value] of httpResponse.headers) {\n responseHeaders.set(name, value);\n }\n\n return responseHeaders;\n}\n\ninterface BuildRequestBodyResponse {\n body?: BodyInit | null;\n streaming: boolean;\n}\n\nfunction buildRequestBody(request: PipelineRequest): BuildRequestBodyResponse {\n const body = typeof request.body === \"function\" ? request.body() : request.body;\n if (isNodeReadableStream(body)) {\n throw new Error(\"Node streams are not supported in browser environment.\");\n }\n\n if (isWebReadableStream(body)) {\n return {\n streaming: true,\n body: buildBodyStream(body, { onProgress: request.onUploadProgress }),\n };\n } else if (typeof body === \"object\" && body && \"buffer\" in body) {\n // ArrayBufferView\n return { streaming: false, body: arrayBufferViewToArrayBuffer(body) };\n } else if (body === undefined) {\n return { streaming: false };\n } else {\n return { streaming: false, body };\n }\n}\n\n/**\n * Reads the request/response original stream and stream it through a new\n * ReadableStream, this is done to be able to report progress in a way that\n * all modern browsers support. TransformStreams would be an alternative,\n * however they are not yet supported by all browsers i.e Firefox\n */\nfunction buildBodyStream(\n readableStream: ReadableStream<Uint8Array>,\n options: { onProgress?: (progress: TransferProgressEvent) => void; onEnd?: () => void } = {},\n): ReadableStream<Uint8Array> {\n let loadedBytes = 0;\n const { onProgress, onEnd } = options;\n\n // If the current browser supports pipeThrough we use a TransformStream\n // to report progress\n if (isTransformStreamSupported(readableStream)) {\n return readableStream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n if (chunk === null) {\n controller.terminate();\n return;\n }\n\n controller.enqueue(chunk);\n loadedBytes += chunk.length;\n if (onProgress) {\n onProgress({ loadedBytes });\n }\n },\n flush() {\n onEnd?.();\n },\n }),\n );\n } else {\n // If we can't use transform streams, wrap the original stream in a new readable stream\n // and use pull to enqueue each chunk and report progress.\n const reader = readableStream.getReader();\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n // When no more data needs to be consumed, break the reading\n if (done || !value) {\n onEnd?.();\n // Close the stream\n controller.close();\n reader.releaseLock();\n return;\n }\n\n loadedBytes += value?.length ?? 0;\n\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n\n if (onProgress) {\n onProgress({ loadedBytes });\n }\n },\n cancel(reason?: string) {\n onEnd?.();\n return reader.cancel(reason);\n },\n });\n }\n}\n\n/**\n * Create a new HttpClient instance for the browser environment.\n * @internal\n */\nexport function createFetchHttpClient(): HttpClient {\n return new FetchHttpClient();\n}\n\nfunction isTransformStreamSupported(readableStream: ReadableStream): boolean {\n return readableStream.pipeThrough !== undefined && self.TransformStream !== undefined;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -105,3 +105,4 @@ function createHttpHeaders(rawHeaders) {
105
105
  0 && (module.exports = {
106
106
  createHttpHeaders
107
107
  });
108
+ //# sourceMappingURL=httpHeaders.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/httpHeaders.ts"],
3
+ "sources": ["../../src/httpHeaders.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { HttpHeaders, RawHttpHeaders, RawHttpHeadersInput } from \"./interfaces.js\";\n\ninterface HeaderEntry {\n name: string;\n value: string;\n}\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase();\n}\n\nfunction* headerIterator(map: Map<string, HeaderEntry>): IterableIterator<[string, string]> {\n for (const entry of map.values()) {\n yield [entry.name, entry.value];\n }\n}\n\nclass HttpHeadersImpl implements HttpHeaders {\n private readonly _headersMap: Map<string, HeaderEntry>;\n\n constructor(rawHeaders?: RawHttpHeaders | RawHttpHeadersInput) {\n this._headersMap = new Map<string, HeaderEntry>();\n if (rawHeaders) {\n for (const headerName of Object.keys(rawHeaders)) {\n this.set(headerName, rawHeaders[headerName]);\n }\n }\n }\n\n /**\n * Set a header in this collection with the provided name and value. The name is\n * case-insensitive.\n * @param name - The name of the header to set. This value is case-insensitive.\n * @param value - The value of the header to set.\n */\n public set(name: string, value: string | number | boolean): void {\n this._headersMap.set(normalizeName(name), { name, value: String(value).trim() });\n }\n\n /**\n * Get the header value for the provided header name, or undefined if no header exists in this\n * collection with the provided name.\n * @param name - The name of the header. This value is case-insensitive.\n */\n public get(name: string): string | undefined {\n return this._headersMap.get(normalizeName(name))?.value;\n }\n\n /**\n * Get whether or not this header collection contains a header entry for the provided header name.\n * @param name - The name of the header to set. This value is case-insensitive.\n */\n public has(name: string): boolean {\n return this._headersMap.has(normalizeName(name));\n }\n\n /**\n * Remove the header with the provided headerName.\n * @param name - The name of the header to remove.\n */\n public delete(name: string): void {\n this._headersMap.delete(normalizeName(name));\n }\n\n /**\n * Get the JSON object representation of this HTTP header collection.\n */\n public toJSON(options: { preserveCase?: boolean } = {}): RawHttpHeaders {\n const result: RawHttpHeaders = {};\n if (options.preserveCase) {\n for (const entry of this._headersMap.values()) {\n result[entry.name] = entry.value;\n }\n } else {\n for (const [normalizedName, entry] of this._headersMap) {\n result[normalizedName] = entry.value;\n }\n }\n\n return result;\n }\n\n /**\n * Get the string representation of this HTTP header collection.\n */\n public toString(): string {\n return JSON.stringify(this.toJSON({ preserveCase: true }));\n }\n\n /**\n * Iterate over tuples of header [name, value] pairs.\n */\n [Symbol.iterator](): Iterator<[string, string]> {\n return headerIterator(this._headersMap);\n }\n}\n\n/**\n * Creates an object that satisfies the `HttpHeaders` interface.\n * @param rawHeaders - A simple object representing initial headers\n */\nexport function createHttpHeaders(rawHeaders?: RawHttpHeadersInput): HttpHeaders {\n return new HttpHeadersImpl(rawHeaders);\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,SAAS,cAAc,MAAsB;AAC3C,SAAO,KAAK,YAAY;AAC1B;AAEA,UAAU,eAAe,KAAmE;AAC1F,aAAW,SAAS,IAAI,OAAO,GAAG;AAChC,UAAM,CAAC,MAAM,MAAM,MAAM,KAAK;AAAA,EAChC;AACF;AAEA,MAAM,gBAAuC;AAAA,EAC1B;AAAA,EAEjB,YAAY,YAAmD;AAC7D,SAAK,cAAc,oBAAI,IAAyB;AAChD,QAAI,YAAY;AACd,iBAAW,cAAc,OAAO,KAAK,UAAU,GAAG;AAChD,aAAK,IAAI,YAAY,WAAW,UAAU,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,IAAI,MAAc,OAAwC;AAC/D,SAAK,YAAY,IAAI,cAAc,IAAI,GAAG,EAAE,MAAM,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE,CAAC;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,IAAI,MAAkC;AAC3C,WAAO,KAAK,YAAY,IAAI,cAAc,IAAI,CAAC,GAAG;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,IAAI,MAAuB;AAChC,WAAO,KAAK,YAAY,IAAI,cAAc,IAAI,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,MAAoB;AAChC,SAAK,YAAY,OAAO,cAAc,IAAI,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,UAAsC,CAAC,GAAmB;AACtE,UAAM,SAAyB,CAAC;AAChC,QAAI,QAAQ,cAAc;AACxB,iBAAW,SAAS,KAAK,YAAY,OAAO,GAAG;AAC7C,eAAO,MAAM,IAAI,IAAI,MAAM;AAAA,MAC7B;AAAA,IACF,OAAO;AACL,iBAAW,CAAC,gBAAgB,KAAK,KAAK,KAAK,aAAa;AACtD,eAAO,cAAc,IAAI,MAAM;AAAA,MACjC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,WAAmB;AACxB,WAAO,KAAK,UAAU,KAAK,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,OAAO,QAAQ,IAAgC;AAC9C,WAAO,eAAe,KAAK,WAAW;AAAA,EACxC;AACF;AAMO,SAAS,kBAAkB,YAA+C;AAC/E,SAAO,IAAI,gBAAgB,UAAU;AACvC;",
6
6
  "names": []
@@ -65,3 +65,4 @@ var import_restError2 = require("./client/restError.js");
65
65
  stringToUint8Array,
66
66
  uint8ArrayToString
67
67
  });
68
+ //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/index.ts"],
3
+ "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\ndeclare global {\n interface FormData {}\n interface Blob {}\n interface File {}\n interface ReadableStream<R = any> {}\n interface TransformStream<I = any, O = any> {}\n}\n\nexport { AbortError } from \"./abort-controller/AbortError.js\";\nexport {\n createClientLogger,\n getLogLevel,\n setLogLevel,\n TypeSpecRuntimeLogger,\n type Debugger,\n type TypeSpecRuntimeClientLogger,\n type TypeSpecRuntimeLogLevel,\n} from \"./logger/logger.js\";\n\nexport type {\n BodyPart,\n FormDataValue,\n RawHttpHeaders,\n KeyObject,\n PxfObject,\n HttpClient,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n TlsSettings,\n Agent,\n RequestBodyType,\n FormDataMap,\n HttpHeaders,\n HttpMethods,\n MultipartRequestBody,\n TransferProgressEvent,\n ProxySettings,\n RawHttpHeadersInput,\n PipelineRetryOptions,\n} from \"./interfaces.js\";\nexport { createHttpHeaders } from \"./httpHeaders.js\";\nexport type * from \"./auth/schemes.js\";\nexport type * from \"./auth/oauth2Flows.js\";\nexport {\n type BasicCredential,\n type BearerTokenCredential,\n type OAuth2TokenCredential,\n type GetOAuth2TokenOptions,\n type GetBearerTokenOptions,\n type ApiKeyCredential,\n type ClientCredential,\n} from \"./auth/credentials.js\";\nexport { createPipelineRequest, type PipelineRequestOptions } from \"./pipelineRequest.js\";\nexport {\n type Pipeline,\n type PipelinePolicy,\n type AddPolicyOptions,\n type PipelinePhase,\n createEmptyPipeline,\n} from \"./pipeline.js\";\nexport { RestError, isRestError, type RestErrorOptions } from \"./restError.js\";\nexport { stringToUint8Array, uint8ArrayToString, type EncodingType } from \"./util/bytesEncoding.js\";\nexport { createDefaultHttpClient } from \"./defaultHttpClient.js\";\nexport { getClient } from \"./client/getClient.js\";\nexport { operationOptionsToRequestParameters } from \"./client/operationOptionHelpers.js\";\nexport { createRestError } from \"./client/restError.js\";\nexport type {\n Client,\n ClientOptions,\n OperationOptions,\n AdditionalPolicyConfig,\n PathUnchecked,\n PathUncheckedResponse,\n HttpResponse,\n RawResponseCallback,\n OperationRequestOptions,\n PathParameters,\n ResourceMethods,\n PathParameterWithOptions,\n StreamableMethod,\n RequestParameters,\n HttpNodeStreamResponse,\n HttpBrowserStreamResponse,\n FullOperationResponse,\n} from \"./client/common.js\";\nexport type { PipelineOptions, TelemetryOptions } from \"./createPipelineFromOptions.js\";\nexport type { LogPolicyOptions } from \"./policies/logPolicy.js\";\nexport type { RedirectPolicyOptions } from \"./policies/redirectPolicy.js\";\nexport type { UserAgentPolicyOptions } from \"./policies/userAgentPolicy.js\";\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,wBAA2B;AAC3B,oBAQO;AAwBP,yBAAkC;AAYlC,6BAAmE;AACnE,sBAMO;AACP,uBAA8D;AAC9D,2BAA0E;AAC1E,+BAAwC;AACxC,uBAA0B;AAC1B,oCAAoD;AACpD,IAAAA,oBAAgC;",
6
6
  "names": ["import_restError"]
@@ -13,3 +13,4 @@ var __copyProps = (to, from, except, desc) => {
13
13
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
14
  var interfaces_exports = {};
15
15
  module.exports = __toCommonJS(interfaces_exports);
16
+ //# sourceMappingURL=interfaces.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/interfaces.ts"],
3
+ "sources": ["../../src/interfaces.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AuthScheme } from \"./auth/schemes.js\";\n\n/**\n * A HttpHeaders collection represented as a simple JSON object.\n */\nexport type RawHttpHeaders = { [headerName: string]: string };\n\n/**\n * A HttpHeaders collection for input, represented as a simple JSON object.\n */\nexport type RawHttpHeadersInput = Record<string, string | number | boolean>;\n\n/**\n * Represents a set of HTTP headers on a request/response.\n * Header names are treated as case insensitive.\n */\nexport interface HttpHeaders extends Iterable<[string, string]> {\n /**\n * Returns the value of a specific header or undefined if not set.\n * @param name - The name of the header to retrieve.\n */\n get(name: string): string | undefined;\n /**\n * Returns true if the specified header exists.\n * @param name - The name of the header to check.\n */\n has(name: string): boolean;\n /**\n * Sets a specific header with a given value.\n * @param name - The name of the header to set.\n * @param value - The value to use for the header.\n */\n set(name: string, value: string | number | boolean): void;\n /**\n * Removes a specific header from the collection.\n * @param name - The name of the header to delete.\n */\n delete(name: string): void;\n /**\n * Accesses a raw JS object that acts as a simple map\n * of header names to values.\n */\n toJSON(options?: { preserveCase?: boolean }): RawHttpHeaders;\n}\n\n/**\n * A part of the request body in a multipart request.\n */\nexport interface BodyPart {\n /**\n * The headers for this part of the multipart request.\n */\n headers: HttpHeaders;\n\n /**\n * The body of this part of the multipart request.\n */\n body:\n | ((() => ReadableStream<Uint8Array>) | (() => NodeJS.ReadableStream))\n | ReadableStream<Uint8Array>\n | NodeJS.ReadableStream\n | Uint8Array\n | Blob;\n}\n\n/**\n * A request body consisting of multiple parts.\n */\nexport interface MultipartRequestBody {\n /**\n * The parts of the request body.\n */\n parts: BodyPart[];\n\n /**\n * The boundary separating each part of the request body.\n * If not specified, a random boundary will be generated.\n *\n * When specified, '--' will be prepended to the boundary in the request to ensure the boundary follows the specification.\n */\n boundary?: string;\n}\n\n/**\n * Types of bodies supported on the request.\n * NodeJS.ReadableStream and () =\\> NodeJS.ReadableStream is Node only.\n * Blob, ReadableStream<Uint8Array>, and () =\\> ReadableStream<Uint8Array> are browser only.\n */\nexport type RequestBodyType =\n | NodeJS.ReadableStream\n | (() => NodeJS.ReadableStream)\n | ReadableStream<Uint8Array>\n | (() => ReadableStream<Uint8Array>)\n | Blob\n | ArrayBuffer\n | ArrayBufferView\n | FormData\n | string\n | null;\n\n/**\n * An interface compatible with NodeJS's `http.Agent`.\n * We want to avoid publicly re-exporting the actual interface,\n * since it might vary across runtime versions.\n */\nexport interface Agent {\n /**\n * Destroy any sockets that are currently in use by the agent.\n */\n destroy(): void;\n /**\n * For agents with keepAlive enabled, this sets the maximum number of sockets that will be left open in the free state.\n */\n maxFreeSockets: number;\n /**\n * Determines how many concurrent sockets the agent can have open per origin.\n */\n maxSockets: number;\n /**\n * An object which contains queues of requests that have not yet been assigned to sockets.\n */\n requests: unknown;\n /**\n * An object which contains arrays of sockets currently in use by the agent.\n */\n sockets: unknown;\n}\n\n/**\n * Metadata about a request being made by the pipeline.\n */\nexport interface PipelineRequest {\n /**\n * List of authentication schemes used for this specific request.\n * These schemes define how the request will be authenticated.\n *\n * If values are provided, these schemes override the client level authentication schemes.\n * If an empty array is provided, it explicitly specifies no authentication for the request.\n * If not provided at the request level, the client level authentication schemes will be used.\n */\n authSchemes?: AuthScheme[];\n\n /**\n * The URL to make the request to.\n */\n url: string;\n\n /**\n * The HTTP method to use when making the request.\n */\n method: HttpMethods;\n\n /**\n * The HTTP headers to use when making the request.\n */\n headers: HttpHeaders;\n\n /**\n * The number of milliseconds a request can take before automatically being terminated.\n * If the request is terminated, an `AbortError` is thrown.\n * Defaults to 0, which disables the timeout.\n */\n timeout: number;\n\n /**\n * Indicates whether the user agent should send cookies from the other domain in the case of cross-origin requests.\n * Defaults to false.\n */\n withCredentials: boolean;\n\n /**\n * A unique identifier for the request. Used for logging and tracing.\n */\n requestId: string;\n\n /**\n * The HTTP body content (if any)\n */\n body?: RequestBodyType;\n\n /**\n * Body for a multipart request.\n */\n multipartBody?: MultipartRequestBody;\n\n /**\n * To simulate a browser form post\n */\n formData?: FormDataMap;\n\n /**\n * A list of response status codes whose corresponding PipelineResponse body should be treated as a stream.\n * When streamResponseStatusCodes contains the value Number.POSITIVE_INFINITY any status would be treated as a stream.\n */\n streamResponseStatusCodes?: Set<number>;\n\n /**\n * Proxy configuration.\n */\n proxySettings?: ProxySettings;\n\n /**\n * If the connection should not be reused.\n */\n disableKeepAlive?: boolean;\n\n /**\n * Used to abort the request later.\n */\n abortSignal?: AbortSignal;\n\n /**\n * Callback which fires upon upload progress.\n */\n onUploadProgress?: (progress: TransferProgressEvent) => void;\n\n /** Callback which fires upon download progress. */\n onDownloadProgress?: (progress: TransferProgressEvent) => void;\n\n /** Set to true if the request is sent over HTTP instead of HTTPS */\n allowInsecureConnection?: boolean;\n\n /**\n * NODEJS ONLY\n *\n * A Node-only option to provide a custom `http.Agent`/`https.Agent`.\n * Does nothing when running in the browser.\n */\n agent?: Agent;\n\n /**\n * BROWSER ONLY\n *\n * A browser only option to enable browser Streams. If this option is set and a response is a stream\n * the response will have a property `browserStream` instead of `blobBody` which will be undefined.\n *\n * Default value is false\n */\n enableBrowserStreams?: boolean;\n\n /** Settings for configuring TLS authentication */\n tlsSettings?: TlsSettings;\n\n /**\n * Additional options to set on the request. This provides a way to override\n * existing ones or provide request properties that are not declared.\n *\n * For possible valid properties, see\n * - NodeJS https.request options: https://nodejs.org/api/http.html#httprequestoptions-callback\n * - Browser RequestInit: https://developer.mozilla.org/en-US/docs/Web/API/RequestInit\n *\n * WARNING: Options specified here will override any properties of same names when request is sent by {@link HttpClient}.\n */\n requestOverrides?: Record<string, unknown>;\n}\n\n/**\n * Metadata about a response received by the pipeline.\n */\nexport interface PipelineResponse {\n /**\n * The request that generated this response.\n */\n request: PipelineRequest;\n /**\n * The HTTP status code of the response.\n */\n status: number;\n /**\n * The HTTP response headers.\n */\n headers: HttpHeaders;\n\n /**\n * The response body as text (string format)\n */\n bodyAsText?: string | null;\n\n /**\n * BROWSER ONLY\n *\n * The response body as a browser Blob.\n * Always undefined in node.js.\n */\n blobBody?: Promise<Blob>;\n\n /**\n * BROWSER ONLY\n *\n * The response body as a browser ReadableStream.\n * Always undefined in node.js.\n */\n browserStreamBody?: ReadableStream<Uint8Array>;\n\n /**\n * NODEJS ONLY\n *\n * The response body as a node.js Readable stream.\n * Always undefined in the browser.\n */\n readableStreamBody?: NodeJS.ReadableStream;\n}\n\n/**\n * A simple interface for making a pipeline request and receiving a response.\n */\nexport type SendRequest = (request: PipelineRequest) => Promise<PipelineResponse>;\n\n/**\n * The required interface for a client that makes HTTP requests\n * on behalf of a pipeline.\n */\nexport interface HttpClient {\n /**\n * The method that makes the request and returns a response.\n */\n sendRequest: SendRequest;\n}\n\n/**\n * Fired in response to upload or download progress.\n */\nexport type TransferProgressEvent = {\n /**\n * The number of bytes loaded so far.\n */\n loadedBytes: number;\n};\n\n// UNBRANDED DIFFERENCE: HttpMethods are defined at the top level in unbranded instead of core-util since we don't\n// need to worry about creating a cyclic dependency\n/**\n * Supported HTTP methods to use when making requests.\n */\nexport type HttpMethods =\n | \"GET\"\n | \"PUT\"\n | \"POST\"\n | \"DELETE\"\n | \"PATCH\"\n | \"HEAD\"\n | \"OPTIONS\"\n | \"TRACE\";\n\n/**\n * Options to configure a proxy for outgoing requests (Node.js only).\n */\nexport interface ProxySettings {\n /**\n * The proxy's host address.\n * Must include the protocol (e.g., http:// or https://).\n */\n host: string;\n\n /**\n * The proxy host's port.\n */\n port: number;\n\n /**\n * The user name to authenticate with the proxy, if required.\n */\n username?: string;\n\n /**\n * The password to authenticate with the proxy, if required.\n */\n password?: string;\n}\n\n/**\n * Each form data entry can be a string, Blob, or a File. If you wish to pass a file with a name but do not have\n * access to the File class, you can use the createFile helper to create one.\n */\nexport type FormDataValue = string | Blob | File;\n\n/**\n * A simple object that provides form data, as if from a browser form.\n */\nexport type FormDataMap = { [key: string]: FormDataValue | FormDataValue[] };\n\n/**\n * Options that control how to retry failed requests.\n */\nexport interface PipelineRetryOptions {\n /**\n * The maximum number of retry attempts. Defaults to 3.\n */\n maxRetries?: number;\n\n /**\n * The amount of delay in milliseconds between retry attempts. Defaults to 1000\n * (1 second). The delay increases exponentially with each retry up to a maximum\n * specified by maxRetryDelayInMs.\n */\n retryDelayInMs?: number;\n\n /**\n * The maximum delay in milliseconds allowed before retrying an operation. Defaults\n * to 64000 (64 seconds).\n */\n maxRetryDelayInMs?: number;\n}\n\n/**\n * Represents a certificate credential for authentication.\n */\nexport interface CertificateCredential {\n /**\n * Optionally override the trusted CA certificates. Default is to trust\n * the well-known CAs curated by Mozilla. Mozilla's CAs are completely\n * replaced when CAs are explicitly specified using this option.\n */\n ca?: string | Buffer | Array<string | Buffer> | undefined;\n /**\n * Cert chains in PEM format. One cert chain should be provided per\n * private key. Each cert chain should consist of the PEM formatted\n * certificate for a provided private key, followed by the PEM\n * formatted intermediate certificates (if any), in order, and not\n * including the root CA (the root CA must be pre-known to the peer,\n * see ca). When providing multiple cert chains, they do not have to\n * be in the same order as their private keys in key. If the\n * intermediate certificates are not provided, the peer will not be\n * able to validate the certificate, and the handshake will fail.\n */\n cert?: string | Buffer | Array<string | Buffer> | undefined;\n /**\n * Private keys in PEM format. PEM allows the option of private keys\n * being encrypted. Encrypted keys will be decrypted with\n * options.passphrase. Multiple keys using different algorithms can be\n * provided either as an array of unencrypted key strings or buffers,\n * or an array of objects in the form `{pem: <string|buffer>[,passphrase: <string>]}`.\n * The object form can only occur in an array.object.passphrase is optional.\n * Encrypted keys will be decrypted with object.passphrase if provided, or options.passphrase if it is not.\n */\n key?: string | Buffer | Array<Buffer | KeyObject> | undefined;\n /**\n * Shared passphrase used for a single private key and/or a PFX.\n */\n passphrase?: string | undefined;\n /**\n * PFX or PKCS12 encoded private key and certificate chain. pfx is an\n * alternative to providing key and cert individually. PFX is usually\n * encrypted, if it is, passphrase will be used to decrypt it. Multiple\n * PFX can be provided either as an array of unencrypted PFX buffers,\n * or an array of objects in the form `{buf: <string|buffer>[,passphrase: <string>]}`.\n * The object form can only occur in an array.object.passphrase is optional.\n * Encrypted PFX will be decrypted with object.passphrase if provided, or options.passphrase if it is not.\n */\n pfx?: string | Buffer | Array<string | Buffer | PxfObject> | undefined;\n}\n\n/**\n * Represents a certificate for TLS authentication.\n */\nexport interface TlsSettings {\n /**\n * Optionally override the trusted CA certificates. Default is to trust\n * the well-known CAs curated by Mozilla. Mozilla's CAs are completely\n * replaced when CAs are explicitly specified using this option.\n */\n ca?: string | Buffer | Array<string | Buffer> | undefined;\n /**\n * Cert chains in PEM format. One cert chain should be provided per\n * private key. Each cert chain should consist of the PEM formatted\n * certificate for a provided private key, followed by the PEM\n * formatted intermediate certificates (if any), in order, and not\n * including the root CA (the root CA must be pre-known to the peer,\n * see ca). When providing multiple cert chains, they do not have to\n * be in the same order as their private keys in key. If the\n * intermediate certificates are not provided, the peer will not be\n * able to validate the certificate, and the handshake will fail.\n */\n cert?: string | Buffer | Array<string | Buffer> | undefined;\n /**\n * Private keys in PEM format. PEM allows the option of private keys\n * being encrypted. Encrypted keys will be decrypted with\n * options.passphrase. Multiple keys using different algorithms can be\n * provided either as an array of unencrypted key strings or buffers,\n * or an array of objects in the form `{pem: <string|buffer>[,passphrase: <string>]}`.\n * The object form can only occur in an array.object.passphrase is optional.\n * Encrypted keys will be decrypted with object.passphrase if provided, or options.passphrase if it is not.\n */\n key?: string | Buffer | Array<Buffer | KeyObject> | undefined;\n /**\n * Shared passphrase used for a single private key and/or a PFX.\n */\n passphrase?: string | undefined;\n /**\n * PFX or PKCS12 encoded private key and certificate chain. pfx is an\n * alternative to providing key and cert individually. PFX is usually\n * encrypted, if it is, passphrase will be used to decrypt it. Multiple\n * PFX can be provided either as an array of unencrypted PFX buffers,\n * or an array of objects in the form `{buf: <string|buffer>[,passphrase: <string>]}`.\n * The object form can only occur in an array.object.passphrase is optional.\n * Encrypted PFX will be decrypted with object.passphrase if provided, or options.passphrase if it is not.\n */\n pfx?: string | Buffer | Array<string | Buffer | PxfObject> | undefined;\n}\n\n/**\n * An interface compatible with NodeJS's `tls.KeyObject`.\n * We want to avoid publicly re-exporting the actual interface,\n * since it might vary across runtime versions.\n */\nexport interface KeyObject {\n /**\n * Private keys in PEM format.\n */\n pem: string | Buffer;\n /**\n * Optional passphrase.\n */\n passphrase?: string | undefined;\n}\n\n/**\n * An interface compatible with NodeJS's `tls.PxfObject`.\n * We want to avoid publicly re-exporting the actual interface,\n * since it might vary across runtime versions.\n */\nexport interface PxfObject {\n /**\n * PFX or PKCS12 encoded private key and certificate chain.\n */\n buf: string | Buffer;\n /**\n * Optional passphrase.\n */\n passphrase?: string | undefined;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
@@ -26,3 +26,4 @@ const logger = (0, import_logger.createClientLogger)("ts-http-runtime");
26
26
  0 && (module.exports = {
27
27
  logger
28
28
  });
29
+ //# sourceMappingURL=log.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/log.ts"],
3
+ "sources": ["../../src/log.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createClientLogger } from \"./logger/logger.js\";\nexport const logger = createClientLogger(\"ts-http-runtime\");\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAAmC;AAC5B,MAAM,aAAS,kCAAmB,iBAAiB;",
6
6
  "names": []
@@ -180,3 +180,4 @@ function extend(namespace) {
180
180
  return newDebugger;
181
181
  }
182
182
  var debug_default = debugObj;
183
+ //# sourceMappingURL=debug.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/logger/debug.ts"],
3
+ "sources": ["../../../src/logger/debug.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { log } from \"./log.js\";\n\n/**\n * A simple mechanism for enabling logging.\n * Intended to mimic the publicly available `debug` package.\n */\nexport interface Debug {\n /**\n * Creates a new logger with the given namespace.\n */\n (namespace: string): Debugger;\n /**\n * The default log method (defaults to console)\n */\n log: (...args: any[]) => void;\n /**\n * Enables a particular set of namespaces.\n * To enable multiple separate them with commas, e.g. \"info,debug\".\n * Supports wildcards, e.g. \"typeSpecRuntime:*\"\n * Supports skip syntax, e.g. \"typeSpecRuntime:*,-typeSpecRuntime:storage:*\" will enable\n * everything under typeSpecRuntime except for things under typeSpecRuntime:storage.\n */\n enable: (namespaces: string) => void;\n /**\n * Checks if a particular namespace is enabled.\n */\n enabled: (namespace: string) => boolean;\n /**\n * Disables all logging, returns what was previously enabled.\n */\n disable: () => string;\n}\n\n/**\n * A log function that can be dynamically enabled and redirected.\n */\nexport interface Debugger {\n /**\n * Logs the given arguments to the `log` method.\n */\n (...args: any[]): void;\n /**\n * True if this logger is active and logging.\n */\n enabled: boolean;\n /**\n * Used to cleanup/remove this logger.\n */\n destroy: () => boolean;\n /**\n * The current log method. Can be overridden to redirect output.\n */\n log: (...args: any[]) => void;\n /**\n * The namespace of this logger.\n */\n namespace: string;\n /**\n * Extends this logger with a child namespace.\n * Namespaces are separated with a ':' character.\n */\n extend: (namespace: string) => Debugger;\n}\n\nconst debugEnvVariable =\n (typeof process !== \"undefined\" && process.env && process.env.DEBUG) || undefined;\n\nlet enabledString: string | undefined;\nlet enabledNamespaces: string[] = [];\nlet skippedNamespaces: string[] = [];\nconst debuggers: Debugger[] = [];\n\nif (debugEnvVariable) {\n enable(debugEnvVariable);\n}\n\nconst debugObj: Debug = Object.assign(\n (namespace: string): Debugger => {\n return createDebugger(namespace);\n },\n {\n enable,\n enabled,\n disable,\n log,\n },\n);\n\nfunction enable(namespaces: string): void {\n enabledString = namespaces;\n enabledNamespaces = [];\n skippedNamespaces = [];\n const namespaceList = namespaces.split(\",\").map((ns) => ns.trim());\n for (const ns of namespaceList) {\n if (ns.startsWith(\"-\")) {\n skippedNamespaces.push(ns.substring(1));\n } else {\n enabledNamespaces.push(ns);\n }\n }\n for (const instance of debuggers) {\n instance.enabled = enabled(instance.namespace);\n }\n}\n\nfunction enabled(namespace: string): boolean {\n if (namespace.endsWith(\"*\")) {\n return true;\n }\n\n for (const skipped of skippedNamespaces) {\n if (namespaceMatches(namespace, skipped)) {\n return false;\n }\n }\n for (const enabledNamespace of enabledNamespaces) {\n if (namespaceMatches(namespace, enabledNamespace)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Given a namespace, check if it matches a pattern.\n * Patterns only have a single wildcard character which is *.\n * The behavior of * is that it matches zero or more other characters.\n */\nfunction namespaceMatches(namespace: string, patternToMatch: string): boolean {\n // simple case, no pattern matching required\n if (patternToMatch.indexOf(\"*\") === -1) {\n return namespace === patternToMatch;\n }\n\n let pattern = patternToMatch;\n\n // normalize successive * if needed\n if (patternToMatch.indexOf(\"**\") !== -1) {\n const patternParts = [];\n let lastCharacter = \"\";\n for (const character of patternToMatch) {\n if (character === \"*\" && lastCharacter === \"*\") {\n continue;\n } else {\n lastCharacter = character;\n patternParts.push(character);\n }\n }\n pattern = patternParts.join(\"\");\n }\n\n let namespaceIndex = 0;\n let patternIndex = 0;\n const patternLength = pattern.length;\n const namespaceLength = namespace.length;\n let lastWildcard = -1;\n let lastWildcardNamespace = -1;\n\n while (namespaceIndex < namespaceLength && patternIndex < patternLength) {\n if (pattern[patternIndex] === \"*\") {\n lastWildcard = patternIndex;\n patternIndex++;\n if (patternIndex === patternLength) {\n // if wildcard is the last character, it will match the remaining namespace string\n return true;\n }\n // now we let the wildcard eat characters until we match the next literal in the pattern\n while (namespace[namespaceIndex] !== pattern[patternIndex]) {\n namespaceIndex++;\n // reached the end of the namespace without a match\n if (namespaceIndex === namespaceLength) {\n return false;\n }\n }\n\n // now that we have a match, let's try to continue on\n // however, it's possible we could find a later match\n // so keep a reference in case we have to backtrack\n lastWildcardNamespace = namespaceIndex;\n namespaceIndex++;\n patternIndex++;\n continue;\n } else if (pattern[patternIndex] === namespace[namespaceIndex]) {\n // simple case: literal pattern matches so keep going\n patternIndex++;\n namespaceIndex++;\n } else if (lastWildcard >= 0) {\n // special case: we don't have a literal match, but there is a previous wildcard\n // which we can backtrack to and try having the wildcard eat the match instead\n patternIndex = lastWildcard + 1;\n namespaceIndex = lastWildcardNamespace + 1;\n // we've reached the end of the namespace without a match\n if (namespaceIndex === namespaceLength) {\n return false;\n }\n // similar to the previous logic, let's keep going until we find the next literal match\n while (namespace[namespaceIndex] !== pattern[patternIndex]) {\n namespaceIndex++;\n if (namespaceIndex === namespaceLength) {\n return false;\n }\n }\n lastWildcardNamespace = namespaceIndex;\n namespaceIndex++;\n patternIndex++;\n continue;\n } else {\n return false;\n }\n }\n\n const namespaceDone = namespaceIndex === namespace.length;\n const patternDone = patternIndex === pattern.length;\n // this is to detect the case of an unneeded final wildcard\n // e.g. the pattern `ab*` should match the string `ab`\n const trailingWildCard = patternIndex === pattern.length - 1 && pattern[patternIndex] === \"*\";\n return namespaceDone && (patternDone || trailingWildCard);\n}\n\nfunction disable(): string {\n const result = enabledString || \"\";\n enable(\"\");\n return result;\n}\n\nfunction createDebugger(namespace: string): Debugger {\n const newDebugger: Debugger = Object.assign(debug, {\n enabled: enabled(namespace),\n destroy,\n log: debugObj.log,\n namespace,\n extend,\n });\n\n function debug(...args: any[]): void {\n if (!newDebugger.enabled) {\n return;\n }\n if (args.length > 0) {\n args[0] = `${namespace} ${args[0]}`;\n }\n newDebugger.log(...args);\n }\n\n debuggers.push(newDebugger);\n\n return newDebugger;\n}\n\nfunction destroy(this: Debugger): boolean {\n const index = debuggers.indexOf(this);\n if (index >= 0) {\n debuggers.splice(index, 1);\n return true;\n }\n return false;\n}\n\nfunction extend(this: Debugger, namespace: string): Debugger {\n const newDebugger = createDebugger(`${this.namespace}:${namespace}`);\n newDebugger.log = this.log;\n return newDebugger;\n}\n\nexport default debugObj;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iBAAoB;AAgEpB,MAAM,mBACH,OAAO,YAAY,eAAe,QAAQ,OAAO,QAAQ,IAAI,SAAU;AAE1E,IAAI;AACJ,IAAI,oBAA8B,CAAC;AACnC,IAAI,oBAA8B,CAAC;AACnC,MAAM,YAAwB,CAAC;AAE/B,IAAI,kBAAkB;AACpB,SAAO,gBAAgB;AACzB;AAEA,MAAM,WAAkB,OAAO;AAAA,EAC7B,CAAC,cAAgC;AAC/B,WAAO,eAAe,SAAS;AAAA,EACjC;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,OAAO,YAA0B;AACxC,kBAAgB;AAChB,sBAAoB,CAAC;AACrB,sBAAoB,CAAC;AACrB,QAAM,gBAAgB,WAAW,MAAM,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACjE,aAAW,MAAM,eAAe;AAC9B,QAAI,GAAG,WAAW,GAAG,GAAG;AACtB,wBAAkB,KAAK,GAAG,UAAU,CAAC,CAAC;AAAA,IACxC,OAAO;AACL,wBAAkB,KAAK,EAAE;AAAA,IAC3B;AAAA,EACF;AACA,aAAW,YAAY,WAAW;AAChC,aAAS,UAAU,QAAQ,SAAS,SAAS;AAAA,EAC/C;AACF;AAEA,SAAS,QAAQ,WAA4B;AAC3C,MAAI,UAAU,SAAS,GAAG,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,aAAW,WAAW,mBAAmB;AACvC,QAAI,iBAAiB,WAAW,OAAO,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AACA,aAAW,oBAAoB,mBAAmB;AAChD,QAAI,iBAAiB,WAAW,gBAAgB,GAAG;AACjD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAOA,SAAS,iBAAiB,WAAmB,gBAAiC;AAE5E,MAAI,eAAe,QAAQ,GAAG,MAAM,IAAI;AACtC,WAAO,cAAc;AAAA,EACvB;AAEA,MAAI,UAAU;AAGd,MAAI,eAAe,QAAQ,IAAI,MAAM,IAAI;AACvC,UAAM,eAAe,CAAC;AACtB,QAAI,gBAAgB;AACpB,eAAW,aAAa,gBAAgB;AACtC,UAAI,cAAc,OAAO,kBAAkB,KAAK;AAC9C;AAAA,MACF,OAAO;AACL,wBAAgB;AAChB,qBAAa,KAAK,SAAS;AAAA,MAC7B;AAAA,IACF;AACA,cAAU,aAAa,KAAK,EAAE;AAAA,EAChC;AAEA,MAAI,iBAAiB;AACrB,MAAI,eAAe;AACnB,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,kBAAkB,UAAU;AAClC,MAAI,eAAe;AACnB,MAAI,wBAAwB;AAE5B,SAAO,iBAAiB,mBAAmB,eAAe,eAAe;AACvE,QAAI,QAAQ,YAAY,MAAM,KAAK;AACjC,qBAAe;AACf;AACA,UAAI,iBAAiB,eAAe;AAElC,eAAO;AAAA,MACT;AAEA,aAAO,UAAU,cAAc,MAAM,QAAQ,YAAY,GAAG;AAC1D;AAEA,YAAI,mBAAmB,iBAAiB;AACtC,iBAAO;AAAA,QACT;AAAA,MACF;AAKA,8BAAwB;AACxB;AACA;AACA;AAAA,IACF,WAAW,QAAQ,YAAY,MAAM,UAAU,cAAc,GAAG;AAE9D;AACA;AAAA,IACF,WAAW,gBAAgB,GAAG;AAG5B,qBAAe,eAAe;AAC9B,uBAAiB,wBAAwB;AAEzC,UAAI,mBAAmB,iBAAiB;AACtC,eAAO;AAAA,MACT;AAEA,aAAO,UAAU,cAAc,MAAM,QAAQ,YAAY,GAAG;AAC1D;AACA,YAAI,mBAAmB,iBAAiB;AACtC,iBAAO;AAAA,QACT;AAAA,MACF;AACA,8BAAwB;AACxB;AACA;AACA;AAAA,IACF,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,gBAAgB,mBAAmB,UAAU;AACnD,QAAM,cAAc,iBAAiB,QAAQ;AAG7C,QAAM,mBAAmB,iBAAiB,QAAQ,SAAS,KAAK,QAAQ,YAAY,MAAM;AAC1F,SAAO,kBAAkB,eAAe;AAC1C;AAEA,SAAS,UAAkB;AACzB,QAAM,SAAS,iBAAiB;AAChC,SAAO,EAAE;AACT,SAAO;AACT;AAEA,SAAS,eAAe,WAA6B;AACnD,QAAM,cAAwB,OAAO,OAAO,OAAO;AAAA,IACjD,SAAS,QAAQ,SAAS;AAAA,IAC1B;AAAA,IACA,KAAK,SAAS;AAAA,IACd;AAAA,IACA;AAAA,EACF,CAAC;AAED,WAAS,SAAS,MAAmB;AACnC,QAAI,CAAC,YAAY,SAAS;AACxB;AAAA,IACF;AACA,QAAI,KAAK,SAAS,GAAG;AACnB,WAAK,CAAC,IAAI,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC;AAAA,IACnC;AACA,gBAAY,IAAI,GAAG,IAAI;AAAA,EACzB;AAEA,YAAU,KAAK,WAAW;AAE1B,SAAO;AACT;AAEA,SAAS,UAAiC;AACxC,QAAM,QAAQ,UAAU,QAAQ,IAAI;AACpC,MAAI,SAAS,GAAG;AACd,cAAU,OAAO,OAAO,CAAC;AACzB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,OAAuB,WAA6B;AAC3D,QAAM,cAAc,eAAe,GAAG,KAAK,SAAS,IAAI,SAAS,EAAE;AACnE,cAAY,MAAM,KAAK;AACvB,SAAO;AACT;AAEA,IAAO,gBAAQ;",
6
6
  "names": []
@@ -25,3 +25,4 @@ var import_logger = require("./logger.js");
25
25
  0 && (module.exports = {
26
26
  createLoggerContext
27
27
  });
28
+ //# sourceMappingURL=internal.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/logger/internal.ts"],
3
+ "sources": ["../../../src/logger/internal.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport {\n createLoggerContext,\n type CreateLoggerContextOptions,\n type LoggerContext,\n} from \"./logger.js\";\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAIO;",
6
6
  "names": []
@@ -40,3 +40,4 @@ function log(...args) {
40
40
  0 && (module.exports = {
41
41
  log
42
42
  });
43
+ //# sourceMappingURL=log.common.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/logger/log.common.ts"],
3
+ "sources": ["../../../src/logger/log.common.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport function log(...args: any[]): void {\n if (args.length > 0) {\n const firstArg = String(args[0]);\n if (firstArg.includes(\":error\")) {\n console.error(...args);\n } else if (firstArg.includes(\":warning\")) {\n console.warn(...args);\n } else if (firstArg.includes(\":info\")) {\n console.info(...args);\n } else if (firstArg.includes(\":verbose\")) {\n console.debug(...args);\n } else {\n console.debug(...args);\n }\n }\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,SAAS,OAAO,MAAmB;AACxC,MAAI,KAAK,SAAS,GAAG;AACnB,UAAM,WAAW,OAAO,KAAK,CAAC,CAAC;AAC/B,QAAI,SAAS,SAAS,QAAQ,GAAG;AAC/B,cAAQ,MAAM,GAAG,IAAI;AAAA,IACvB,WAAW,SAAS,SAAS,UAAU,GAAG;AACxC,cAAQ,KAAK,GAAG,IAAI;AAAA,IACtB,WAAW,SAAS,SAAS,OAAO,GAAG;AACrC,cAAQ,KAAK,GAAG,IAAI;AAAA,IACtB,WAAW,SAAS,SAAS,UAAU,GAAG;AACxC,cAAQ,MAAM,GAAG,IAAI;AAAA,IACvB,OAAO;AACL,cAAQ,MAAM,GAAG,IAAI;AAAA,IACvB;AAAA,EACF;AACF;",
6
6
  "names": []
@@ -40,3 +40,4 @@ function log(message, ...args) {
40
40
  0 && (module.exports = {
41
41
  log
42
42
  });
43
+ //# sourceMappingURL=log.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/ts-http-runtime/src/logger/log.ts"],
3
+ "sources": ["../../../src/logger/log.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { EOL } from \"node:os\";\nimport util from \"node:util\";\nimport process from \"node:process\";\n\nexport function log(message: unknown, ...args: any[]): void {\n process.stderr.write(`${util.format(message, ...args)}${EOL}`);\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAoB;AACpB,uBAAiB;AACjB,0BAAoB;AAEb,SAAS,IAAI,YAAqB,MAAmB;AAC1D,sBAAAA,QAAQ,OAAO,MAAM,GAAG,iBAAAC,QAAK,OAAO,SAAS,GAAG,IAAI,CAAC,GAAG,kBAAG,EAAE;AAC/D;",
6
6
  "names": ["process", "util"]
@@ -141,3 +141,4 @@ function createClientLogger(namespace) {
141
141
  getLogLevel,
142
142
  setLogLevel
143
143
  });
144
+ //# sourceMappingURL=logger.js.map