@typespec/ts-http-runtime 1.0.0-alpha.20231023.3

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 (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/dist/index.js +3509 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist-esm/src/abort-controller/AbortError.js +27 -0
  6. package/dist-esm/src/abort-controller/AbortError.js.map +1 -0
  7. package/dist-esm/src/abort-controller/AbortSignalLike.js +4 -0
  8. package/dist-esm/src/abort-controller/AbortSignalLike.js.map +1 -0
  9. package/dist-esm/src/accessTokenCache.js +32 -0
  10. package/dist-esm/src/accessTokenCache.js.map +1 -0
  11. package/dist-esm/src/auth/keyCredential.js +4 -0
  12. package/dist-esm/src/auth/keyCredential.js.map +1 -0
  13. package/dist-esm/src/auth/tokenCredential.js +19 -0
  14. package/dist-esm/src/auth/tokenCredential.js.map +1 -0
  15. package/dist-esm/src/client/apiVersionPolicy.js +23 -0
  16. package/dist-esm/src/client/apiVersionPolicy.js.map +1 -0
  17. package/dist-esm/src/client/clientHelpers.js +52 -0
  18. package/dist-esm/src/client/clientHelpers.js.map +1 -0
  19. package/dist-esm/src/client/common.js +4 -0
  20. package/dist-esm/src/client/common.js.map +1 -0
  21. package/dist-esm/src/client/getClient.js +86 -0
  22. package/dist-esm/src/client/getClient.js.map +1 -0
  23. package/dist-esm/src/client/helpers/getBinaryBody.js +13 -0
  24. package/dist-esm/src/client/helpers/getBinaryBody.js.map +1 -0
  25. package/dist-esm/src/client/helpers/isReadableStream.browser.js +12 -0
  26. package/dist-esm/src/client/helpers/isReadableStream.browser.js.map +1 -0
  27. package/dist-esm/src/client/helpers/isReadableStream.js +10 -0
  28. package/dist-esm/src/client/helpers/isReadableStream.js.map +1 -0
  29. package/dist-esm/src/client/keyCredentialAuthenticationPolicy.js +16 -0
  30. package/dist-esm/src/client/keyCredentialAuthenticationPolicy.js.map +1 -0
  31. package/dist-esm/src/client/operationOptionHelpers.js +22 -0
  32. package/dist-esm/src/client/operationOptionHelpers.js.map +1 -0
  33. package/dist-esm/src/client/restError.js +27 -0
  34. package/dist-esm/src/client/restError.js.map +1 -0
  35. package/dist-esm/src/client/sendRequest.js +195 -0
  36. package/dist-esm/src/client/sendRequest.js.map +1 -0
  37. package/dist-esm/src/client/urlHelpers.js +100 -0
  38. package/dist-esm/src/client/urlHelpers.js.map +1 -0
  39. package/dist-esm/src/constants.js +5 -0
  40. package/dist-esm/src/constants.js.map +1 -0
  41. package/dist-esm/src/createPipelineFromOptions.js +39 -0
  42. package/dist-esm/src/createPipelineFromOptions.js.map +1 -0
  43. package/dist-esm/src/defaultHttpClient.browser.js +10 -0
  44. package/dist-esm/src/defaultHttpClient.browser.js.map +1 -0
  45. package/dist-esm/src/defaultHttpClient.js +10 -0
  46. package/dist-esm/src/defaultHttpClient.js.map +1 -0
  47. package/dist-esm/src/defaultHttpClient.native.js +10 -0
  48. package/dist-esm/src/defaultHttpClient.native.js.map +1 -0
  49. package/dist-esm/src/fetchHttpClient.js +268 -0
  50. package/dist-esm/src/fetchHttpClient.js.map +1 -0
  51. package/dist-esm/src/httpHeaders.js +89 -0
  52. package/dist-esm/src/httpHeaders.js.map +1 -0
  53. package/dist-esm/src/index.js +41 -0
  54. package/dist-esm/src/index.js.map +1 -0
  55. package/dist-esm/src/interfaces.js +4 -0
  56. package/dist-esm/src/interfaces.js.map +1 -0
  57. package/dist-esm/src/log.js +5 -0
  58. package/dist-esm/src/log.js.map +1 -0
  59. package/dist-esm/src/logger/debug.js +93 -0
  60. package/dist-esm/src/logger/debug.js.map +1 -0
  61. package/dist-esm/src/logger/log.browser.js +23 -0
  62. package/dist-esm/src/logger/log.browser.js.map +1 -0
  63. package/dist-esm/src/logger/log.js +8 -0
  64. package/dist-esm/src/logger/log.js.map +1 -0
  65. package/dist-esm/src/logger/logger.js +99 -0
  66. package/dist-esm/src/logger/logger.js.map +1 -0
  67. package/dist-esm/src/nodeHttpClient.js +332 -0
  68. package/dist-esm/src/nodeHttpClient.js.map +1 -0
  69. package/dist-esm/src/pipeline.js +262 -0
  70. package/dist-esm/src/pipeline.js.map +1 -0
  71. package/dist-esm/src/pipelineRequest.js +35 -0
  72. package/dist-esm/src/pipelineRequest.js.map +1 -0
  73. package/dist-esm/src/policies/bearerTokenAuthenticationPolicy.js +108 -0
  74. package/dist-esm/src/policies/bearerTokenAuthenticationPolicy.js.map +1 -0
  75. package/dist-esm/src/policies/decompressResponsePolicy.browser.js +14 -0
  76. package/dist-esm/src/policies/decompressResponsePolicy.browser.js.map +1 -0
  77. package/dist-esm/src/policies/decompressResponsePolicy.js +23 -0
  78. package/dist-esm/src/policies/decompressResponsePolicy.js.map +1 -0
  79. package/dist-esm/src/policies/defaultRetryPolicy.js +26 -0
  80. package/dist-esm/src/policies/defaultRetryPolicy.js.map +1 -0
  81. package/dist-esm/src/policies/exponentialRetryPolicy.js +22 -0
  82. package/dist-esm/src/policies/exponentialRetryPolicy.js.map +1 -0
  83. package/dist-esm/src/policies/formDataPolicy.browser.js +43 -0
  84. package/dist-esm/src/policies/formDataPolicy.browser.js.map +1 -0
  85. package/dist-esm/src/policies/formDataPolicy.js +79 -0
  86. package/dist-esm/src/policies/formDataPolicy.js.map +1 -0
  87. package/dist-esm/src/policies/logPolicy.js +34 -0
  88. package/dist-esm/src/policies/logPolicy.js.map +1 -0
  89. package/dist-esm/src/policies/proxyPolicy.browser.js +27 -0
  90. package/dist-esm/src/policies/proxyPolicy.browser.js.map +1 -0
  91. package/dist-esm/src/policies/proxyPolicy.js +190 -0
  92. package/dist-esm/src/policies/proxyPolicy.js.map +1 -0
  93. package/dist-esm/src/policies/redirectPolicy.js +52 -0
  94. package/dist-esm/src/policies/redirectPolicy.js.map +1 -0
  95. package/dist-esm/src/policies/retryPolicy.js +106 -0
  96. package/dist-esm/src/policies/retryPolicy.js.map +1 -0
  97. package/dist-esm/src/policies/systemErrorRetryPolicy.js +27 -0
  98. package/dist-esm/src/policies/systemErrorRetryPolicy.js.map +1 -0
  99. package/dist-esm/src/policies/throttlingRetryPolicy.js +29 -0
  100. package/dist-esm/src/policies/throttlingRetryPolicy.js.map +1 -0
  101. package/dist-esm/src/policies/tlsPolicy.js +22 -0
  102. package/dist-esm/src/policies/tlsPolicy.js.map +1 -0
  103. package/dist-esm/src/policies/tracingPolicy.js +120 -0
  104. package/dist-esm/src/policies/tracingPolicy.js.map +1 -0
  105. package/dist-esm/src/policies/userAgentPolicy.js +26 -0
  106. package/dist-esm/src/policies/userAgentPolicy.js.map +1 -0
  107. package/dist-esm/src/restError.js +48 -0
  108. package/dist-esm/src/restError.js.map +1 -0
  109. package/dist-esm/src/retryStrategies/exponentialRetryStrategy.js +70 -0
  110. package/dist-esm/src/retryStrategies/exponentialRetryStrategy.js.map +1 -0
  111. package/dist-esm/src/retryStrategies/retryStrategy.js +4 -0
  112. package/dist-esm/src/retryStrategies/retryStrategy.js.map +1 -0
  113. package/dist-esm/src/retryStrategies/throttlingRetryStrategy.js +74 -0
  114. package/dist-esm/src/retryStrategies/throttlingRetryStrategy.js.map +1 -0
  115. package/dist-esm/src/tracing/instrumenter.js +61 -0
  116. package/dist-esm/src/tracing/instrumenter.js.map +1 -0
  117. package/dist-esm/src/tracing/interfaces.js +4 -0
  118. package/dist-esm/src/tracing/interfaces.js.map +1 -0
  119. package/dist-esm/src/tracing/tracingClient.js +74 -0
  120. package/dist-esm/src/tracing/tracingClient.js.map +1 -0
  121. package/dist-esm/src/tracing/tracingContext.js +47 -0
  122. package/dist-esm/src/tracing/tracingContext.js.map +1 -0
  123. package/dist-esm/src/util/aborterUtils.js +21 -0
  124. package/dist-esm/src/util/aborterUtils.js.map +1 -0
  125. package/dist-esm/src/util/base64.browser.js +35 -0
  126. package/dist-esm/src/util/base64.browser.js.map +1 -0
  127. package/dist-esm/src/util/bytesEncoding.browser.js +82 -0
  128. package/dist-esm/src/util/bytesEncoding.browser.js.map +1 -0
  129. package/dist-esm/src/util/bytesEncoding.js +77 -0
  130. package/dist-esm/src/util/bytesEncoding.js.map +1 -0
  131. package/dist-esm/src/util/checkEnvironment.js +36 -0
  132. package/dist-esm/src/util/checkEnvironment.js.map +1 -0
  133. package/dist-esm/src/util/createAbortablePromise.js +42 -0
  134. package/dist-esm/src/util/createAbortablePromise.js.map +1 -0
  135. package/dist-esm/src/util/delay.js +22 -0
  136. package/dist-esm/src/util/delay.js.map +1 -0
  137. package/dist-esm/src/util/error.js +42 -0
  138. package/dist-esm/src/util/error.js.map +1 -0
  139. package/dist-esm/src/util/helpers.js +58 -0
  140. package/dist-esm/src/util/helpers.js.map +1 -0
  141. package/dist-esm/src/util/hex.js +21 -0
  142. package/dist-esm/src/util/hex.js.map +1 -0
  143. package/dist-esm/src/util/inspect.browser.js +4 -0
  144. package/dist-esm/src/util/inspect.browser.js.map +1 -0
  145. package/dist-esm/src/util/inspect.js +5 -0
  146. package/dist-esm/src/util/inspect.js.map +1 -0
  147. package/dist-esm/src/util/object.js +14 -0
  148. package/dist-esm/src/util/object.js.map +1 -0
  149. package/dist-esm/src/util/random.js +21 -0
  150. package/dist-esm/src/util/random.js.map +1 -0
  151. package/dist-esm/src/util/sanitizer.js +139 -0
  152. package/dist-esm/src/util/sanitizer.js.map +1 -0
  153. package/dist-esm/src/util/sha256.browser.js +61 -0
  154. package/dist-esm/src/util/sha256.browser.js.map +1 -0
  155. package/dist-esm/src/util/sha256.js +22 -0
  156. package/dist-esm/src/util/sha256.js.map +1 -0
  157. package/dist-esm/src/util/tokenCycler.js +149 -0
  158. package/dist-esm/src/util/tokenCycler.js.map +1 -0
  159. package/dist-esm/src/util/typeGuards.js +34 -0
  160. package/dist-esm/src/util/typeGuards.js.map +1 -0
  161. package/dist-esm/src/util/userAgent.js +30 -0
  162. package/dist-esm/src/util/userAgent.js.map +1 -0
  163. package/dist-esm/src/util/userAgentPlatform.browser.js +20 -0
  164. package/dist-esm/src/util/userAgentPlatform.browser.js.map +1 -0
  165. package/dist-esm/src/util/userAgentPlatform.js +17 -0
  166. package/dist-esm/src/util/userAgentPlatform.js.map +1 -0
  167. package/dist-esm/src/util/userAgentPlatform.native.js +24 -0
  168. package/dist-esm/src/util/userAgentPlatform.native.js.map +1 -0
  169. package/dist-esm/src/util/utf8.browser.js +26 -0
  170. package/dist-esm/src/util/utf8.browser.js.map +1 -0
  171. package/dist-esm/src/util/uuidUtils.browser.js +17 -0
  172. package/dist-esm/src/util/uuidUtils.browser.js.map +1 -0
  173. package/dist-esm/src/util/uuidUtils.js +22 -0
  174. package/dist-esm/src/util/uuidUtils.js.map +1 -0
  175. package/dist-esm/src/util/uuidUtils.native.js +43 -0
  176. package/dist-esm/src/util/uuidUtils.native.js.map +1 -0
  177. package/dist-esm/src/xhrHttpClient.js +177 -0
  178. package/dist-esm/src/xhrHttpClient.js.map +1 -0
  179. package/package.json +134 -0
  180. package/ts-http-runtime.shims.d.ts +12 -0
  181. package/types/ts-http-runtime.d.ts +2062 -0
@@ -0,0 +1,74 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { getInstrumenter } from "./instrumenter";
4
+ import { knownContextKeys } from "./tracingContext";
5
+ /**
6
+ * Creates a new tracing client.
7
+ *
8
+ * @param options - Options used to configure the tracing client.
9
+ * @returns - An instance of {@link TracingClient}.
10
+ */
11
+ export function createTracingClient(options) {
12
+ const { namespace, packageName, packageVersion } = options;
13
+ function startSpan(name, operationOptions, spanOptions) {
14
+ var _a;
15
+ const startSpanResult = getInstrumenter().startSpan(name, Object.assign(Object.assign({}, spanOptions), { packageName: packageName, packageVersion: packageVersion, tracingContext: (_a = operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions) === null || _a === void 0 ? void 0 : _a.tracingContext }));
16
+ let tracingContext = startSpanResult.tracingContext;
17
+ const span = startSpanResult.span;
18
+ if (!tracingContext.getValue(knownContextKeys.namespace)) {
19
+ tracingContext = tracingContext.setValue(knownContextKeys.namespace, namespace);
20
+ }
21
+ span.setAttribute("az.namespace", tracingContext.getValue(knownContextKeys.namespace));
22
+ const updatedOptions = Object.assign({}, operationOptions, {
23
+ tracingOptions: Object.assign(Object.assign({}, operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions), { tracingContext }),
24
+ });
25
+ return {
26
+ span,
27
+ updatedOptions,
28
+ };
29
+ }
30
+ async function withSpan(name, operationOptions, callback, spanOptions) {
31
+ const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions);
32
+ try {
33
+ const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => Promise.resolve(callback(updatedOptions, span)));
34
+ span.setStatus({ status: "success" });
35
+ return result;
36
+ }
37
+ catch (err) {
38
+ span.setStatus({ status: "error", error: err });
39
+ throw err;
40
+ }
41
+ finally {
42
+ span.end();
43
+ }
44
+ }
45
+ function withContext(context, callback, ...callbackArgs) {
46
+ return getInstrumenter().withContext(context, callback, ...callbackArgs);
47
+ }
48
+ /**
49
+ * Parses a traceparent header value into a span identifier.
50
+ *
51
+ * @param traceparentHeader - The traceparent header to parse.
52
+ * @returns An implementation-specific identifier for the span.
53
+ */
54
+ function parseTraceparentHeader(traceparentHeader) {
55
+ return getInstrumenter().parseTraceparentHeader(traceparentHeader);
56
+ }
57
+ /**
58
+ * Creates a set of request headers to propagate tracing information to a backend.
59
+ *
60
+ * @param tracingContext - The context containing the span to serialize.
61
+ * @returns The set of headers to add to a request.
62
+ */
63
+ function createRequestHeaders(tracingContext) {
64
+ return getInstrumenter().createRequestHeaders(tracingContext);
65
+ }
66
+ return {
67
+ startSpan,
68
+ withSpan,
69
+ withContext,
70
+ parseTraceparentHeader,
71
+ createRequestHeaders,
72
+ };
73
+ }
74
+ //# sourceMappingURL=tracingClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracingClient.js","sourceRoot":"","sources":["../../../src/tracing/tracingClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAYlC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAE3D,SAAS,SAAS,CAChB,IAAY,EACZ,gBAA0B,EAC1B,WAAgC;;QAKhC,MAAM,eAAe,GAAG,eAAe,EAAE,CAAC,SAAS,CAAC,IAAI,kCACnD,WAAW,KACd,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,0CAAE,cAAc,IAChE,CAAC;QACH,IAAI,cAAc,GAAG,eAAe,CAAC,cAAc,CAAC;QACpD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;YACxD,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SACjF;QACD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;QACvF,MAAM,cAAc,GAAuC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE;YAC7F,cAAc,kCAAO,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,KAAE,cAAc,GAAE;SACxE,CAAC,CAAC;QAEH,OAAO;YACL,IAAI;YACJ,cAAc;SACf,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,QAAQ,CAOrB,IAAY,EACZ,gBAAyB,EACzB,QAAkB,EAClB,WAAgC;QAEhC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAChF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,EAAE,CAClF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAChD,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACtC,OAAO,MAAqC,CAAC;SAC9C;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC;SACX;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED,SAAS,WAAW,CAIlB,OAAuB,EACvB,QAAkB,EAClB,GAAG,YAA0B;QAE7B,OAAO,eAAe,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACH,SAAS,sBAAsB,CAAC,iBAAyB;QACvD,OAAO,eAAe,EAAE,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACH,SAAS,oBAAoB,CAAC,cAA+B;QAC3D,OAAO,eAAe,EAAE,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,SAAS;QACT,QAAQ;QACR,WAAW;QACX,sBAAsB;QACtB,oBAAoB;KACrB,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n OperationTracingOptions,\n OptionsWithTracingContext,\n Resolved,\n TracingClient,\n TracingClientOptions,\n TracingContext,\n TracingSpan,\n TracingSpanOptions,\n} from \"./interfaces\";\nimport { getInstrumenter } from \"./instrumenter\";\nimport { knownContextKeys } from \"./tracingContext\";\n\n/**\n * Creates a new tracing client.\n *\n * @param options - Options used to configure the tracing client.\n * @returns - An instance of {@link TracingClient}.\n */\nexport function createTracingClient(options: TracingClientOptions): TracingClient {\n const { namespace, packageName, packageVersion } = options;\n\n function startSpan<Options extends { tracingOptions?: OperationTracingOptions }>(\n name: string,\n operationOptions?: Options,\n spanOptions?: TracingSpanOptions\n ): {\n span: TracingSpan;\n updatedOptions: OptionsWithTracingContext<Options>;\n } {\n const startSpanResult = getInstrumenter().startSpan(name, {\n ...spanOptions,\n packageName: packageName,\n packageVersion: packageVersion,\n tracingContext: operationOptions?.tracingOptions?.tracingContext,\n });\n let tracingContext = startSpanResult.tracingContext;\n const span = startSpanResult.span;\n if (!tracingContext.getValue(knownContextKeys.namespace)) {\n tracingContext = tracingContext.setValue(knownContextKeys.namespace, namespace);\n }\n span.setAttribute(\"az.namespace\", tracingContext.getValue(knownContextKeys.namespace));\n const updatedOptions: OptionsWithTracingContext<Options> = Object.assign({}, operationOptions, {\n tracingOptions: { ...operationOptions?.tracingOptions, tracingContext },\n });\n\n return {\n span,\n updatedOptions,\n };\n }\n\n async function withSpan<\n Options extends { tracingOptions?: OperationTracingOptions },\n Callback extends (\n updatedOptions: Options,\n span: Omit<TracingSpan, \"end\">\n ) => ReturnType<Callback>\n >(\n name: string,\n operationOptions: Options,\n callback: Callback,\n spanOptions?: TracingSpanOptions\n ): Promise<Resolved<ReturnType<Callback>>> {\n const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions);\n try {\n const result = await withContext(updatedOptions.tracingOptions.tracingContext, () =>\n Promise.resolve(callback(updatedOptions, span))\n );\n span.setStatus({ status: \"success\" });\n return result as ReturnType<typeof withSpan>;\n } catch (err: any) {\n span.setStatus({ status: \"error\", error: err });\n throw err;\n } finally {\n span.end();\n }\n }\n\n function withContext<\n CallbackArgs extends unknown[],\n Callback extends (...args: CallbackArgs) => ReturnType<Callback>\n >(\n context: TracingContext,\n callback: Callback,\n ...callbackArgs: CallbackArgs\n ): ReturnType<Callback> {\n return getInstrumenter().withContext(context, callback, ...callbackArgs);\n }\n\n /**\n * Parses a traceparent header value into a span identifier.\n *\n * @param traceparentHeader - The traceparent header to parse.\n * @returns An implementation-specific identifier for the span.\n */\n function parseTraceparentHeader(traceparentHeader: string): TracingContext | undefined {\n return getInstrumenter().parseTraceparentHeader(traceparentHeader);\n }\n\n /**\n * Creates a set of request headers to propagate tracing information to a backend.\n *\n * @param tracingContext - The context containing the span to serialize.\n * @returns The set of headers to add to a request.\n */\n function createRequestHeaders(tracingContext?: TracingContext): Record<string, string> {\n return getInstrumenter().createRequestHeaders(tracingContext);\n }\n\n return {\n startSpan,\n withSpan,\n withContext,\n parseTraceparentHeader,\n createRequestHeaders,\n };\n}\n"]}
@@ -0,0 +1,47 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /** @internal */
4
+ export const knownContextKeys = {
5
+ span: Symbol.for("@typespec/ts-http-runtime span"),
6
+ namespace: Symbol.for("@typespec/ts-http-runtime namespace"),
7
+ };
8
+ /**
9
+ * Creates a new {@link TracingContext} with the given options.
10
+ * @param options - A set of known keys that may be set on the context.
11
+ * @returns A new {@link TracingContext} with the given options.
12
+ *
13
+ * @internal
14
+ */
15
+ export function createTracingContext(options = {}) {
16
+ let context = new TracingContextImpl(options.parentContext);
17
+ if (options.span) {
18
+ context = context.setValue(knownContextKeys.span, options.span);
19
+ }
20
+ if (options.namespace) {
21
+ context = context.setValue(knownContextKeys.namespace, options.namespace);
22
+ }
23
+ return context;
24
+ }
25
+ /** @internal */
26
+ export class TracingContextImpl {
27
+ constructor(initialContext) {
28
+ this._contextMap =
29
+ initialContext instanceof TracingContextImpl
30
+ ? new Map(initialContext._contextMap)
31
+ : new Map();
32
+ }
33
+ setValue(key, value) {
34
+ const newContext = new TracingContextImpl(this);
35
+ newContext._contextMap.set(key, value);
36
+ return newContext;
37
+ }
38
+ getValue(key) {
39
+ return this._contextMap.get(key);
40
+ }
41
+ deleteValue(key) {
42
+ const newContext = new TracingContextImpl(this);
43
+ newContext._contextMap.delete(key);
44
+ return newContext;
45
+ }
46
+ }
47
+ //# sourceMappingURL=tracingContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracingContext.js","sourceRoot":"","sources":["../../../src/tracing/tracingContext.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC;CAC7D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAuC,EAAE;IAC5E,IAAI,OAAO,GAAmB,IAAI,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,IAAI,EAAE;QAChB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACjE;IACD,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;KAC3E;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAM,OAAO,kBAAkB;IAE7B,YAAY,cAA+B;QACzC,IAAI,CAAC,WAAW;YACd,cAAc,YAAY,kBAAkB;gBAC1C,CAAC,CAAC,IAAI,GAAG,CAAkB,cAAc,CAAC,WAAW,CAAC;gBACtD,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,KAAc;QAClC,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChD,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChD,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { TracingContext, TracingSpan } from \"./interfaces\";\n\n/** @internal */\nexport const knownContextKeys = {\n span: Symbol.for(\"@typespec/ts-http-runtime span\"),\n namespace: Symbol.for(\"@typespec/ts-http-runtime namespace\"),\n};\n\n/**\n * Creates a new {@link TracingContext} with the given options.\n * @param options - A set of known keys that may be set on the context.\n * @returns A new {@link TracingContext} with the given options.\n *\n * @internal\n */\nexport function createTracingContext(options: CreateTracingContextOptions = {}): TracingContext {\n let context: TracingContext = new TracingContextImpl(options.parentContext);\n if (options.span) {\n context = context.setValue(knownContextKeys.span, options.span);\n }\n if (options.namespace) {\n context = context.setValue(knownContextKeys.namespace, options.namespace);\n }\n return context;\n}\n\n/** @internal */\nexport class TracingContextImpl implements TracingContext {\n private _contextMap: Map<symbol, unknown>;\n constructor(initialContext?: TracingContext) {\n this._contextMap =\n initialContext instanceof TracingContextImpl\n ? new Map<symbol, unknown>(initialContext._contextMap)\n : new Map();\n }\n\n setValue(key: symbol, value: unknown): TracingContext {\n const newContext = new TracingContextImpl(this);\n newContext._contextMap.set(key, value);\n return newContext;\n }\n\n getValue(key: symbol): unknown {\n return this._contextMap.get(key);\n }\n\n deleteValue(key: symbol): TracingContext {\n const newContext = new TracingContextImpl(this);\n newContext._contextMap.delete(key);\n return newContext;\n }\n}\n\n/**\n * Represents a set of items that can be set when creating a new {@link TracingContext}.\n */\nexport interface CreateTracingContextOptions {\n /** The {@link parentContext} - the newly created context will contain all the values of the parent context unless overridden. */\n parentContext?: TracingContext;\n /** An initial span to set on the context. */\n span?: TracingSpan;\n /** The namespace to set on any child spans. */\n namespace?: string;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * promise.race() wrapper that aborts rest of promises as soon as the first promise settles.
5
+ */
6
+ export async function cancelablePromiseRace(abortablePromiseBuilders, options) {
7
+ var _a, _b;
8
+ const aborter = new AbortController();
9
+ function abortHandler() {
10
+ aborter.abort();
11
+ }
12
+ (_a = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _a === void 0 ? void 0 : _a.addEventListener("abort", abortHandler);
13
+ try {
14
+ return await Promise.race(abortablePromiseBuilders.map((p) => p({ abortSignal: aborter.signal })));
15
+ }
16
+ finally {
17
+ aborter.abort();
18
+ (_b = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _b === void 0 ? void 0 : _b.removeEventListener("abort", abortHandler);
19
+ }
20
+ }
21
+ //# sourceMappingURL=aborterUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aborterUtils.js","sourceRoot":"","sources":["../../../src/util/aborterUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAyBlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,wBAA8D,EAC9D,OAA2C;;IAE3C,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,SAAS,YAAY;QACnB,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IACD,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,0CAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI;QACF,OAAO,MAAM,OAAO,CAAC,IAAI,CACvB,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CACxE,CAAC;KACH;YAAS;QACR,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,0CAAE,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;KAClE;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortSignalLike } from \"../abort-controller/AbortSignalLike\";\n\n/**\n * Options related to abort controller.\n */\nexport interface AbortOptions {\n /**\n * The abortSignal associated with containing operation.\n */\n abortSignal?: AbortSignalLike;\n /**\n * The abort error message associated with containing operation.\n */\n abortErrorMsg?: string;\n}\n\n/**\n * Represents a function that returns a promise that can be aborted.\n */\nexport type AbortablePromiseBuilder<T> = (abortOptions: {\n abortSignal?: AbortSignalLike;\n}) => Promise<T>;\n\n/**\n * promise.race() wrapper that aborts rest of promises as soon as the first promise settles.\n */\nexport async function cancelablePromiseRace<T extends unknown[]>(\n abortablePromiseBuilders: AbortablePromiseBuilder<T[number]>[],\n options?: { abortSignal?: AbortSignalLike }\n): Promise<T[number]> {\n const aborter = new AbortController();\n function abortHandler(): void {\n aborter.abort();\n }\n options?.abortSignal?.addEventListener(\"abort\", abortHandler);\n try {\n return await Promise.race(\n abortablePromiseBuilders.map((p) => p({ abortSignal: aborter.signal }))\n );\n } finally {\n aborter.abort();\n options?.abortSignal?.removeEventListener(\"abort\", abortHandler);\n }\n}\n"]}
@@ -0,0 +1,35 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * Converts a base64 string into a byte array.
5
+ * @param content - The base64 string to convert.
6
+ * @internal
7
+ */
8
+ export function base64ToBytes(content) {
9
+ if (typeof atob !== "function") {
10
+ throw new Error(`Your browser environment is missing the global "atob" function.`);
11
+ }
12
+ const binary = atob(content);
13
+ const bytes = new Uint8Array(binary.length);
14
+ for (let i = 0; i < binary.length; i++) {
15
+ bytes[i] = binary.charCodeAt(i);
16
+ }
17
+ return bytes;
18
+ }
19
+ /**
20
+ * Converts an ArrayBuffer to base64 string.
21
+ * @param buffer - Raw binary data.
22
+ * @internal
23
+ */
24
+ export function bufferToBase64(buffer) {
25
+ if (typeof btoa !== "function") {
26
+ throw new Error(`Your browser environment is missing the global "btoa" function.`);
27
+ }
28
+ const bytes = new Uint8Array(buffer);
29
+ let binary = "";
30
+ for (const byte of bytes) {
31
+ binary += String.fromCharCode(byte);
32
+ }
33
+ return btoa(binary);
34
+ }
35
+ //# sourceMappingURL=base64.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.browser.js","sourceRoot":"","sources":["../../../src/util/base64.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAQlC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;KACpF;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACjC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;KACpF;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACrC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\ndeclare global {\n // stub these out for the browser\n function btoa(input: string): string;\n function atob(input: string): string;\n}\n\n/**\n * Converts a base64 string into a byte array.\n * @param content - The base64 string to convert.\n * @internal\n */\nexport function base64ToBytes(content: string): Uint8Array {\n if (typeof atob !== \"function\") {\n throw new Error(`Your browser environment is missing the global \"atob\" function.`);\n }\n\n const binary = atob(content);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return bytes;\n}\n\n/**\n * Converts an ArrayBuffer to base64 string.\n * @param buffer - Raw binary data.\n * @internal\n */\nexport function bufferToBase64(buffer: ArrayBuffer): string {\n if (typeof btoa !== \"function\") {\n throw new Error(`Your browser environment is missing the global \"btoa\" function.`);\n }\n\n const bytes = new Uint8Array(buffer);\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n}\n"]}
@@ -0,0 +1,82 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * The helper that transforms bytes with specific character encoding into string
5
+ * @param bytes - the uint8array bytes
6
+ * @param format - the format we use to encode the byte
7
+ * @returns a string of the encoded string
8
+ */
9
+ export function uint8ArrayToString(bytes, format) {
10
+ switch (format) {
11
+ case "utf-8":
12
+ return uint8ArrayToUtf8String(bytes);
13
+ case "base64":
14
+ return uint8ArrayToBase64(bytes);
15
+ case "base64url":
16
+ return uint8ArrayToBase64Url(bytes);
17
+ }
18
+ }
19
+ /**
20
+ * The helper that transforms string to specific character encoded bytes array.
21
+ * @param value - the string to be converted
22
+ * @param format - the format we use to decode the value
23
+ * @returns a uint8array
24
+ */
25
+ export function stringToUint8Array(value, format) {
26
+ switch (format) {
27
+ case "utf-8":
28
+ return utf8StringToUint8Array(value);
29
+ case "base64":
30
+ return base64ToUint8Array(value);
31
+ case "base64url":
32
+ return base64UrlToUint8Array(value);
33
+ }
34
+ }
35
+ /**
36
+ * Decodes a Uint8Array into a Base64 string.
37
+ * @internal
38
+ */
39
+ export function uint8ArrayToBase64(uint8Array) {
40
+ const decoder = new TextDecoder();
41
+ const dataString = decoder.decode(uint8Array);
42
+ return btoa(dataString);
43
+ }
44
+ /**
45
+ * Decodes a Uint8Array into a Base64Url string.
46
+ * @internal
47
+ */
48
+ export function uint8ArrayToBase64Url(bytes) {
49
+ return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
50
+ }
51
+ /**
52
+ * Decodes a Uint8Array into a javascript string.
53
+ * @internal
54
+ */
55
+ export function uint8ArrayToUtf8String(uint8Array) {
56
+ const decoder = new TextDecoder();
57
+ const dataString = decoder.decode(uint8Array);
58
+ return dataString;
59
+ }
60
+ /**
61
+ * Encodes a JavaScript string into a Uint8Array.
62
+ * @internal
63
+ */
64
+ export function utf8StringToUint8Array(value) {
65
+ return new TextEncoder().encode(value);
66
+ }
67
+ /**
68
+ * Encodes a Base64 string into a Uint8Array.
69
+ * @internal
70
+ */
71
+ export function base64ToUint8Array(value) {
72
+ return new TextEncoder().encode(atob(value));
73
+ }
74
+ /**
75
+ * Encodes a Base64Url string into a Uint8Array.
76
+ * @internal
77
+ */
78
+ export function base64UrlToUint8Array(value) {
79
+ const base64String = value.replace(/-/g, "+").replace(/_/g, "/");
80
+ return base64ToUint8Array(base64String);
81
+ }
82
+ //# sourceMappingURL=bytesEncoding.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytesEncoding.browser.js","sourceRoot":"","sources":["../../../src/util/bytesEncoding.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAWlC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB,EAAE,MAAoB;IACxE,QAAQ,MAAM,EAAE;QACd,KAAK,OAAO;YACV,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,WAAW;YACd,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACvC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,MAAoB;IACpE,QAAQ,MAAM,EAAE;QACd,KAAK,OAAO;YACV,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,WAAW;YACd,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACvC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAsB;IACvD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IAC3D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjE,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\ndeclare global {\n // stub these out for the browser\n function btoa(input: string): string;\n function atob(input: string): string;\n}\n\n/** The supported character encoding type */\nexport type EncodingType = \"utf-8\" | \"base64\" | \"base64url\";\n\n/**\n * The helper that transforms bytes with specific character encoding into string\n * @param bytes - the uint8array bytes\n * @param format - the format we use to encode the byte\n * @returns a string of the encoded string\n */\nexport function uint8ArrayToString(bytes: Uint8Array, format: EncodingType): string {\n switch (format) {\n case \"utf-8\":\n return uint8ArrayToUtf8String(bytes);\n case \"base64\":\n return uint8ArrayToBase64(bytes);\n case \"base64url\":\n return uint8ArrayToBase64Url(bytes);\n }\n}\n\n/**\n * The helper that transforms string to specific character encoded bytes array.\n * @param value - the string to be converted\n * @param format - the format we use to decode the value\n * @returns a uint8array\n */\nexport function stringToUint8Array(value: string, format: EncodingType): Uint8Array {\n switch (format) {\n case \"utf-8\":\n return utf8StringToUint8Array(value);\n case \"base64\":\n return base64ToUint8Array(value);\n case \"base64url\":\n return base64UrlToUint8Array(value);\n }\n}\n\n/**\n * Decodes a Uint8Array into a Base64 string.\n * @internal\n */\nexport function uint8ArrayToBase64(uint8Array: Uint8Array): string {\n const decoder = new TextDecoder();\n const dataString = decoder.decode(uint8Array);\n return btoa(dataString);\n}\n\n/**\n * Decodes a Uint8Array into a Base64Url string.\n * @internal\n */\nexport function uint8ArrayToBase64Url(bytes: Uint8Array): string {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\n\n/**\n * Decodes a Uint8Array into a javascript string.\n * @internal\n */\nexport function uint8ArrayToUtf8String(uint8Array: Uint8Array): string {\n const decoder = new TextDecoder();\n const dataString = decoder.decode(uint8Array);\n return dataString;\n}\n\n/**\n * Encodes a JavaScript string into a Uint8Array.\n * @internal\n */\nexport function utf8StringToUint8Array(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\n/**\n * Encodes a Base64 string into a Uint8Array.\n * @internal\n */\nexport function base64ToUint8Array(value: string): Uint8Array {\n return new TextEncoder().encode(atob(value));\n}\n\n/**\n * Encodes a Base64Url string into a Uint8Array.\n * @internal\n */\nexport function base64UrlToUint8Array(value: string): Uint8Array {\n const base64String = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return base64ToUint8Array(base64String);\n}\n"]}
@@ -0,0 +1,77 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * The helper that transforms bytes with specific character encoding into string
5
+ * @param bytes - the uint8array bytes
6
+ * @param format - the format we use to encode the byte
7
+ * @returns a string of the encoded string
8
+ */
9
+ export function uint8ArrayToString(bytes, format) {
10
+ switch (format) {
11
+ case "utf-8":
12
+ return uint8ArrayToUtf8String(bytes);
13
+ case "base64":
14
+ return uint8ArrayToBase64(bytes);
15
+ case "base64url":
16
+ return uint8ArrayToBase64Url(bytes);
17
+ }
18
+ }
19
+ /**
20
+ * The helper that transforms string to specific character encoded bytes array.
21
+ * @param value - the string to be converted
22
+ * @param format - the format we use to decode the value
23
+ * @returns a uint8array
24
+ */
25
+ export function stringToUint8Array(value, format) {
26
+ switch (format) {
27
+ case "utf-8":
28
+ return utf8StringToUint8Array(value);
29
+ case "base64":
30
+ return base64ToUint8Array(value);
31
+ case "base64url":
32
+ return base64UrlToUint8Array(value);
33
+ }
34
+ }
35
+ /**
36
+ * Decodes a Uint8Array into a Base64 string.
37
+ * @internal
38
+ */
39
+ export function uint8ArrayToBase64(bytes) {
40
+ return Buffer.from(bytes).toString("base64");
41
+ }
42
+ /**
43
+ * Decodes a Uint8Array into a Base64Url string.
44
+ * @internal
45
+ */
46
+ export function uint8ArrayToBase64Url(bytes) {
47
+ return Buffer.from(bytes).toString("base64url");
48
+ }
49
+ /**
50
+ * Decodes a Uint8Array into a javascript string.
51
+ * @internal
52
+ */
53
+ export function uint8ArrayToUtf8String(bytes) {
54
+ return Buffer.from(bytes).toString("utf-8");
55
+ }
56
+ /**
57
+ * Encodes a JavaScript string into a Uint8Array.
58
+ * @internal
59
+ */
60
+ export function utf8StringToUint8Array(value) {
61
+ return Buffer.from(value);
62
+ }
63
+ /**
64
+ * Encodes a Base64 string into a Uint8Array.
65
+ * @internal
66
+ */
67
+ export function base64ToUint8Array(value) {
68
+ return Buffer.from(value, "base64");
69
+ }
70
+ /**
71
+ * Encodes a Base64Url string into a Uint8Array.
72
+ * @internal
73
+ */
74
+ export function base64UrlToUint8Array(value) {
75
+ return Buffer.from(value, "base64url");
76
+ }
77
+ //# sourceMappingURL=bytesEncoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytesEncoding.js","sourceRoot":"","sources":["../../../src/util/bytesEncoding.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB,EAAE,MAAoB;IACxE,QAAQ,MAAM,EAAE;QACd,KAAK,OAAO;YACV,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,WAAW;YACd,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACvC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,MAAoB;IACpE,QAAQ,MAAM,EAAE;QACd,KAAK,OAAO;YACV,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,WAAW;YACd,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACvC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAiB;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/** The supported character encoding type */\nexport type EncodingType = \"utf-8\" | \"base64\" | \"base64url\";\n\n/**\n * The helper that transforms bytes with specific character encoding into string\n * @param bytes - the uint8array bytes\n * @param format - the format we use to encode the byte\n * @returns a string of the encoded string\n */\nexport function uint8ArrayToString(bytes: Uint8Array, format: EncodingType): string {\n switch (format) {\n case \"utf-8\":\n return uint8ArrayToUtf8String(bytes);\n case \"base64\":\n return uint8ArrayToBase64(bytes);\n case \"base64url\":\n return uint8ArrayToBase64Url(bytes);\n }\n}\n\n/**\n * The helper that transforms string to specific character encoded bytes array.\n * @param value - the string to be converted\n * @param format - the format we use to decode the value\n * @returns a uint8array\n */\nexport function stringToUint8Array(value: string, format: EncodingType): Uint8Array {\n switch (format) {\n case \"utf-8\":\n return utf8StringToUint8Array(value);\n case \"base64\":\n return base64ToUint8Array(value);\n case \"base64url\":\n return base64UrlToUint8Array(value);\n }\n}\n\n/**\n * Decodes a Uint8Array into a Base64 string.\n * @internal\n */\nexport function uint8ArrayToBase64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\n/**\n * Decodes a Uint8Array into a Base64Url string.\n * @internal\n */\nexport function uint8ArrayToBase64Url(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64url\");\n}\n\n/**\n * Decodes a Uint8Array into a javascript string.\n * @internal\n */\nexport function uint8ArrayToUtf8String(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"utf-8\");\n}\n\n/**\n * Encodes a JavaScript string into a Uint8Array.\n * @internal\n */\nexport function utf8StringToUint8Array(value: string): Uint8Array {\n return Buffer.from(value);\n}\n\n/**\n * Encodes a Base64 string into a Uint8Array.\n * @internal\n */\nexport function base64ToUint8Array(value: string): Uint8Array {\n return Buffer.from(value, \"base64\");\n}\n\n/**\n * Encodes a Base64Url string into a Uint8Array.\n * @internal\n */\nexport function base64UrlToUint8Array(value: string): Uint8Array {\n return Buffer.from(value, \"base64url\");\n}\n"]}
@@ -0,0 +1,36 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ var _a, _b, _c, _d;
4
+ /**
5
+ * A constant that indicates whether the environment the code is running is a Web Browser.
6
+ */
7
+ // eslint-disable-next-line @azure/azure-sdk/ts-no-window
8
+ export const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined";
9
+ /**
10
+ * A constant that indicates whether the environment the code is running is a Web Worker.
11
+ */
12
+ export const isWebWorker = typeof self === "object" &&
13
+ typeof (self === null || self === void 0 ? void 0 : self.importScripts) === "function" &&
14
+ (((_a = self.constructor) === null || _a === void 0 ? void 0 : _a.name) === "DedicatedWorkerGlobalScope" ||
15
+ ((_b = self.constructor) === null || _b === void 0 ? void 0 : _b.name) === "ServiceWorkerGlobalScope" ||
16
+ ((_c = self.constructor) === null || _c === void 0 ? void 0 : _c.name) === "SharedWorkerGlobalScope");
17
+ /**
18
+ * A constant that indicates whether the environment the code is running is Node.JS.
19
+ */
20
+ export const isNode = typeof process !== "undefined" && Boolean(process.version) && Boolean((_d = process.versions) === null || _d === void 0 ? void 0 : _d.node);
21
+ /**
22
+ * A constant that indicates whether the environment the code is running is Deno.
23
+ */
24
+ export const isDeno = typeof Deno !== "undefined" &&
25
+ typeof Deno.version !== "undefined" &&
26
+ typeof Deno.version.deno !== "undefined";
27
+ /**
28
+ * A constant that indicates whether the environment the code is running is Bun.sh.
29
+ */
30
+ export const isBun = typeof Bun !== "undefined" && typeof Bun.version !== "undefined";
31
+ /**
32
+ * A constant that indicates whether the environment the code is running is in React-Native.
33
+ */
34
+ // https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Core/setUpNavigator.js
35
+ export const isReactNative = typeof navigator !== "undefined" && (navigator === null || navigator === void 0 ? void 0 : navigator.product) === "ReactNative";
36
+ //# sourceMappingURL=checkEnvironment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkEnvironment.js","sourceRoot":"","sources":["../../../src/util/checkEnvironment.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAiBlC;;GAEG;AACH,yDAAyD;AACzD,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;AAEjG;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GACtB,OAAO,IAAI,KAAK,QAAQ;IACxB,OAAO,CAAC,IAAY,aAAZ,IAAI,uBAAJ,IAAI,CAAU,aAAa,CAAA,KAAK,UAAU;IAClD,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,MAAK,4BAA4B;QACtD,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,MAAK,0BAA0B;QACrD,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,MAAK,yBAAyB,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GACjB,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAA,OAAO,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC;AAEhG;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GACjB,OAAO,IAAI,KAAK,WAAW;IAC3B,OAAO,IAAI,CAAC,OAAO,KAAK,WAAW;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,WAAW,CAAC;AAEtF;;GAEG;AACH,4GAA4G;AAC5G,MAAM,CAAC,MAAM,aAAa,GACxB,OAAO,SAAS,KAAK,WAAW,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,MAAK,aAAa,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\ndeclare global {\n interface DenoGlobal {\n version: {\n deno: string;\n };\n }\n\n interface BunGlobal {\n version: string;\n }\n\n const Deno: DenoGlobal;\n const Bun: BunGlobal;\n}\n\n/**\n * A constant that indicates whether the environment the code is running is a Web Browser.\n */\n// eslint-disable-next-line @azure/azure-sdk/ts-no-window\nexport const isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\n/**\n * A constant that indicates whether the environment the code is running is a Web Worker.\n */\nexport const isWebWorker =\n typeof self === \"object\" &&\n typeof (self as any)?.importScripts === \"function\" &&\n (self.constructor?.name === \"DedicatedWorkerGlobalScope\" ||\n self.constructor?.name === \"ServiceWorkerGlobalScope\" ||\n self.constructor?.name === \"SharedWorkerGlobalScope\");\n\n/**\n * A constant that indicates whether the environment the code is running is Node.JS.\n */\nexport const isNode =\n typeof process !== \"undefined\" && Boolean(process.version) && Boolean(process.versions?.node);\n\n/**\n * A constant that indicates whether the environment the code is running is Deno.\n */\nexport const isDeno =\n typeof Deno !== \"undefined\" &&\n typeof Deno.version !== \"undefined\" &&\n typeof Deno.version.deno !== \"undefined\";\n\n/**\n * A constant that indicates whether the environment the code is running is Bun.sh.\n */\nexport const isBun = typeof Bun !== \"undefined\" && typeof Bun.version !== \"undefined\";\n\n/**\n * A constant that indicates whether the environment the code is running is in React-Native.\n */\n// https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Core/setUpNavigator.js\nexport const isReactNative =\n typeof navigator !== \"undefined\" && navigator?.product === \"ReactNative\";\n"]}
@@ -0,0 +1,42 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { AbortError } from "../abort-controller/AbortError";
4
+ /**
5
+ * Creates an abortable promise.
6
+ * @param buildPromise - A function that takes the resolve and reject functions as parameters.
7
+ * @param options - The options for the abortable promise.
8
+ * @returns A promise that can be aborted.
9
+ */
10
+ export function createAbortablePromise(buildPromise, options) {
11
+ const { cleanupBeforeAbort, abortSignal, abortErrorMsg } = options !== null && options !== void 0 ? options : {};
12
+ return new Promise((resolve, reject) => {
13
+ function rejectOnAbort() {
14
+ reject(new AbortError(abortErrorMsg !== null && abortErrorMsg !== void 0 ? abortErrorMsg : "The operation was aborted."));
15
+ }
16
+ function removeListeners() {
17
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener("abort", onAbort);
18
+ }
19
+ function onAbort() {
20
+ cleanupBeforeAbort === null || cleanupBeforeAbort === void 0 ? void 0 : cleanupBeforeAbort();
21
+ removeListeners();
22
+ rejectOnAbort();
23
+ }
24
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
25
+ return rejectOnAbort();
26
+ }
27
+ try {
28
+ buildPromise((x) => {
29
+ removeListeners();
30
+ resolve(x);
31
+ }, (x) => {
32
+ removeListeners();
33
+ reject(x);
34
+ });
35
+ }
36
+ catch (err) {
37
+ reject(err);
38
+ }
39
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener("abort", onAbort);
40
+ });
41
+ }
42
+ //# sourceMappingURL=createAbortablePromise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAbortablePromise.js","sourceRoot":"","sources":["../../../src/util/createAbortablePromise.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAW5D;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,YAGS,EACT,OAAuC;IAEvC,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;IACzE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,SAAS,aAAa;YACpB,MAAM,CAAC,IAAI,UAAU,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,4BAA4B,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,SAAS,eAAe;YACtB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,SAAS,OAAO;YACd,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,EAAI,CAAC;YACvB,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE;YACxB,OAAO,aAAa,EAAE,CAAC;SACxB;QACD,IAAI;YACF,YAAY,CACV,CAAC,CAAC,EAAE,EAAE;gBACJ,eAAe,EAAE,CAAC;gBAClB,OAAO,CAAC,CAAC,CAAC,CAAC;YACb,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;gBACJ,eAAe,EAAE,CAAC;gBAClB,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CACF,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;QACD,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortError } from \"../abort-controller/AbortError\";\nimport { AbortOptions } from \"./aborterUtils\";\n\n/**\n * Options for the createAbortablePromise function.\n */\nexport interface CreateAbortablePromiseOptions extends AbortOptions {\n /** A function to be called if the promise was aborted */\n cleanupBeforeAbort?: () => void;\n}\n\n/**\n * Creates an abortable promise.\n * @param buildPromise - A function that takes the resolve and reject functions as parameters.\n * @param options - The options for the abortable promise.\n * @returns A promise that can be aborted.\n */\nexport function createAbortablePromise<T>(\n buildPromise: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n ) => void,\n options?: CreateAbortablePromiseOptions\n): Promise<T> {\n const { cleanupBeforeAbort, abortSignal, abortErrorMsg } = options ?? {};\n return new Promise((resolve, reject) => {\n function rejectOnAbort(): void {\n reject(new AbortError(abortErrorMsg ?? \"The operation was aborted.\"));\n }\n function removeListeners(): void {\n abortSignal?.removeEventListener(\"abort\", onAbort);\n }\n function onAbort(): void {\n cleanupBeforeAbort?.();\n removeListeners();\n rejectOnAbort();\n }\n if (abortSignal?.aborted) {\n return rejectOnAbort();\n }\n try {\n buildPromise(\n (x) => {\n removeListeners();\n resolve(x);\n },\n (x) => {\n removeListeners();\n reject(x);\n }\n );\n } catch (err) {\n reject(err);\n }\n abortSignal?.addEventListener(\"abort\", onAbort);\n });\n}\n"]}
@@ -0,0 +1,22 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { createAbortablePromise } from "./createAbortablePromise";
4
+ const StandardAbortMessage = "The delay was aborted.";
5
+ /**
6
+ * A wrapper for setTimeout that resolves a promise after timeInMs milliseconds.
7
+ * @param timeInMs - The number of milliseconds to be delayed.
8
+ * @param options - The options for delay - currently abort options
9
+ * @returns Promise that is resolved after timeInMs
10
+ */
11
+ export function delay(timeInMs, options) {
12
+ let token;
13
+ const { abortSignal, abortErrorMsg } = options !== null && options !== void 0 ? options : {};
14
+ return createAbortablePromise((resolve) => {
15
+ token = setTimeout(resolve, timeInMs);
16
+ }, {
17
+ cleanupBeforeAbort: () => clearTimeout(token),
18
+ abortSignal,
19
+ abortErrorMsg: abortErrorMsg !== null && abortErrorMsg !== void 0 ? abortErrorMsg : StandardAbortMessage,
20
+ });
21
+ }
22
+ //# sourceMappingURL=delay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.js","sourceRoot":"","sources":["../../../src/util/delay.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAOtD;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,QAAgB,EAAE,OAAsB;IAC5D,IAAI,KAAoC,CAAC;IACzC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;IACrD,OAAO,sBAAsB,CAC3B,CAAC,OAAO,EAAE,EAAE;QACV,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,EACD;QACE,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;QAC7C,WAAW;QACX,aAAa,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,oBAAoB;KACrD,CACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortOptions } from \"./aborterUtils\";\nimport { createAbortablePromise } from \"./createAbortablePromise\";\n\nconst StandardAbortMessage = \"The delay was aborted.\";\n\n/**\n * Options for support abort functionality for the delay method\n */\nexport interface DelayOptions extends AbortOptions {}\n\n/**\n * A wrapper for setTimeout that resolves a promise after timeInMs milliseconds.\n * @param timeInMs - The number of milliseconds to be delayed.\n * @param options - The options for delay - currently abort options\n * @returns Promise that is resolved after timeInMs\n */\nexport function delay(timeInMs: number, options?: DelayOptions): Promise<void> {\n let token: ReturnType<typeof setTimeout>;\n const { abortSignal, abortErrorMsg } = options ?? {};\n return createAbortablePromise(\n (resolve) => {\n token = setTimeout(resolve, timeInMs);\n },\n {\n cleanupBeforeAbort: () => clearTimeout(token),\n abortSignal,\n abortErrorMsg: abortErrorMsg ?? StandardAbortMessage,\n }\n );\n}\n"]}
@@ -0,0 +1,42 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { isObject } from "./object";
4
+ /**
5
+ * Typeguard for an error object shape (has name and message)
6
+ * @param e - Something caught by a catch clause.
7
+ */
8
+ export function isError(e) {
9
+ if (isObject(e)) {
10
+ const hasName = typeof e.name === "string";
11
+ const hasMessage = typeof e.message === "string";
12
+ return hasName && hasMessage;
13
+ }
14
+ return false;
15
+ }
16
+ /**
17
+ * Given what is thought to be an error object, return the message if possible.
18
+ * If the message is missing, returns a stringified version of the input.
19
+ * @param e - Something thrown from a try block
20
+ * @returns The error message or a string of the input
21
+ */
22
+ export function getErrorMessage(e) {
23
+ if (isError(e)) {
24
+ return e.message;
25
+ }
26
+ else {
27
+ let stringified;
28
+ try {
29
+ if (typeof e === "object" && e) {
30
+ stringified = JSON.stringify(e);
31
+ }
32
+ else {
33
+ stringified = String(e);
34
+ }
35
+ }
36
+ catch (err) {
37
+ stringified = "[unable to stringify input]";
38
+ }
39
+ return `Unknown error ${stringified}`;
40
+ }
41
+ }
42
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,CAAU;IAChC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QACf,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;QACjD,OAAO,OAAO,IAAI,UAAU,CAAC;KAC9B;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;QACd,OAAO,CAAC,CAAC,OAAO,CAAC;KAClB;SAAM;QACL,IAAI,WAAmB,CAAC;QACxB,IAAI;YACF,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE;gBAC9B,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACjC;iBAAM;gBACL,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACzB;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,WAAW,GAAG,6BAA6B,CAAC;SAC7C;QACD,OAAO,iBAAiB,WAAW,EAAE,CAAC;KACvC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { isObject } from \"./object\";\n\n/**\n * Typeguard for an error object shape (has name and message)\n * @param e - Something caught by a catch clause.\n */\nexport function isError(e: unknown): e is Error {\n if (isObject(e)) {\n const hasName = typeof e.name === \"string\";\n const hasMessage = typeof e.message === \"string\";\n return hasName && hasMessage;\n }\n return false;\n}\n\n/**\n * Given what is thought to be an error object, return the message if possible.\n * If the message is missing, returns a stringified version of the input.\n * @param e - Something thrown from a try block\n * @returns The error message or a string of the input\n */\nexport function getErrorMessage(e: unknown): string {\n if (isError(e)) {\n return e.message;\n } else {\n let stringified: string;\n try {\n if (typeof e === \"object\" && e) {\n stringified = JSON.stringify(e);\n } else {\n stringified = String(e);\n }\n } catch (err: any) {\n stringified = \"[unable to stringify input]\";\n }\n return `Unknown error ${stringified}`;\n }\n}\n"]}
@@ -0,0 +1,58 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { AbortError } from "../abort-controller/AbortError";
4
+ const StandardAbortMessage = "The operation was aborted.";
5
+ /**
6
+ * A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
7
+ * @param delayInMs - The number of milliseconds to be delayed.
8
+ * @param value - The value to be resolved with after a timeout of t milliseconds.
9
+ * @param options - The options for delay - currently abort options
10
+ * - abortSignal - The abortSignal associated with containing operation.
11
+ * - abortErrorMsg - The abort error message associated with containing operation.
12
+ * @returns Resolved promise
13
+ */
14
+ export function delay(delayInMs, value, options) {
15
+ return new Promise((resolve, reject) => {
16
+ let timer = undefined;
17
+ let onAborted = undefined;
18
+ const rejectOnAbort = () => {
19
+ return reject(new AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage));
20
+ };
21
+ const removeListeners = () => {
22
+ if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) {
23
+ options.abortSignal.removeEventListener("abort", onAborted);
24
+ }
25
+ };
26
+ onAborted = () => {
27
+ if (timer) {
28
+ clearTimeout(timer);
29
+ }
30
+ removeListeners();
31
+ return rejectOnAbort();
32
+ };
33
+ if ((options === null || options === void 0 ? void 0 : options.abortSignal) && options.abortSignal.aborted) {
34
+ return rejectOnAbort();
35
+ }
36
+ timer = setTimeout(() => {
37
+ removeListeners();
38
+ resolve(value);
39
+ }, delayInMs);
40
+ if (options === null || options === void 0 ? void 0 : options.abortSignal) {
41
+ options.abortSignal.addEventListener("abort", onAborted);
42
+ }
43
+ });
44
+ }
45
+ /**
46
+ * @internal
47
+ * @returns the parsed value or undefined if the parsed value is invalid.
48
+ */
49
+ export function parseHeaderValueAsNumber(response, headerName) {
50
+ const value = response.headers.get(headerName);
51
+ if (!value)
52
+ return;
53
+ const valueAsNum = Number(value);
54
+ if (Number.isNaN(valueAsNum))
55
+ return;
56
+ return valueAsNum;
57
+ }
58
+ //# sourceMappingURL=helpers.js.map