@fluidframework/telemetry-utils 2.0.0-dev.6.4.0.192049 → 2.0.0-dev.7.2.0.204906

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 (72) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/api-extractor.json +9 -1
  3. package/api-report/telemetry-utils.api.md +444 -0
  4. package/dist/config.d.ts +1 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +4 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/error.d.ts +8 -0
  9. package/dist/error.d.ts.map +1 -1
  10. package/dist/error.js +10 -1
  11. package/dist/error.js.map +1 -1
  12. package/dist/errorLogging.d.ts +26 -0
  13. package/dist/errorLogging.d.ts.map +1 -1
  14. package/dist/errorLogging.js +43 -15
  15. package/dist/errorLogging.js.map +1 -1
  16. package/dist/events.d.ts.map +1 -1
  17. package/dist/events.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/logger.d.ts +50 -6
  23. package/dist/logger.d.ts.map +1 -1
  24. package/dist/logger.js +108 -46
  25. package/dist/logger.js.map +1 -1
  26. package/dist/telemetry-utils-alpha.d.ts +668 -0
  27. package/dist/telemetry-utils-beta.d.ts +668 -0
  28. package/dist/telemetry-utils-public.d.ts +668 -0
  29. package/dist/telemetry-utils-untrimmed.d.ts +909 -0
  30. package/dist/telemetryTypes.d.ts +2 -2
  31. package/dist/telemetryTypes.d.ts.map +1 -1
  32. package/dist/tsdoc-metadata.json +1 -1
  33. package/dist/utils.d.ts +45 -0
  34. package/dist/utils.d.ts.map +1 -1
  35. package/dist/utils.js +50 -1
  36. package/dist/utils.js.map +1 -1
  37. package/lib/config.d.ts +1 -1
  38. package/lib/config.d.ts.map +1 -1
  39. package/lib/config.js +4 -2
  40. package/lib/config.js.map +1 -1
  41. package/lib/error.d.ts +8 -0
  42. package/lib/error.d.ts.map +1 -1
  43. package/lib/error.js +10 -1
  44. package/lib/error.js.map +1 -1
  45. package/lib/errorLogging.d.ts +26 -0
  46. package/lib/errorLogging.d.ts.map +1 -1
  47. package/lib/errorLogging.js +43 -15
  48. package/lib/errorLogging.js.map +1 -1
  49. package/lib/events.d.ts.map +1 -1
  50. package/lib/events.js.map +1 -1
  51. package/lib/index.d.ts +1 -1
  52. package/lib/index.d.ts.map +1 -1
  53. package/lib/index.js +1 -1
  54. package/lib/index.js.map +1 -1
  55. package/lib/logger.d.ts +50 -6
  56. package/lib/logger.d.ts.map +1 -1
  57. package/lib/logger.js +107 -45
  58. package/lib/logger.js.map +1 -1
  59. package/lib/telemetryTypes.d.ts +2 -2
  60. package/lib/telemetryTypes.d.ts.map +1 -1
  61. package/lib/utils.d.ts +45 -0
  62. package/lib/utils.d.ts.map +1 -1
  63. package/lib/utils.js +48 -0
  64. package/lib/utils.js.map +1 -1
  65. package/package.json +18 -19
  66. package/src/config.ts +4 -2
  67. package/src/error.ts +15 -3
  68. package/src/errorLogging.ts +43 -10
  69. package/src/events.ts +2 -0
  70. package/src/index.ts +1 -1
  71. package/src/logger.ts +94 -22
  72. package/src/utils.ts +85 -0
@@ -12,6 +12,8 @@ const isRegularObject = (value) => {
12
12
  };
13
13
  /**
14
14
  * Inspect the given error for common "safe" props and return them.
15
+ *
16
+ * @internal
15
17
  */
16
18
  export function extractLogSafeErrorProperties(error, sanitizeStack) {
17
19
  const removeMessageFromStack = (stack, errorName) => {
@@ -72,6 +74,8 @@ function patchLegacyError(legacyError) {
72
74
  * @returns A valid Fluid Error with any provided annotations applied
73
75
  * @param error - The error to normalize
74
76
  * @param annotations - Annotations to apply to the normalized error
77
+ *
78
+ * @internal
75
79
  */
76
80
  export function normalizeError(error, annotations = {}) {
77
81
  // Back-compat, while IFluidErrorBase is rolled out
@@ -129,6 +133,8 @@ let stackPopulatedOnCreation;
129
133
  * For such cases it's better to not read stack property right away, but rather delay it until / if it's needed
130
134
  * Some browsers will populate stack right away, others require throwing Error, so we do auto-detection on the fly.
131
135
  * @returns Error object that has stack populated.
136
+ *
137
+ * @internal
132
138
  */
133
139
  export function generateErrorWithStack() {
134
140
  const err = new Error("<<generated stack>>");
@@ -145,6 +151,12 @@ export function generateErrorWithStack() {
145
151
  return error;
146
152
  }
147
153
  }
154
+ /**
155
+ * Generate a stack at this callsite as if an error were thrown from here.
156
+ * @returns the callstack (does not throw)
157
+ *
158
+ * @internal
159
+ */
148
160
  export function generateStack() {
149
161
  return generateErrorWithStack().stack;
150
162
  }
@@ -154,6 +166,8 @@ export function generateStack() {
154
166
  * @param innerError - An error from untrusted/unknown origins
155
167
  * @param newErrorFn - callback that will create a new error given the original error's message
156
168
  * @returns A new error object "wrapping" the given error
169
+ *
170
+ * @internal
157
171
  */
158
172
  export function wrapError(innerError, newErrorFn) {
159
173
  const { message, stack } = extractLogSafeErrorProperties(innerError, false /* sanitizeStack */);
@@ -182,6 +196,8 @@ export function wrapError(innerError, newErrorFn) {
182
196
  * The same as wrapError, but also logs the innerError, including the wrapping error's instance ID.
183
197
  *
184
198
  * @typeParam T - The kind of wrapper error to create.
199
+ *
200
+ * @internal
185
201
  */
186
202
  export function wrapErrorAndLog(innerError, newErrorFn, logger) {
187
203
  const newError = wrapError(innerError, newErrorFn);
@@ -216,6 +232,8 @@ export function overwriteStack(error, stack) {
216
232
  * True for any error object that is an (optionally normalized) external error
217
233
  * False for any error we created and raised within the FF codebase via LoggingError base class,
218
234
  * or wrapped in a well-known error type
235
+ *
236
+ * @internal
219
237
  */
220
238
  export function isExternalError(error) {
221
239
  // LoggingErrors are an internal FF error type. However, an external error can be converted
@@ -258,10 +276,12 @@ function isTelemetryEventPropertyValue(x) {
258
276
  case "string":
259
277
  case "number":
260
278
  case "boolean":
261
- case "undefined":
279
+ case "undefined": {
262
280
  return true;
263
- default:
281
+ }
282
+ default: {
264
283
  return false;
284
+ }
265
285
  }
266
286
  }
267
287
  /**
@@ -275,15 +295,12 @@ function getValidTelemetryProps(obj, keysToOmit) {
275
295
  }
276
296
  const val = obj[key];
277
297
  // ensure only valid props get logged, since props of logging error could be in any shape
278
- if (isTaggedTelemetryPropertyValue(val)) {
279
- props[key] = {
298
+ props[key] = isTaggedTelemetryPropertyValue(val)
299
+ ? {
280
300
  value: filterValidTelemetryProps(val.value, key),
281
301
  tag: val.tag,
282
- };
283
- }
284
- else {
285
- props[key] = filterValidTelemetryProps(val, key);
286
- }
302
+ }
303
+ : filterValidTelemetryProps(val, key);
287
304
  }
288
305
  return props;
289
306
  }
@@ -293,6 +310,8 @@ function getValidTelemetryProps(obj, keysToOmit) {
293
310
  * Avoids runtime errors with circular references.
294
311
  * Not ideal, as will cut values that are not necessarily circular references.
295
312
  * Could be improved by implementing Node's util.inspect() for browser (minus all the coloring code)
313
+ *
314
+ * @internal
296
315
  */
297
316
  // TODO: Use `unknown` instead (API breaking change)
298
317
  /* eslint-disable @typescript-eslint/no-explicit-any */
@@ -315,8 +334,16 @@ export const getCircularReplacer = () => {
315
334
  * will be logged in accordance with their tag, if present.
316
335
  *
317
336
  * PLEASE take care to avoid setting sensitive data on this object without proper tagging!
337
+ *
338
+ * @internal
318
339
  */
319
340
  export class LoggingError extends Error {
341
+ get errorInstanceId() {
342
+ return this._errorInstanceId;
343
+ }
344
+ overwriteErrorInstanceId(id) {
345
+ this._errorInstanceId = id;
346
+ }
320
347
  /**
321
348
  * Create a new LoggingError
322
349
  * @param message - Error message to use for Error base class
@@ -340,12 +367,6 @@ export class LoggingError extends Error {
340
367
  this.addTelemetryProperties(props);
341
368
  }
342
369
  }
343
- get errorInstanceId() {
344
- return this._errorInstanceId;
345
- }
346
- overwriteErrorInstanceId(id) {
347
- this._errorInstanceId = id;
348
- }
349
370
  /**
350
371
  * Determines if a given object is an instance of a LoggingError
351
372
  * @param object - any object
@@ -381,8 +402,15 @@ export class LoggingError extends Error {
381
402
  }
382
403
  /**
383
404
  * The Error class used when normalizing an external error
405
+ *
406
+ * @internal
384
407
  */
385
408
  export const NORMALIZED_ERROR_TYPE = "genericError";
409
+ /**
410
+ * Subclass of LoggingError returned by normalizeError
411
+ *
412
+ * @internal
413
+ */
386
414
  class NormalizedLoggingError extends LoggingError {
387
415
  constructor(errorProps) {
388
416
  super(errorProps.message);
@@ -1 +1 @@
1
- {"version":3,"file":"errorLogging.js","sourceRoot":"","sources":["../src/errorLogging.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tILoggingError,\n\tITelemetryBaseProperties,\n\tTelemetryBaseEventPropertyType,\n\tTagged,\n} from \"@fluidframework/core-interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n\thasErrorInstanceId,\n\tIFluidErrorBase,\n\tisFluidError,\n\tisValidLegacyError,\n} from \"./fluidErrorBase\";\nimport { ITelemetryLoggerExt, TelemetryEventPropertyTypeExt } from \"./telemetryTypes\";\n\n/**\n * Determines if the provided value is an object but neither null nor an array.\n */\nconst isRegularObject = (value: unknown): boolean => {\n\treturn value !== null && !Array.isArray(value) && typeof value === \"object\";\n};\n\n/**\n * Inspect the given error for common \"safe\" props and return them.\n */\nexport function extractLogSafeErrorProperties(\n\terror: unknown,\n\tsanitizeStack: boolean,\n): {\n\tmessage: string;\n\terrorType?: string | undefined;\n\tstack?: string | undefined;\n} {\n\tconst removeMessageFromStack = (stack: string, errorName?: string): string => {\n\t\tif (!sanitizeStack) {\n\t\t\treturn stack;\n\t\t}\n\t\tconst stackFrames = stack.split(\"\\n\");\n\t\tstackFrames.shift(); // Remove \"[ErrorName]: [ErrorMessage]\"\n\t\tif (errorName !== undefined) {\n\t\t\tstackFrames.unshift(errorName); // Add \"[ErrorName]\"\n\t\t}\n\t\treturn stackFrames.join(\"\\n\");\n\t};\n\n\tconst message =\n\t\ttypeof (error as Partial<Error>)?.message === \"string\"\n\t\t\t? (error as Error).message\n\t\t\t: String(error);\n\n\tconst safeProps: { message: string; errorType?: string; stack?: string } = {\n\t\tmessage,\n\t};\n\n\tif (isRegularObject(error)) {\n\t\tconst { errorType, stack, name } = error as Partial<IFluidErrorBase>;\n\n\t\tif (typeof errorType === \"string\") {\n\t\t\tsafeProps.errorType = errorType;\n\t\t}\n\n\t\tif (typeof stack === \"string\") {\n\t\t\tconst errorName = typeof name === \"string\" ? name : undefined;\n\t\t\tsafeProps.stack = removeMessageFromStack(stack, errorName);\n\t\t}\n\t}\n\n\treturn safeProps;\n}\n\n/**\n * type guard for ILoggingError interface\n */\nexport const isILoggingError = (x: unknown): x is ILoggingError =>\n\ttypeof (x as Partial<ILoggingError>)?.getTelemetryProperties === \"function\";\n\n/**\n * Copy props from source onto target, but do not overwrite an existing prop that matches\n */\nfunction copyProps(\n\ttarget: ITelemetryBaseProperties | LoggingError,\n\tsource: ITelemetryBaseProperties,\n): void {\n\tfor (const key of Object.keys(source)) {\n\t\tif (target[key] === undefined) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n}\n\n/**\n * Metadata to annotate an error object when annotating or normalizing it\n */\nexport interface IFluidErrorAnnotations {\n\t/**\n\t * Telemetry props to log with the error\n\t */\n\tprops?: ITelemetryBaseProperties;\n}\n\n/**\n * For backwards compatibility with pre-errorInstanceId valid errors\n */\nfunction patchLegacyError(\n\tlegacyError: Omit<IFluidErrorBase, \"errorInstanceId\">,\n): asserts legacyError is IFluidErrorBase {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n\tconst patchMe: { -readonly [P in \"errorInstanceId\"]?: IFluidErrorBase[P] } = legacyError as any;\n\tif (patchMe.errorInstanceId === undefined) {\n\t\tpatchMe.errorInstanceId = uuid();\n\t}\n}\n\n/**\n * Normalize the given error yielding a valid Fluid Error\n * @returns A valid Fluid Error with any provided annotations applied\n * @param error - The error to normalize\n * @param annotations - Annotations to apply to the normalized error\n */\nexport function normalizeError(\n\terror: unknown,\n\tannotations: IFluidErrorAnnotations = {},\n): IFluidErrorBase {\n\t// Back-compat, while IFluidErrorBase is rolled out\n\tif (isValidLegacyError(error)) {\n\t\tpatchLegacyError(error);\n\t}\n\n\tif (isFluidError(error)) {\n\t\t// We can simply add the telemetry props to the error and return it\n\t\terror.addTelemetryProperties(annotations.props ?? {});\n\t\treturn error;\n\t}\n\n\t// We have to construct a new Fluid Error, copying safe properties over\n\tconst { message, stack } = extractLogSafeErrorProperties(error, false /* sanitizeStack */);\n\tconst fluidError: IFluidErrorBase = new NormalizedLoggingError({\n\t\tmessage,\n\t\tstack,\n\t});\n\n\t// We need to preserve these properties which are used in a non-typesafe way throughout driver code (see #8743)\n\t// Anywhere they are set should be on a valid Fluid Error that would have been returned above,\n\t// but we can't prove it with the types, so adding this defensive measure.\n\tif (typeof error === \"object\" && error !== null) {\n\t\tconst maybeHasRetry: Partial<Record<\"canRetry\" | \"retryAfterSeconds\", unknown>> = error;\n\t\tlet retryProps: Partial<Record<\"canRetry\" | \"retryAfterSeconds\", unknown>> | undefined;\n\t\tif (\"canRetry\" in error) {\n\t\t\tretryProps ??= {};\n\t\t\tretryProps.canRetry = maybeHasRetry.canRetry;\n\t\t}\n\t\tif (\"retryAfterSeconds\" in error) {\n\t\t\tretryProps ??= {};\n\t\t\tretryProps.retryAfterSeconds = maybeHasRetry.retryAfterSeconds;\n\t\t}\n\t\tif (retryProps !== undefined) {\n\t\t\tObject.assign(fluidError, retryProps);\n\t\t}\n\t}\n\n\tif (typeof error !== \"object\") {\n\t\t// This is only interesting for non-objects\n\t\tfluidError.addTelemetryProperties({ typeofError: typeof error });\n\t}\n\n\tconst errorTelemetryProps = LoggingError.typeCheck(error)\n\t\t? error.getTelemetryProperties()\n\t\t: { untrustedOrigin: 1 }; // This will let us filter errors that did not originate from our own codebase\n\n\tfluidError.addTelemetryProperties({\n\t\t...errorTelemetryProps,\n\t\t...annotations.props,\n\t});\n\n\treturn fluidError;\n}\n\nlet stackPopulatedOnCreation: boolean | undefined;\n\n/**\n * The purpose of this function is to provide ability to capture stack context quickly.\n * Accessing new Error().stack is slow, and the slowest part is accessing stack property itself.\n * There are scenarios where we generate error with stack, but error is handled in most cases and\n * stack property is not accessed.\n * For such cases it's better to not read stack property right away, but rather delay it until / if it's needed\n * Some browsers will populate stack right away, others require throwing Error, so we do auto-detection on the fly.\n * @returns Error object that has stack populated.\n */\nexport function generateErrorWithStack(): Error {\n\tconst err = new Error(\"<<generated stack>>\");\n\n\tif (stackPopulatedOnCreation === undefined) {\n\t\tstackPopulatedOnCreation = err.stack !== undefined;\n\t}\n\n\tif (stackPopulatedOnCreation) {\n\t\treturn err;\n\t}\n\n\ttry {\n\t\tthrow err;\n\t} catch (error) {\n\t\treturn error as Error;\n\t}\n}\n\nexport function generateStack(): string | undefined {\n\treturn generateErrorWithStack().stack;\n}\n\n/**\n * Create a new error using newErrorFn, wrapping and caused by the given unknown error.\n * Copies the inner error's stack, errorInstanceId and telemetry props over to the new error if present\n * @param innerError - An error from untrusted/unknown origins\n * @param newErrorFn - callback that will create a new error given the original error's message\n * @returns A new error object \"wrapping\" the given error\n */\nexport function wrapError<T extends LoggingError>(\n\tinnerError: unknown,\n\tnewErrorFn: (message: string) => T,\n): T {\n\tconst { message, stack } = extractLogSafeErrorProperties(innerError, false /* sanitizeStack */);\n\n\tconst newError = newErrorFn(message);\n\n\tif (stack !== undefined) {\n\t\toverwriteStack(newError, stack);\n\t}\n\n\t// Mark external errors with untrustedOrigin flag\n\tif (isExternalError(innerError)) {\n\t\tnewError.addTelemetryProperties({ untrustedOrigin: 1 });\n\t}\n\n\t// Reuse errorInstanceId\n\tif (hasErrorInstanceId(innerError)) {\n\t\tnewError.overwriteErrorInstanceId(innerError.errorInstanceId);\n\n\t\t// For \"back-compat\" in the logs\n\t\tnewError.addTelemetryProperties({ innerErrorInstanceId: innerError.errorInstanceId });\n\t}\n\n\t// Lastly, copy over all other telemetry properties. Note these will not overwrite existing properties\n\t// This will include the untrustedOrigin property if the inner error itself was created from an external error\n\tif (isILoggingError(innerError)) {\n\t\tnewError.addTelemetryProperties(innerError.getTelemetryProperties());\n\t}\n\n\treturn newError;\n}\n\n/**\n * The same as wrapError, but also logs the innerError, including the wrapping error's instance ID.\n *\n * @typeParam T - The kind of wrapper error to create.\n */\nexport function wrapErrorAndLog<T extends LoggingError>(\n\tinnerError: unknown,\n\tnewErrorFn: (message: string) => T,\n\tlogger: ITelemetryLoggerExt,\n): T {\n\tconst newError = wrapError(innerError, newErrorFn);\n\n\t// This will match innerError.errorInstanceId if present (see wrapError)\n\tconst errorInstanceId = newError.errorInstanceId;\n\n\t// For \"back-compat\" in the logs\n\tconst wrappedByErrorInstanceId = errorInstanceId;\n\n\tlogger.sendTelemetryEvent(\n\t\t{\n\t\t\teventName: \"WrapError\",\n\t\t\terrorInstanceId,\n\t\t\twrappedByErrorInstanceId,\n\t\t},\n\t\tinnerError,\n\t);\n\n\treturn newError;\n}\n\n/**\n * Attempts to overwrite the error's stack\n *\n * There have been reports of certain JS environments where overwriting stack will throw.\n * If that happens, this adds the given stack as the telemetry property \"stack2\"\n *\n * @internal\n */\nexport function overwriteStack(error: IFluidErrorBase | LoggingError, stack: string): void {\n\ttry {\n\t\tObject.assign(error, { stack });\n\t} catch {\n\t\terror.addTelemetryProperties({ stack2: stack });\n\t}\n}\n\n/**\n * True for any error object that is an (optionally normalized) external error\n * False for any error we created and raised within the FF codebase via LoggingError base class,\n * or wrapped in a well-known error type\n */\nexport function isExternalError(error: unknown): boolean {\n\t// LoggingErrors are an internal FF error type. However, an external error can be converted\n\t// into a LoggingError if it is normalized. In this case we must use the untrustedOrigin flag to\n\t// determine whether the original error was infact external.\n\tif (LoggingError.typeCheck(error)) {\n\t\tif ((error as NormalizedLoggingError).errorType === NORMALIZED_ERROR_TYPE) {\n\t\t\treturn error.getTelemetryProperties().untrustedOrigin === 1;\n\t\t}\n\t\treturn false;\n\t}\n\treturn !isValidLegacyError(error);\n}\n\n/**\n * Type guard to identify if a particular telemetry property appears to be a tagged telemetry property\n */\nexport function isTaggedTelemetryPropertyValue(\n\tx: Tagged<TelemetryEventPropertyTypeExt> | TelemetryEventPropertyTypeExt,\n): x is Tagged<TelemetryEventPropertyTypeExt> {\n\treturn typeof (x as Partial<Tagged<unknown>>)?.tag === \"string\";\n}\n\n/**\n * Filter serializable telemetry properties\n * @param x - Any telemetry prop\n * @returns As-is if x is primitive. returns stringified if x is an array of primitive.\n * otherwise returns null since this is what we support at the moment.\n */\nfunction filterValidTelemetryProps(x: unknown, key: string): TelemetryBaseEventPropertyType {\n\tif (Array.isArray(x) && x.every((val) => isTelemetryEventPropertyValue(val))) {\n\t\treturn JSON.stringify(x);\n\t}\n\tif (isTelemetryEventPropertyValue(x)) {\n\t\treturn x;\n\t}\n\t// We don't support logging arbitrary objects\n\tconsole.error(`UnSupported Format of Logging Error Property for key ${key}:`, x);\n\treturn \"REDACTED (arbitrary object)\";\n}\n\n// checking type of x, returns false if x is null\nfunction isTelemetryEventPropertyValue(x: unknown): x is TelemetryBaseEventPropertyType {\n\tswitch (typeof x) {\n\t\tcase \"string\":\n\t\tcase \"number\":\n\t\tcase \"boolean\":\n\t\tcase \"undefined\":\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n/**\n * Walk an object's enumerable properties to find those fit for telemetry.\n */\nfunction getValidTelemetryProps(obj: object, keysToOmit: Set<string>): ITelemetryBaseProperties {\n\tconst props: ITelemetryBaseProperties = {};\n\tfor (const key of Object.keys(obj)) {\n\t\tif (keysToOmit.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst val = obj[key] as\n\t\t\t| TelemetryEventPropertyTypeExt\n\t\t\t| Tagged<TelemetryEventPropertyTypeExt>;\n\n\t\t// ensure only valid props get logged, since props of logging error could be in any shape\n\t\tif (isTaggedTelemetryPropertyValue(val)) {\n\t\t\tprops[key] = {\n\t\t\t\tvalue: filterValidTelemetryProps(val.value, key),\n\t\t\t\ttag: val.tag,\n\t\t\t};\n\t\t} else {\n\t\t\tprops[key] = filterValidTelemetryProps(val, key);\n\t\t}\n\t}\n\treturn props;\n}\n\n/**\n * Borrowed from\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#examples}\n * Avoids runtime errors with circular references.\n * Not ideal, as will cut values that are not necessarily circular references.\n * Could be improved by implementing Node's util.inspect() for browser (minus all the coloring code)\n */\n// TODO: Use `unknown` instead (API breaking change)\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const getCircularReplacer = (): ((key: string, value: unknown) => any) => {\n\tconst seen = new WeakSet();\n\treturn (key: string, value: unknown): any => {\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tif (seen.has(value)) {\n\t\t\t\treturn \"<removed/circular>\";\n\t\t\t}\n\t\t\tseen.add(value);\n\t\t}\n\t\treturn value;\n\t};\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/**\n * Base class for \"trusted\" errors we create, whose properties can generally be logged to telemetry safely.\n * All properties set on the object, or passed in (via the constructor or addTelemetryProperties),\n * will be logged in accordance with their tag, if present.\n *\n * PLEASE take care to avoid setting sensitive data on this object without proper tagging!\n */\nexport class LoggingError\n\textends Error\n\timplements ILoggingError, Omit<IFluidErrorBase, \"errorType\">\n{\n\tprivate _errorInstanceId = uuid();\n\tget errorInstanceId(): string {\n\t\treturn this._errorInstanceId;\n\t}\n\toverwriteErrorInstanceId(id: string): void {\n\t\tthis._errorInstanceId = id;\n\t}\n\n\t/**\n\t * Backwards compatibility to appease {@link isFluidError} in old code that may handle this error.\n\t */\n\t// @ts-expect-error - This field shouldn't be referenced in the current version, but needs to exist at runtime.\n\t// eslint-disable-next-line @typescript-eslint/prefer-as-const\n\tprivate readonly fluidErrorCode: \"-\" = \"-\";\n\n\t/**\n\t * Create a new LoggingError\n\t * @param message - Error message to use for Error base class\n\t * @param props - telemetry props to include on the error for when it's logged\n\t * @param omitPropsFromLogging - properties by name to omit from telemetry props\n\t */\n\tconstructor(\n\t\tmessage: string,\n\t\tprops?: ITelemetryBaseProperties,\n\t\tprivate readonly omitPropsFromLogging: Set<string> = new Set(),\n\t) {\n\t\tsuper(message);\n\n\t\t// Don't log this list itself, or the private _errorInstanceId\n\t\tomitPropsFromLogging.add(\"omitPropsFromLogging\");\n\t\tomitPropsFromLogging.add(\"_errorInstanceId\");\n\n\t\tif (props) {\n\t\t\tthis.addTelemetryProperties(props);\n\t\t}\n\t}\n\n\t/**\n\t * Determines if a given object is an instance of a LoggingError\n\t * @param object - any object\n\t * @returns true if the object is an instance of a LoggingError, false if not.\n\t */\n\tpublic static typeCheck(object: unknown): object is LoggingError {\n\t\tif (typeof object === \"object\" && object !== null) {\n\t\t\treturn (\n\t\t\t\ttypeof (object as LoggingError).addTelemetryProperties === \"function\" &&\n\t\t\t\ttypeof (object as LoggingError).getTelemetryProperties === \"function\" &&\n\t\t\t\ttypeof (object as LoggingError).errorInstanceId === \"string\"\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add additional properties to be logged\n\t */\n\tpublic addTelemetryProperties(props: ITelemetryBaseProperties): void {\n\t\tcopyProps(this, props);\n\t}\n\n\t/**\n\t * Get all properties fit to be logged to telemetry for this error\n\t */\n\tpublic getTelemetryProperties(): ITelemetryBaseProperties {\n\t\tconst taggableProps = getValidTelemetryProps(this, this.omitPropsFromLogging);\n\t\t// Include non-enumerable props that are not returned by getValidTelemetryProps\n\t\treturn {\n\t\t\t...taggableProps,\n\t\t\tstack: this.stack,\n\t\t\tmessage: this.message,\n\t\t\terrorInstanceId: this._errorInstanceId,\n\t\t};\n\t}\n}\n\n/**\n * The Error class used when normalizing an external error\n */\nexport const NORMALIZED_ERROR_TYPE = \"genericError\";\nclass NormalizedLoggingError extends LoggingError {\n\t// errorType \"genericError\" is used as a default value throughout the code.\n\t// Note that this matches ContainerErrorType/DriverErrorType's genericError\n\terrorType = NORMALIZED_ERROR_TYPE;\n\n\tconstructor(errorProps: Pick<IFluidErrorBase, \"message\" | \"stack\">) {\n\t\tsuper(errorProps.message);\n\n\t\tif (errorProps.stack !== undefined) {\n\t\t\toverwriteStack(this, errorProps.stack);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"errorLogging.js","sourceRoot":"","sources":["../src/errorLogging.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tILoggingError,\n\tITelemetryBaseProperties,\n\tTelemetryBaseEventPropertyType,\n\tTagged,\n} from \"@fluidframework/core-interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n\thasErrorInstanceId,\n\tIFluidErrorBase,\n\tisFluidError,\n\tisValidLegacyError,\n} from \"./fluidErrorBase\";\nimport { ITelemetryLoggerExt, TelemetryEventPropertyTypeExt } from \"./telemetryTypes\";\n\n/**\n * Determines if the provided value is an object but neither null nor an array.\n */\nconst isRegularObject = (value: unknown): boolean => {\n\treturn value !== null && !Array.isArray(value) && typeof value === \"object\";\n};\n\n/**\n * Inspect the given error for common \"safe\" props and return them.\n *\n * @internal\n */\nexport function extractLogSafeErrorProperties(\n\terror: unknown,\n\tsanitizeStack: boolean,\n): {\n\tmessage: string;\n\terrorType?: string | undefined;\n\tstack?: string | undefined;\n} {\n\tconst removeMessageFromStack = (stack: string, errorName?: string): string => {\n\t\tif (!sanitizeStack) {\n\t\t\treturn stack;\n\t\t}\n\t\tconst stackFrames = stack.split(\"\\n\");\n\t\tstackFrames.shift(); // Remove \"[ErrorName]: [ErrorMessage]\"\n\t\tif (errorName !== undefined) {\n\t\t\tstackFrames.unshift(errorName); // Add \"[ErrorName]\"\n\t\t}\n\t\treturn stackFrames.join(\"\\n\");\n\t};\n\n\tconst message =\n\t\ttypeof (error as Partial<Error>)?.message === \"string\"\n\t\t\t? (error as Error).message\n\t\t\t: String(error);\n\n\tconst safeProps: { message: string; errorType?: string; stack?: string } = {\n\t\tmessage,\n\t};\n\n\tif (isRegularObject(error)) {\n\t\tconst { errorType, stack, name } = error as Partial<IFluidErrorBase>;\n\n\t\tif (typeof errorType === \"string\") {\n\t\t\tsafeProps.errorType = errorType;\n\t\t}\n\n\t\tif (typeof stack === \"string\") {\n\t\t\tconst errorName = typeof name === \"string\" ? name : undefined;\n\t\t\tsafeProps.stack = removeMessageFromStack(stack, errorName);\n\t\t}\n\t}\n\n\treturn safeProps;\n}\n\n/**\n * type guard for ILoggingError interface\n */\nexport const isILoggingError = (x: unknown): x is ILoggingError =>\n\ttypeof (x as Partial<ILoggingError>)?.getTelemetryProperties === \"function\";\n\n/**\n * Copy props from source onto target, but do not overwrite an existing prop that matches\n */\nfunction copyProps(\n\ttarget: ITelemetryBaseProperties | LoggingError,\n\tsource: ITelemetryBaseProperties,\n): void {\n\tfor (const key of Object.keys(source)) {\n\t\tif (target[key] === undefined) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n}\n\n/**\n * Metadata to annotate an error object when annotating or normalizing it\n *\n * @internal\n */\nexport interface IFluidErrorAnnotations {\n\t/**\n\t * Telemetry props to log with the error\n\t */\n\tprops?: ITelemetryBaseProperties;\n}\n\n/**\n * For backwards compatibility with pre-errorInstanceId valid errors\n */\nfunction patchLegacyError(\n\tlegacyError: Omit<IFluidErrorBase, \"errorInstanceId\">,\n): asserts legacyError is IFluidErrorBase {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n\tconst patchMe: { -readonly [P in \"errorInstanceId\"]?: IFluidErrorBase[P] } = legacyError as any;\n\tif (patchMe.errorInstanceId === undefined) {\n\t\tpatchMe.errorInstanceId = uuid();\n\t}\n}\n\n/**\n * Normalize the given error yielding a valid Fluid Error\n * @returns A valid Fluid Error with any provided annotations applied\n * @param error - The error to normalize\n * @param annotations - Annotations to apply to the normalized error\n *\n * @internal\n */\nexport function normalizeError(\n\terror: unknown,\n\tannotations: IFluidErrorAnnotations = {},\n): IFluidErrorBase {\n\t// Back-compat, while IFluidErrorBase is rolled out\n\tif (isValidLegacyError(error)) {\n\t\tpatchLegacyError(error);\n\t}\n\n\tif (isFluidError(error)) {\n\t\t// We can simply add the telemetry props to the error and return it\n\t\terror.addTelemetryProperties(annotations.props ?? {});\n\t\treturn error;\n\t}\n\n\t// We have to construct a new Fluid Error, copying safe properties over\n\tconst { message, stack } = extractLogSafeErrorProperties(error, false /* sanitizeStack */);\n\tconst fluidError: IFluidErrorBase = new NormalizedLoggingError({\n\t\tmessage,\n\t\tstack,\n\t});\n\n\t// We need to preserve these properties which are used in a non-typesafe way throughout driver code (see #8743)\n\t// Anywhere they are set should be on a valid Fluid Error that would have been returned above,\n\t// but we can't prove it with the types, so adding this defensive measure.\n\tif (typeof error === \"object\" && error !== null) {\n\t\tconst maybeHasRetry: Partial<Record<\"canRetry\" | \"retryAfterSeconds\", unknown>> = error;\n\t\tlet retryProps: Partial<Record<\"canRetry\" | \"retryAfterSeconds\", unknown>> | undefined;\n\t\tif (\"canRetry\" in error) {\n\t\t\tretryProps ??= {};\n\t\t\tretryProps.canRetry = maybeHasRetry.canRetry;\n\t\t}\n\t\tif (\"retryAfterSeconds\" in error) {\n\t\t\tretryProps ??= {};\n\t\t\tretryProps.retryAfterSeconds = maybeHasRetry.retryAfterSeconds;\n\t\t}\n\t\tif (retryProps !== undefined) {\n\t\t\tObject.assign(fluidError, retryProps);\n\t\t}\n\t}\n\n\tif (typeof error !== \"object\") {\n\t\t// This is only interesting for non-objects\n\t\tfluidError.addTelemetryProperties({ typeofError: typeof error });\n\t}\n\n\tconst errorTelemetryProps = LoggingError.typeCheck(error)\n\t\t? error.getTelemetryProperties()\n\t\t: { untrustedOrigin: 1 }; // This will let us filter errors that did not originate from our own codebase\n\n\tfluidError.addTelemetryProperties({\n\t\t...errorTelemetryProps,\n\t\t...annotations.props,\n\t});\n\n\treturn fluidError;\n}\n\nlet stackPopulatedOnCreation: boolean | undefined;\n\n/**\n * The purpose of this function is to provide ability to capture stack context quickly.\n * Accessing new Error().stack is slow, and the slowest part is accessing stack property itself.\n * There are scenarios where we generate error with stack, but error is handled in most cases and\n * stack property is not accessed.\n * For such cases it's better to not read stack property right away, but rather delay it until / if it's needed\n * Some browsers will populate stack right away, others require throwing Error, so we do auto-detection on the fly.\n * @returns Error object that has stack populated.\n *\n * @internal\n */\nexport function generateErrorWithStack(): Error {\n\tconst err = new Error(\"<<generated stack>>\");\n\n\tif (stackPopulatedOnCreation === undefined) {\n\t\tstackPopulatedOnCreation = err.stack !== undefined;\n\t}\n\n\tif (stackPopulatedOnCreation) {\n\t\treturn err;\n\t}\n\n\ttry {\n\t\tthrow err;\n\t} catch (error) {\n\t\treturn error as Error;\n\t}\n}\n\n/**\n * Generate a stack at this callsite as if an error were thrown from here.\n * @returns the callstack (does not throw)\n *\n * @internal\n */\nexport function generateStack(): string | undefined {\n\treturn generateErrorWithStack().stack;\n}\n\n/**\n * Create a new error using newErrorFn, wrapping and caused by the given unknown error.\n * Copies the inner error's stack, errorInstanceId and telemetry props over to the new error if present\n * @param innerError - An error from untrusted/unknown origins\n * @param newErrorFn - callback that will create a new error given the original error's message\n * @returns A new error object \"wrapping\" the given error\n *\n * @internal\n */\nexport function wrapError<T extends LoggingError>(\n\tinnerError: unknown,\n\tnewErrorFn: (message: string) => T,\n): T {\n\tconst { message, stack } = extractLogSafeErrorProperties(innerError, false /* sanitizeStack */);\n\n\tconst newError = newErrorFn(message);\n\n\tif (stack !== undefined) {\n\t\toverwriteStack(newError, stack);\n\t}\n\n\t// Mark external errors with untrustedOrigin flag\n\tif (isExternalError(innerError)) {\n\t\tnewError.addTelemetryProperties({ untrustedOrigin: 1 });\n\t}\n\n\t// Reuse errorInstanceId\n\tif (hasErrorInstanceId(innerError)) {\n\t\tnewError.overwriteErrorInstanceId(innerError.errorInstanceId);\n\n\t\t// For \"back-compat\" in the logs\n\t\tnewError.addTelemetryProperties({ innerErrorInstanceId: innerError.errorInstanceId });\n\t}\n\n\t// Lastly, copy over all other telemetry properties. Note these will not overwrite existing properties\n\t// This will include the untrustedOrigin property if the inner error itself was created from an external error\n\tif (isILoggingError(innerError)) {\n\t\tnewError.addTelemetryProperties(innerError.getTelemetryProperties());\n\t}\n\n\treturn newError;\n}\n\n/**\n * The same as wrapError, but also logs the innerError, including the wrapping error's instance ID.\n *\n * @typeParam T - The kind of wrapper error to create.\n *\n * @internal\n */\nexport function wrapErrorAndLog<T extends LoggingError>(\n\tinnerError: unknown,\n\tnewErrorFn: (message: string) => T,\n\tlogger: ITelemetryLoggerExt,\n): T {\n\tconst newError = wrapError(innerError, newErrorFn);\n\n\t// This will match innerError.errorInstanceId if present (see wrapError)\n\tconst errorInstanceId = newError.errorInstanceId;\n\n\t// For \"back-compat\" in the logs\n\tconst wrappedByErrorInstanceId = errorInstanceId;\n\n\tlogger.sendTelemetryEvent(\n\t\t{\n\t\t\teventName: \"WrapError\",\n\t\t\terrorInstanceId,\n\t\t\twrappedByErrorInstanceId,\n\t\t},\n\t\tinnerError,\n\t);\n\n\treturn newError;\n}\n\n/**\n * Attempts to overwrite the error's stack\n *\n * There have been reports of certain JS environments where overwriting stack will throw.\n * If that happens, this adds the given stack as the telemetry property \"stack2\"\n *\n * @internal\n */\nexport function overwriteStack(error: IFluidErrorBase | LoggingError, stack: string): void {\n\ttry {\n\t\tObject.assign(error, { stack });\n\t} catch {\n\t\terror.addTelemetryProperties({ stack2: stack });\n\t}\n}\n\n/**\n * True for any error object that is an (optionally normalized) external error\n * False for any error we created and raised within the FF codebase via LoggingError base class,\n * or wrapped in a well-known error type\n *\n * @internal\n */\nexport function isExternalError(error: unknown): boolean {\n\t// LoggingErrors are an internal FF error type. However, an external error can be converted\n\t// into a LoggingError if it is normalized. In this case we must use the untrustedOrigin flag to\n\t// determine whether the original error was infact external.\n\tif (LoggingError.typeCheck(error)) {\n\t\tif ((error as NormalizedLoggingError).errorType === NORMALIZED_ERROR_TYPE) {\n\t\t\treturn error.getTelemetryProperties().untrustedOrigin === 1;\n\t\t}\n\t\treturn false;\n\t}\n\treturn !isValidLegacyError(error);\n}\n\n/**\n * Type guard to identify if a particular telemetry property appears to be a tagged telemetry property\n */\nexport function isTaggedTelemetryPropertyValue(\n\tx: Tagged<TelemetryEventPropertyTypeExt> | TelemetryEventPropertyTypeExt,\n): x is Tagged<TelemetryEventPropertyTypeExt> {\n\treturn typeof (x as Partial<Tagged<unknown>>)?.tag === \"string\";\n}\n\n/**\n * Filter serializable telemetry properties\n * @param x - Any telemetry prop\n * @returns As-is if x is primitive. returns stringified if x is an array of primitive.\n * otherwise returns null since this is what we support at the moment.\n */\nfunction filterValidTelemetryProps(x: unknown, key: string): TelemetryBaseEventPropertyType {\n\tif (Array.isArray(x) && x.every((val) => isTelemetryEventPropertyValue(val))) {\n\t\treturn JSON.stringify(x);\n\t}\n\tif (isTelemetryEventPropertyValue(x)) {\n\t\treturn x;\n\t}\n\t// We don't support logging arbitrary objects\n\tconsole.error(`UnSupported Format of Logging Error Property for key ${key}:`, x);\n\treturn \"REDACTED (arbitrary object)\";\n}\n\n// checking type of x, returns false if x is null\nfunction isTelemetryEventPropertyValue(x: unknown): x is TelemetryBaseEventPropertyType {\n\tswitch (typeof x) {\n\t\tcase \"string\":\n\t\tcase \"number\":\n\t\tcase \"boolean\":\n\t\tcase \"undefined\": {\n\t\t\treturn true;\n\t\t}\n\t\tdefault: {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\n/**\n * Walk an object's enumerable properties to find those fit for telemetry.\n */\nfunction getValidTelemetryProps(obj: object, keysToOmit: Set<string>): ITelemetryBaseProperties {\n\tconst props: ITelemetryBaseProperties = {};\n\tfor (const key of Object.keys(obj)) {\n\t\tif (keysToOmit.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst val = obj[key] as\n\t\t\t| TelemetryEventPropertyTypeExt\n\t\t\t| Tagged<TelemetryEventPropertyTypeExt>;\n\n\t\t// ensure only valid props get logged, since props of logging error could be in any shape\n\t\tprops[key] = isTaggedTelemetryPropertyValue(val)\n\t\t\t? {\n\t\t\t\t\tvalue: filterValidTelemetryProps(val.value, key),\n\t\t\t\t\ttag: val.tag,\n\t\t\t }\n\t\t\t: filterValidTelemetryProps(val, key);\n\t}\n\treturn props;\n}\n\n/**\n * Borrowed from\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#examples}\n * Avoids runtime errors with circular references.\n * Not ideal, as will cut values that are not necessarily circular references.\n * Could be improved by implementing Node's util.inspect() for browser (minus all the coloring code)\n *\n * @internal\n */\n// TODO: Use `unknown` instead (API breaking change)\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const getCircularReplacer = (): ((key: string, value: unknown) => any) => {\n\tconst seen = new WeakSet();\n\treturn (key: string, value: unknown): any => {\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tif (seen.has(value)) {\n\t\t\t\treturn \"<removed/circular>\";\n\t\t\t}\n\t\t\tseen.add(value);\n\t\t}\n\t\treturn value;\n\t};\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n/**\n * Base class for \"trusted\" errors we create, whose properties can generally be logged to telemetry safely.\n * All properties set on the object, or passed in (via the constructor or addTelemetryProperties),\n * will be logged in accordance with their tag, if present.\n *\n * PLEASE take care to avoid setting sensitive data on this object without proper tagging!\n *\n * @internal\n */\nexport class LoggingError\n\textends Error\n\timplements ILoggingError, Omit<IFluidErrorBase, \"errorType\">\n{\n\tprivate _errorInstanceId = uuid();\n\tget errorInstanceId(): string {\n\t\treturn this._errorInstanceId;\n\t}\n\toverwriteErrorInstanceId(id: string): void {\n\t\tthis._errorInstanceId = id;\n\t}\n\n\t/**\n\t * Backwards compatibility to appease {@link isFluidError} in old code that may handle this error.\n\t */\n\t// @ts-expect-error - This field shouldn't be referenced in the current version, but needs to exist at runtime.\n\t// eslint-disable-next-line @typescript-eslint/prefer-as-const\n\tprivate readonly fluidErrorCode: \"-\" = \"-\";\n\n\t/**\n\t * Create a new LoggingError\n\t * @param message - Error message to use for Error base class\n\t * @param props - telemetry props to include on the error for when it's logged\n\t * @param omitPropsFromLogging - properties by name to omit from telemetry props\n\t */\n\tconstructor(\n\t\tmessage: string,\n\t\tprops?: ITelemetryBaseProperties,\n\t\tprivate readonly omitPropsFromLogging: Set<string> = new Set(),\n\t) {\n\t\tsuper(message);\n\n\t\t// Don't log this list itself, or the private _errorInstanceId\n\t\tomitPropsFromLogging.add(\"omitPropsFromLogging\");\n\t\tomitPropsFromLogging.add(\"_errorInstanceId\");\n\n\t\tif (props) {\n\t\t\tthis.addTelemetryProperties(props);\n\t\t}\n\t}\n\n\t/**\n\t * Determines if a given object is an instance of a LoggingError\n\t * @param object - any object\n\t * @returns true if the object is an instance of a LoggingError, false if not.\n\t */\n\tpublic static typeCheck(object: unknown): object is LoggingError {\n\t\tif (typeof object === \"object\" && object !== null) {\n\t\t\treturn (\n\t\t\t\ttypeof (object as LoggingError).addTelemetryProperties === \"function\" &&\n\t\t\t\ttypeof (object as LoggingError).getTelemetryProperties === \"function\" &&\n\t\t\t\ttypeof (object as LoggingError).errorInstanceId === \"string\"\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add additional properties to be logged\n\t */\n\tpublic addTelemetryProperties(props: ITelemetryBaseProperties): void {\n\t\tcopyProps(this, props);\n\t}\n\n\t/**\n\t * Get all properties fit to be logged to telemetry for this error\n\t */\n\tpublic getTelemetryProperties(): ITelemetryBaseProperties {\n\t\tconst taggableProps = getValidTelemetryProps(this, this.omitPropsFromLogging);\n\t\t// Include non-enumerable props that are not returned by getValidTelemetryProps\n\t\treturn {\n\t\t\t...taggableProps,\n\t\t\tstack: this.stack,\n\t\t\tmessage: this.message,\n\t\t\terrorInstanceId: this._errorInstanceId,\n\t\t};\n\t}\n}\n\n/**\n * The Error class used when normalizing an external error\n *\n * @internal\n */\nexport const NORMALIZED_ERROR_TYPE = \"genericError\";\n\n/**\n * Subclass of LoggingError returned by normalizeError\n *\n * @internal\n */\nclass NormalizedLoggingError extends LoggingError {\n\t// errorType \"genericError\" is used as a default value throughout the code.\n\t// Note that this matches ContainerErrorType/DriverErrorType's genericError\n\terrorType = NORMALIZED_ERROR_TYPE;\n\n\tconstructor(errorProps: Pick<IFluidErrorBase, \"message\" | \"stack\">) {\n\t\tsuper(errorProps.message);\n\n\t\tif (errorProps.stack !== undefined) {\n\t\t\toverwriteStack(this, errorProps.stack);\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,wBAAgB,cAAc,CAC7B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,MAAM,EACb,GAAG,IAAI,EAAE,OAAO,EAAE,GAChB,IAAI,CAMN;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,OAAO,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GACzB,IAAI,CAUN"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,wBAAgB,cAAc,CAC7B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,MAAM,EACb,GAAG,IAAI,EAAE,OAAO,EAAE,GAChB,IAAI,CAMN;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,OAAO,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GACzB,IAAI,CAUN"}
package/lib/events.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAEpD,MAAM,UAAU,cAAc,CAC7B,OAAqB,EACrB,MAA2B,EAC3B,KAAa,EACb,GAAG,IAAe;IAElB,IAAI;QACH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;KAC7B;IAAC,OAAO,KAAK,EAAE;QACf,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;KACtE;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAA2B,EAC3B,OAAqB,EACrB,SAAkB,EAClB,QAAiB,EACjB,kBAA2B;IAE3B,IAAI;QACH,IAAI,SAAS,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;SAC3C;aAAM;YACN,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;SACxD;KACD;IAAC,OAAO,KAAK,EAAE;QACf,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,KAAK,CAAC,CAAC;KACxE;AACF,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { EventEmitter } from \"events\";\nimport { ITelemetryLoggerExt } from \"./telemetryTypes\";\n\nexport const connectedEventName = \"connected\";\nexport const disconnectedEventName = \"disconnected\";\n\nexport function safeRaiseEvent(\n\temitter: EventEmitter,\n\tlogger: ITelemetryLoggerExt,\n\tevent: string,\n\t...args: unknown[]\n): void {\n\ttry {\n\t\temitter.emit(event, ...args);\n\t} catch (error) {\n\t\tlogger.sendErrorEvent({ eventName: \"RaiseEventError\", event }, error);\n\t}\n}\n\n/**\n * Raises events pertaining to the connection\n * @param logger - The logger to log telemetry\n * @param emitter - The event emitter instance\n * @param connected - A boolean tracking whether the connection was in a connected state or not\n * @param clientId - The connected/disconnected clientId\n * @param disconnectedReason - The reason for the connection to be disconnected (Used for telemetry purposes only)\n */\nexport function raiseConnectedEvent(\n\tlogger: ITelemetryLoggerExt,\n\temitter: EventEmitter,\n\tconnected: boolean,\n\tclientId?: string,\n\tdisconnectedReason?: string,\n): void {\n\ttry {\n\t\tif (connected) {\n\t\t\temitter.emit(connectedEventName, clientId);\n\t\t} else {\n\t\t\temitter.emit(disconnectedEventName, disconnectedReason);\n\t\t}\n\t} catch (error) {\n\t\tlogger.sendErrorEvent({ eventName: \"RaiseConnectedEventError\" }, error);\n\t}\n}\n"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAEpD,MAAM,UAAU,cAAc,CAC7B,OAAqB,EACrB,MAA2B,EAC3B,KAAa,EACb,GAAG,IAAe;IAElB,IAAI;QACH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;KAC7B;IAAC,OAAO,KAAK,EAAE;QACf,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;KACtE;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAA2B,EAC3B,OAAqB,EACrB,SAAkB,EAClB,QAAiB,EACjB,kBAA2B;IAE3B,IAAI;QACH,IAAI,SAAS,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;SAC3C;aAAM;YACN,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;SACxD;KACD;IAAC,OAAO,KAAK,EAAE;QACf,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,KAAK,CAAC,CAAC;KACxE;AACF,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// False positive: this is an import from the `events` package, not from Node.\n// eslint-disable-next-line unicorn/prefer-node-protocol\nimport { EventEmitter } from \"events\";\nimport { ITelemetryLoggerExt } from \"./telemetryTypes\";\n\nexport const connectedEventName = \"connected\";\nexport const disconnectedEventName = \"disconnected\";\n\nexport function safeRaiseEvent(\n\temitter: EventEmitter,\n\tlogger: ITelemetryLoggerExt,\n\tevent: string,\n\t...args: unknown[]\n): void {\n\ttry {\n\t\temitter.emit(event, ...args);\n\t} catch (error) {\n\t\tlogger.sendErrorEvent({ eventName: \"RaiseEventError\", event }, error);\n\t}\n}\n\n/**\n * Raises events pertaining to the connection\n * @param logger - The logger to log telemetry\n * @param emitter - The event emitter instance\n * @param connected - A boolean tracking whether the connection was in a connected state or not\n * @param clientId - The connected/disconnected clientId\n * @param disconnectedReason - The reason for the connection to be disconnected (Used for telemetry purposes only)\n */\nexport function raiseConnectedEvent(\n\tlogger: ITelemetryLoggerExt,\n\temitter: EventEmitter,\n\tconnected: boolean,\n\tclientId?: string,\n\tdisconnectedReason?: string,\n): void {\n\ttry {\n\t\tif (connected) {\n\t\t\temitter.emit(connectedEventName, clientId);\n\t\t} else {\n\t\t\temitter.emit(disconnectedEventName, disconnectedReason);\n\t\t}\n\t} catch (error) {\n\t\tlogger.sendErrorEvent({ eventName: \"RaiseConnectedEventError\" }, error);\n\t}\n}\n"]}
package/lib/index.d.ts CHANGED
@@ -12,6 +12,6 @@ export { eventNamespaceSeparator, createChildLogger, createMultiSinkLogger, form
12
12
  export { MockLogger } from "./mockLogger";
13
13
  export { ThresholdCounter } from "./thresholdCounter";
14
14
  export { SampledTelemetryHelper } from "./sampledTelemetryHelper";
15
- export { logIfFalse } from "./utils";
15
+ export { logIfFalse, createSampledLogger, IEventSampler, ISampledTelemetryLogger } from "./utils";
16
16
  export { TelemetryEventPropertyTypeExt, ITelemetryEventExt, ITelemetryGenericEventExt, ITelemetryErrorEventExt, ITelemetryPerformanceEventExt, ITelemetryLoggerExt, ITaggedTelemetryPropertyTypeExt, ITelemetryPropertiesExt, TelemetryEventCategory, } from "./telemetryTypes";
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,EACtB,eAAe,EACf,WAAW,EACX,yBAAyB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,gCAAgC,EAChC,YAAY,EACZ,UAAU,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACN,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACN,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,EACnB,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,EACtB,eAAe,EACf,WAAW,EACX,yBAAyB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,gCAAgC,EAChC,YAAY,EACZ,UAAU,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACN,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EACN,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,EACnB,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC"}
package/lib/index.js CHANGED
@@ -12,5 +12,5 @@ export { eventNamespaceSeparator, createChildLogger, createMultiSinkLogger, form
12
12
  export { MockLogger } from "./mockLogger";
13
13
  export { ThresholdCounter } from "./thresholdCounter";
14
14
  export { SampledTelemetryHelper } from "./sampledTelemetryHelper";
15
- export { logIfFalse } from "./utils";
15
+ export { logIfFalse, createSampledLogger } from "./utils";
16
16
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,4BAA4B,EAG5B,4BAA4B,EAC5B,sBAAsB,EAGtB,yBAAyB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,gCAAgC,EAChC,YAAY,EACZ,UAAU,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACN,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EAEnB,eAAe,EACf,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAElB,YAAY,EACZ,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EAIV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEhB,mBAAmB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nexport {\n\tcreateChildMonitoringContext,\n\tMonitoringContext,\n\tIConfigProviderBase,\n\tsessionStorageConfigProvider,\n\tmixinMonitoringContext,\n\tIConfigProvider,\n\tConfigTypes,\n\tloggerToMonitoringContext,\n} from \"./config\";\nexport {\n\tDataCorruptionError,\n\tDataProcessingError,\n\textractSafePropertiesFromMessage,\n\tGenericError,\n\tUsageError,\n} from \"./error\";\nexport {\n\textractLogSafeErrorProperties,\n\tgenerateErrorWithStack,\n\tgenerateStack,\n\tgetCircularReplacer,\n\tIFluidErrorAnnotations,\n\tisExternalError,\n\tisILoggingError,\n\tisTaggedTelemetryPropertyValue,\n\tLoggingError,\n\tNORMALIZED_ERROR_TYPE,\n\tnormalizeError,\n\toverwriteStack,\n\twrapError,\n\twrapErrorAndLog,\n} from \"./errorLogging\";\nexport { EventEmitterWithErrorHandling } from \"./eventEmitterWithErrorHandling\";\nexport {\n\tconnectedEventName,\n\tdisconnectedEventName,\n\traiseConnectedEvent,\n\tsafeRaiseEvent,\n} from \"./events\";\nexport {\n\thasErrorInstanceId,\n\tIFluidErrorBase,\n\tisFluidError,\n\tisValidLegacyError,\n} from \"./fluidErrorBase\";\nexport {\n\teventNamespaceSeparator,\n\tcreateChildLogger,\n\tcreateMultiSinkLogger,\n\tformatTick,\n\tIPerformanceEventMarkers,\n\tITelemetryLoggerPropertyBag,\n\tITelemetryLoggerPropertyBags,\n\tnumberFromString,\n\tPerformanceEvent,\n\tTaggedLoggerAdapter,\n\ttagData,\n\ttagCodeArtifacts,\n\tTelemetryDataTag,\n\tTelemetryEventPropertyTypes,\n\tTelemetryNullLogger,\n} from \"./logger\";\nexport { MockLogger } from \"./mockLogger\";\nexport { ThresholdCounter } from \"./thresholdCounter\";\nexport { SampledTelemetryHelper } from \"./sampledTelemetryHelper\";\nexport { logIfFalse } from \"./utils\";\nexport {\n\tTelemetryEventPropertyTypeExt,\n\tITelemetryEventExt,\n\tITelemetryGenericEventExt,\n\tITelemetryErrorEventExt,\n\tITelemetryPerformanceEventExt,\n\tITelemetryLoggerExt,\n\tITaggedTelemetryPropertyTypeExt,\n\tITelemetryPropertiesExt,\n\tTelemetryEventCategory,\n} from \"./telemetryTypes\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,4BAA4B,EAG5B,4BAA4B,EAC5B,sBAAsB,EAGtB,yBAAyB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,gCAAgC,EAChC,YAAY,EACZ,UAAU,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACN,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EAEnB,eAAe,EACf,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAElB,YAAY,EACZ,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EAIV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEhB,mBAAmB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAA0C,MAAM,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nexport {\n\tcreateChildMonitoringContext,\n\tMonitoringContext,\n\tIConfigProviderBase,\n\tsessionStorageConfigProvider,\n\tmixinMonitoringContext,\n\tIConfigProvider,\n\tConfigTypes,\n\tloggerToMonitoringContext,\n} from \"./config\";\nexport {\n\tDataCorruptionError,\n\tDataProcessingError,\n\textractSafePropertiesFromMessage,\n\tGenericError,\n\tUsageError,\n} from \"./error\";\nexport {\n\textractLogSafeErrorProperties,\n\tgenerateErrorWithStack,\n\tgenerateStack,\n\tgetCircularReplacer,\n\tIFluidErrorAnnotations,\n\tisExternalError,\n\tisILoggingError,\n\tisTaggedTelemetryPropertyValue,\n\tLoggingError,\n\tNORMALIZED_ERROR_TYPE,\n\tnormalizeError,\n\toverwriteStack,\n\twrapError,\n\twrapErrorAndLog,\n} from \"./errorLogging\";\nexport { EventEmitterWithErrorHandling } from \"./eventEmitterWithErrorHandling\";\nexport {\n\tconnectedEventName,\n\tdisconnectedEventName,\n\traiseConnectedEvent,\n\tsafeRaiseEvent,\n} from \"./events\";\nexport {\n\thasErrorInstanceId,\n\tIFluidErrorBase,\n\tisFluidError,\n\tisValidLegacyError,\n} from \"./fluidErrorBase\";\nexport {\n\teventNamespaceSeparator,\n\tcreateChildLogger,\n\tcreateMultiSinkLogger,\n\tformatTick,\n\tIPerformanceEventMarkers,\n\tITelemetryLoggerPropertyBag,\n\tITelemetryLoggerPropertyBags,\n\tnumberFromString,\n\tPerformanceEvent,\n\tTaggedLoggerAdapter,\n\ttagData,\n\ttagCodeArtifacts,\n\tTelemetryDataTag,\n\tTelemetryEventPropertyTypes,\n\tTelemetryNullLogger,\n} from \"./logger\";\nexport { MockLogger } from \"./mockLogger\";\nexport { ThresholdCounter } from \"./thresholdCounter\";\nexport { SampledTelemetryHelper } from \"./sampledTelemetryHelper\";\nexport { logIfFalse, createSampledLogger, IEventSampler, ISampledTelemetryLogger } from \"./utils\";\nexport {\n\tTelemetryEventPropertyTypeExt,\n\tITelemetryEventExt,\n\tITelemetryGenericEventExt,\n\tITelemetryErrorEventExt,\n\tITelemetryPerformanceEventExt,\n\tITelemetryLoggerExt,\n\tITaggedTelemetryPropertyTypeExt,\n\tITelemetryPropertiesExt,\n\tTelemetryEventCategory,\n} from \"./telemetryTypes\";\n"]}
package/lib/logger.d.ts CHANGED
@@ -25,7 +25,7 @@ export declare enum TelemetryDataTag {
25
25
  */
26
26
  UserData = "UserData"
27
27
  }
28
- export declare type TelemetryEventPropertyTypes = ITelemetryBaseProperties[string];
28
+ export type TelemetryEventPropertyTypes = ITelemetryBaseProperties[string];
29
29
  export interface ITelemetryLoggerPropertyBag {
30
30
  [index: string]: TelemetryEventPropertyTypes | (() => TelemetryEventPropertyTypes);
31
31
  }
@@ -213,15 +213,57 @@ export declare class PerformanceEvent {
213
213
  private readonly logger;
214
214
  private readonly markers;
215
215
  private readonly recordHeapSize;
216
- static start(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, markers?: IPerformanceEventMarkers, recordHeapSize?: boolean): PerformanceEvent;
217
- static timedExec<T>(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, callback: (event: PerformanceEvent) => T, markers?: IPerformanceEventMarkers): T;
218
- static timedExecAsync<T>(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, callback: (event: PerformanceEvent) => Promise<T>, markers?: IPerformanceEventMarkers, recordHeapSize?: boolean): Promise<T>;
216
+ private readonly emitLogs;
217
+ /**
218
+ * Creates an instance of {@link PerformanceEvent} and starts measurements
219
+ * @param logger - the logger to be used for publishing events
220
+ * @param event - the logging event details which will be published with the performance measurements
221
+ * @param markers - See {@link IPerformanceEventMarkers}
222
+ * @param recordHeapSize - whether or not to also record memory performance
223
+ * @param emitLogs - should this instance emit logs. If set to false, logs will not be emitted to the logger,
224
+ * but measurements will still be performed and any specified markers will be generated.
225
+ * @returns An instance of {@link PerformanceEvent}
226
+ */
227
+ static start(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, markers?: IPerformanceEventMarkers, recordHeapSize?: boolean, emitLogs?: boolean): PerformanceEvent;
228
+ /**
229
+ * Measure a synchronous task
230
+ * @param logger - the logger to be used for publishing events
231
+ * @param event - the logging event details which will be published with the performance measurements
232
+ * @param callback - the task to be executed and measured
233
+ * @param markers - See {@link IPerformanceEventMarkers}
234
+ * @param sampleThreshold - events with the same name and category will be sent to the logger
235
+ * only when we hit this many executions of the task. If unspecified, all events will be sent.
236
+ * @returns The results of the executed task
237
+ *
238
+ * @remarks Note that if the "same" event (category + eventName) would be emitted by different
239
+ * tasks (`callback`), `sampleThreshold` is still applied only based on the event's category + eventName,
240
+ * so executing either of the tasks will increase the internal counter and they
241
+ * effectively "share" the sampling rate for the event.
242
+ */
243
+ static timedExec<T>(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, callback: (event: PerformanceEvent) => T, markers?: IPerformanceEventMarkers, sampleThreshold?: number): T;
244
+ /**
245
+ * Measure an asynchronous task
246
+ * @param logger - the logger to be used for publishing events
247
+ * @param event - the logging event details which will be published with the performance measurements
248
+ * @param callback - the task to be executed and measured
249
+ * @param markers - See {@link IPerformanceEventMarkers}
250
+ * @param recordHeapSize - whether or not to also record memory performance
251
+ * @param sampleThreshold - events with the same name and category will be sent to the logger
252
+ * only when we hit this many executions of the task. If unspecified, all events will be sent.
253
+ * @returns The results of the executed task
254
+ *
255
+ * @remarks Note that if the "same" event (category + eventName) would be emitted by different
256
+ * tasks (`callback`), `sampleThreshold` is still applied only based on the event's category + eventName,
257
+ * so executing either of the tasks will increase the internal counter and they
258
+ * effectively "share" the sampling rate for the event.
259
+ */
260
+ static timedExecAsync<T>(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, callback: (event: PerformanceEvent) => Promise<T>, markers?: IPerformanceEventMarkers, recordHeapSize?: boolean, sampleThreshold?: number): Promise<T>;
219
261
  get duration(): number;
220
262
  private event?;
221
263
  private readonly startTime;
222
264
  private startMark?;
223
265
  private startMemoryCollection;
224
- protected constructor(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, markers?: IPerformanceEventMarkers, recordHeapSize?: boolean);
266
+ protected constructor(logger: ITelemetryLoggerExt, event: ITelemetryGenericEvent, markers?: IPerformanceEventMarkers, recordHeapSize?: boolean, emitLogs?: boolean);
225
267
  reportProgress(props?: ITelemetryProperties, eventNameSuffix?: string): void;
226
268
  private autoEnd;
227
269
  end(props?: ITelemetryProperties): void;
@@ -231,10 +273,12 @@ export declare class PerformanceEvent {
231
273
  * Report the event, if it hasn't already been reported.
232
274
  */
233
275
  reportEvent(eventNameSuffix: string, props?: ITelemetryProperties, error?: unknown): void;
276
+ private static readonly eventHits;
277
+ private static shouldReport;
234
278
  }
235
279
  /**
236
280
  * Null logger that no-ops for all telemetry events passed to it.
237
- * @deprecated - This will be removed in a future release.
281
+ * @deprecated This will be removed in a future release.
238
282
  * For internal use within the FluidFramework codebase, use {@link createChildLogger} with no arguments instead.
239
283
  * For external consumers we recommend writing a trivial implementation of {@link @fluidframework/core-interfaces#ITelemetryBaseLogger}
240
284
  * where the send() method does nothing and using that.
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}