@fluidframework/telemetry-utils
Advanced tools
+4
-0
| # @fluidframework/telemetry-utils | ||
| ## 2.102.0 | ||
| Dependency updates only. | ||
| ## 2.101.0 | ||
@@ -4,0 +8,0 @@ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"} |
+1
-1
@@ -197,3 +197,3 @@ "use strict"; | ||
| static wrapIfUnrecognized(originalError, dataProcessingCodepath, messageLike) { | ||
| return wrapDataProcessingErrorIfUnrecognized((errorMessage, props) => new DataProcessingError(errorMessage, props), originalError, dataProcessingCodepath, messageLike); | ||
| return wrapDataProcessingErrorIfUnrecognized((errorMessage) => new DataProcessingError(errorMessage), originalError, dataProcessingCodepath, messageLike); | ||
| } | ||
@@ -200,0 +200,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.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 type { IErrorBase, ITelemetryBaseProperties } from \"@fluidframework/core-interfaces\";\nimport {\n\tFluidErrorTypes,\n\ttype IGenericError,\n\ttype ILayerIncompatibilityError,\n\ttype IUsageError,\n} from \"@fluidframework/core-interfaces/internal\";\nimport type { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport {\n\tLoggingError,\n\tNORMALIZED_ERROR_TYPE,\n\tisExternalError,\n\tnormalizeError,\n\twrapError,\n} from \"./errorLogging.js\";\nimport type { IFluidErrorBase } from \"./fluidErrorBase.js\";\nimport type { ITelemetryPropertiesExt } from \"./telemetryTypes.js\";\n\n/**\n * A subset of `ISequencedDocumentMessage` properties that are safe to log for telemetry.\n * @internal\n */\nexport type MessageLike = Partial<\n\tPick<\n\t\tISequencedDocumentMessage,\n\t\t| \"clientId\"\n\t\t| \"sequenceNumber\"\n\t\t| \"clientSequenceNumber\"\n\t\t| \"referenceSequenceNumber\"\n\t\t| \"minimumSequenceNumber\"\n\t\t| \"timestamp\"\n\t>\n>;\n\n/**\n * Throws a UsageError with the given message if the condition is not met.\n * Use this API when `false` indicates a precondition is not met on a public API (for any FF layer).\n *\n * @param condition - The condition that should be true, if the condition is false a UsageError will be thrown.\n * @param message - The message to include in the error when the condition does not hold.\n * @param props - Telemetry props to include on the error when the condition does not hold.\n * @internal\n */\nexport function validatePrecondition(\n\tcondition: boolean,\n\tmessage: string,\n\tprops?: ITelemetryBaseProperties,\n): asserts condition {\n\tif (!condition) {\n\t\tthrow new UsageError(message, props);\n\t}\n}\n\n/**\n * Creates an error during data processing (DataProcessingError or DataCorruptionError) with telemetry properties.\n *\n * @remarks\n * This helper allows customizing the stack trace limit during error creation, which is useful\n * for capturing more context in error scenarios. It delegates to {@link wrapOrAnnotateError}\n * for the actual error wrapping/annotation logic.\n *\n * @param factory - Factory function that creates the specific error type.\n * @param errorMessage - The error message to use.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @param props - Additional telemetry properties to attach to the error.\n * @param stackTraceLimit - Optional limit for the stack trace depth.\n * @returns The created error with telemetry properties attached.\n */\nfunction buildDataProcessingError(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\terrorMessage: string,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n\tprops: ITelemetryPropertiesExt = {},\n\tstackTraceLimit?: number,\n): IFluidErrorBase {\n\tconst ErrorConfig = Error as unknown as { stackTraceLimit: number };\n\tconst originalStackTraceLimit = ErrorConfig.stackTraceLimit;\n\ttry {\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = stackTraceLimit;\n\t\t}\n\n\t\tconst error = wrapDataProcessingErrorIfUnrecognized(\n\t\t\tfactory,\n\t\t\terrorMessage,\n\t\t\tcodepath,\n\t\t\tmessageLike,\n\t\t);\n\t\terror.addTelemetryProperties(props);\n\n\t\treturn error;\n\t} finally {\n\t\t// Reset the stack trace limit to the original value\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = originalStackTraceLimit;\n\t\t}\n\t}\n}\n\n/**\n * Wraps an unrecognized error into a data processing error (DataProcessingError or DataCorruptionError)\n * using the provided factory.\n *\n * @remarks\n * This function handles two cases:\n * - **Unrecognized/external errors**: Wrapped using the provided factory function to create a proper\n * Fluid error type (DataProcessingError or DataCorruptionError).\n * - **Recognized Fluid errors**: Not wrapped, but annotated with data processing telemetry properties.\n *\n * An error is considered \"unrecognized\" if it's external (from outside Fluid) or has the\n * {@link NORMALIZED_ERROR_TYPE} error type (indicating it was normalized but not classified).\n *\n * We wrap conditionally since known error types represent well-understood failure modes, and ideally\n * one day we will move away from throwing these errors but rather we'll return them.\n * But an unrecognized error needs to be classified appropriately (e.g., as DataProcessingError).\n *\n * @param factory - Factory function that creates the specific error type for wrapping unrecognized errors.\n * @param originalError - The error to be wrapped or annotated.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @returns The wrapped or annotated error as an {@link IFluidErrorBase}.\n */\nfunction wrapDataProcessingErrorIfUnrecognized(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\toriginalError: unknown,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n): IFluidErrorBase {\n\tconst props = {\n\t\tdataProcessingError: 1,\n\t\tdataProcessingCodepath: codepath,\n\t\t...(messageLike === undefined ? undefined : extractSafePropertiesFromMessage(messageLike)),\n\t};\n\n\tconst normalizedError = normalizeError(originalError, { props });\n\t// Note that other errors may have the NORMALIZED_ERROR_TYPE errorType,\n\t// but if so they are still suitable to be wrapped as DataProcessingError.\n\tif (\n\t\tisExternalError(normalizedError) ||\n\t\tnormalizedError.errorType === NORMALIZED_ERROR_TYPE\n\t) {\n\t\t// Create a new DataProcessingError to wrap this external error\n\t\tconst error = wrapError(normalizedError, (message: string) => factory(message));\n\n\t\t// Copy over the props above and any others added to this error since first being normalized\n\t\terror.addTelemetryProperties(normalizedError.getTelemetryProperties());\n\n\t\treturn error;\n\t}\n\treturn normalizedError;\n}\n\n/**\n * Generic wrapper for an unrecognized/uncategorized error object\n *\n * @internal\n */\nexport class GenericError extends LoggingError implements IGenericError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.genericError;\n\n\t/**\n\t * Create a new GenericError\n\t * @param message - Error message\n\t * @param error - inner error object\n\t * @param props - Telemetry props to include when the error is logged\n\t */\n\tpublic constructor(\n\t\tmessage: string,\n\t\t// TODO: Use `unknown` instead (API breaking change because error is not just an input parameter, but a public member of the class)\n\t\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n\t\tpublic readonly error?: any,\n\t\tprops?: ITelemetryBaseProperties,\n\t) {\n\t\t// Don't try to log the inner error\n\t\tsuper(message, props, new Set([\"error\"]));\n\t}\n}\n\n/**\n * Error indicating an API is being used improperly resulting in an invalid operation.\n *\n * @internal\n */\nexport class UsageError extends LoggingError implements IUsageError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.usageError;\n\n\tpublic constructor(message: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, usageError: true });\n\t}\n}\n\n/**\n * DataCorruptionError indicates that we encountered definitive evidence that the data at rest\n * backing this container is corrupted, and this container would never be expected to load properly again\n *\n * @internal\n */\nexport class DataCorruptionError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.dataCorruptionError;\n\tpublic readonly canRetry = false;\n\n\tpublic constructor(message: string, props: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, dataProcessingError: 1 });\n\t}\n\n\t/**\n\t * Create a new `DataCorruptionError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataCorruptionCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataCorruptionError(message, {}),\n\t\t\terrorMessage,\n\t\t\tdataCorruptionCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n}\n\n/**\n * Indicates we hit a fatal error while processing incoming data from the Fluid Service.\n *\n * @remarks\n *\n * The error will often originate in the dataStore or DDS implementation that is responding to incoming changes.\n * This differs from {@link DataCorruptionError} in that this may be a transient error that will not repro in another\n * client or session.\n *\n * @internal\n */\nexport class DataProcessingError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\t/**\n\t * {@inheritDoc IFluidErrorBase.errorType}\n\t */\n\tpublic readonly errorType = FluidErrorTypes.dataProcessingError;\n\n\tpublic readonly canRetry = false;\n\n\tprivate constructor(errorMessage: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(errorMessage, props);\n\t}\n\n\t/**\n\t * Create a new `DataProcessingError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataProcessingError(message),\n\t\t\terrorMessage,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n\n\t/**\n\t * Wrap the given error in a `DataProcessingError`, unless the error is already of a known type\n\t * with the exception of a normalized {@link LoggingError}, which will still be wrapped.\n\t *\n\t * In either case, the error will have some relevant properties added for telemetry.\n\t *\n\t * @remarks See `wrapDataProcessingErrorIfUnrecognized` for details on wrapping behavior.\n\t *\n\t * @param originalError - The error to be converted.\n\t * @param dataProcessingCodepath - Which code-path failed while processing data.\n\t * @param messageLike - Message to include info about via telemetry props.\n\t *\n\t * @returns Either a new `DataProcessingError`, or (if wrapping is deemed unnecessary) the given error.\n\t */\n\tpublic static wrapIfUnrecognized(\n\t\toriginalError: unknown,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t): IFluidErrorBase {\n\t\treturn wrapDataProcessingErrorIfUnrecognized(\n\t\t\t(errorMessage: string, props?: ITelemetryBaseProperties) =>\n\t\t\t\tnew DataProcessingError(errorMessage, props),\n\t\t\toriginalError,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t);\n\t}\n}\n\n/**\n * Error indicating that two Fluid layers are incompatible.\n * See {@link @fluidframework/core-interfaces#ILayerIncompatibilityError} for more details.\n *\n * @internal\n */\nexport class LayerIncompatibilityError\n\textends LoggingError\n\timplements ILayerIncompatibilityError\n{\n\tpublic readonly errorType = FluidErrorTypes.layerIncompatibilityError;\n\tpublic readonly layer: string;\n\tpublic readonly layerVersion: string;\n\tpublic readonly incompatibleLayer: string;\n\tpublic readonly incompatibleLayerVersion: string;\n\tpublic readonly compatibilityRequirementsInMonths: number;\n\tpublic readonly actualDifferenceInMonths: number;\n\tpublic readonly details: string;\n\n\tpublic constructor(\n\t\tmessage: string,\n\t\tincompatibilityProps: {\n\t\t\tlayer: string;\n\t\t\tlayerVersion: string;\n\t\t\tincompatibleLayer: string;\n\t\t\tincompatibleLayerVersion: string;\n\t\t\tcompatibilityRequirementsInMonths: number;\n\t\t\tactualDifferenceInMonths: number;\n\t\t\tdetails: string;\n\t\t},\n\t\ttelemetryProps?: ITelemetryBaseProperties,\n\t) {\n\t\tsuper(message, {\n\t\t\t...incompatibilityProps,\n\t\t\t...telemetryProps,\n\t\t\tlayerIncompatibilityError: true,\n\t\t});\n\t\tthis.layer = incompatibilityProps.layer;\n\t\tthis.layerVersion = incompatibilityProps.layerVersion;\n\t\tthis.incompatibleLayer = incompatibilityProps.incompatibleLayer;\n\t\tthis.incompatibleLayerVersion = incompatibilityProps.incompatibleLayerVersion;\n\t\tthis.compatibilityRequirementsInMonths =\n\t\t\tincompatibilityProps.compatibilityRequirementsInMonths;\n\t\tthis.actualDifferenceInMonths = incompatibilityProps.actualDifferenceInMonths;\n\t\tthis.details = incompatibilityProps.details;\n\t}\n}\n\n/**\n * Extracts specific properties from the provided message that we know are safe to log.\n *\n * @param messageLike - Message to include info about via telemetry props.\n *\n * @internal\n */\nexport const extractSafePropertiesFromMessage = (\n\tmessageLike: MessageLike,\n): {\n\tmessageClientId: string | undefined;\n\tmessageSequenceNumber: number | undefined;\n\tmessageClientSequenceNumber: number | undefined;\n\tmessageReferenceSequenceNumber: number | undefined;\n\tmessageMinimumSequenceNumber: number | undefined;\n\tmessageTimestamp: number | undefined;\n} => ({\n\tmessageClientId: messageLike.clientId === null ? \"null\" : messageLike.clientId,\n\tmessageSequenceNumber: messageLike.sequenceNumber,\n\tmessageClientSequenceNumber: messageLike.clientSequenceNumber,\n\tmessageReferenceSequenceNumber: messageLike.referenceSequenceNumber,\n\tmessageMinimumSequenceNumber: messageLike.minimumSequenceNumber,\n\tmessageTimestamp: messageLike.timestamp,\n});\n"]} | ||
| {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.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 type { IErrorBase, ITelemetryBaseProperties } from \"@fluidframework/core-interfaces\";\nimport {\n\tFluidErrorTypes,\n\ttype IGenericError,\n\ttype ILayerIncompatibilityError,\n\ttype IUsageError,\n} from \"@fluidframework/core-interfaces/internal\";\nimport type { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport {\n\tLoggingError,\n\tNORMALIZED_ERROR_TYPE,\n\tisExternalError,\n\tnormalizeError,\n\twrapError,\n} from \"./errorLogging.js\";\nimport type { IFluidErrorBase } from \"./fluidErrorBase.js\";\nimport type { ITelemetryPropertiesExt } from \"./telemetryTypes.js\";\n\n/**\n * A subset of `ISequencedDocumentMessage` properties that are safe to log for telemetry.\n * @internal\n */\nexport type MessageLike = Partial<\n\tPick<\n\t\tISequencedDocumentMessage,\n\t\t| \"clientId\"\n\t\t| \"sequenceNumber\"\n\t\t| \"clientSequenceNumber\"\n\t\t| \"referenceSequenceNumber\"\n\t\t| \"minimumSequenceNumber\"\n\t\t| \"timestamp\"\n\t>\n>;\n\n/**\n * Throws a UsageError with the given message if the condition is not met.\n * Use this API when `false` indicates a precondition is not met on a public API (for any FF layer).\n *\n * @param condition - The condition that should be true, if the condition is false a UsageError will be thrown.\n * @param message - The message to include in the error when the condition does not hold.\n * @param props - Telemetry props to include on the error when the condition does not hold.\n * @internal\n */\nexport function validatePrecondition(\n\tcondition: boolean,\n\tmessage: string,\n\tprops?: ITelemetryBaseProperties,\n): asserts condition {\n\tif (!condition) {\n\t\tthrow new UsageError(message, props);\n\t}\n}\n\n/**\n * Creates an error during data processing (DataProcessingError or DataCorruptionError) with telemetry properties.\n *\n * @remarks\n * This helper allows customizing the stack trace limit during error creation, which is useful\n * for capturing more context in error scenarios. It delegates to {@link wrapOrAnnotateError}\n * for the actual error wrapping/annotation logic.\n *\n * @param factory - Factory function that creates the specific error type.\n * @param errorMessage - The error message to use.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @param props - Additional telemetry properties to attach to the error.\n * @param stackTraceLimit - Optional limit for the stack trace depth.\n * @returns The created error with telemetry properties attached.\n */\nfunction buildDataProcessingError(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\terrorMessage: string,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n\tprops: ITelemetryPropertiesExt = {},\n\tstackTraceLimit?: number,\n): IFluidErrorBase {\n\tconst ErrorConfig = Error as unknown as { stackTraceLimit: number };\n\tconst originalStackTraceLimit = ErrorConfig.stackTraceLimit;\n\ttry {\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = stackTraceLimit;\n\t\t}\n\n\t\tconst error = wrapDataProcessingErrorIfUnrecognized(\n\t\t\tfactory,\n\t\t\terrorMessage,\n\t\t\tcodepath,\n\t\t\tmessageLike,\n\t\t);\n\t\terror.addTelemetryProperties(props);\n\n\t\treturn error;\n\t} finally {\n\t\t// Reset the stack trace limit to the original value\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = originalStackTraceLimit;\n\t\t}\n\t}\n}\n\n/**\n * Wraps an unrecognized error into a data processing error (DataProcessingError or DataCorruptionError)\n * using the provided factory.\n *\n * @remarks\n * This function handles two cases:\n * - **Unrecognized/external errors**: Wrapped using the provided factory function to create a proper\n * Fluid error type (DataProcessingError or DataCorruptionError).\n * - **Recognized Fluid errors**: Not wrapped, but annotated with data processing telemetry properties.\n *\n * An error is considered \"unrecognized\" if it's external (from outside Fluid) or has the\n * {@link NORMALIZED_ERROR_TYPE} error type (indicating it was normalized but not classified).\n *\n * We wrap conditionally since known error types represent well-understood failure modes, and ideally\n * one day we will move away from throwing these errors but rather we'll return them.\n * But an unrecognized error needs to be classified appropriately (e.g., as DataProcessingError).\n *\n * @param factory - Factory function that creates the specific error type for wrapping unrecognized errors.\n * @param originalError - The error to be wrapped or annotated.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @returns The wrapped or annotated error as an {@link IFluidErrorBase}.\n */\nfunction wrapDataProcessingErrorIfUnrecognized(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\toriginalError: unknown,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n): IFluidErrorBase {\n\tconst props = {\n\t\tdataProcessingError: 1,\n\t\tdataProcessingCodepath: codepath,\n\t\t...(messageLike === undefined ? undefined : extractSafePropertiesFromMessage(messageLike)),\n\t};\n\n\tconst normalizedError = normalizeError(originalError, { props });\n\t// Note that other errors may have the NORMALIZED_ERROR_TYPE errorType,\n\t// but if so they are still suitable to be wrapped as DataProcessingError.\n\tif (\n\t\tisExternalError(normalizedError) ||\n\t\tnormalizedError.errorType === NORMALIZED_ERROR_TYPE\n\t) {\n\t\t// Create a new DataProcessingError to wrap this external error\n\t\tconst error = wrapError(normalizedError, (message: string) => factory(message));\n\n\t\t// Copy over the props above and any others added to this error since first being normalized\n\t\terror.addTelemetryProperties(normalizedError.getTelemetryProperties());\n\n\t\treturn error;\n\t}\n\treturn normalizedError;\n}\n\n/**\n * Generic wrapper for an unrecognized/uncategorized error object\n *\n * @internal\n */\nexport class GenericError extends LoggingError implements IGenericError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.genericError;\n\n\t/**\n\t * Create a new GenericError\n\t * @param message - Error message\n\t * @param error - inner error object\n\t * @param props - Telemetry props to include when the error is logged\n\t */\n\tpublic constructor(\n\t\tmessage: string,\n\t\t// TODO: Use `unknown` instead (API breaking change because error is not just an input parameter, but a public member of the class)\n\t\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n\t\tpublic readonly error?: any,\n\t\tprops?: ITelemetryBaseProperties,\n\t) {\n\t\t// Don't try to log the inner error\n\t\tsuper(message, props, new Set([\"error\"]));\n\t}\n}\n\n/**\n * Error indicating an API is being used improperly resulting in an invalid operation.\n *\n * @internal\n */\nexport class UsageError extends LoggingError implements IUsageError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.usageError;\n\n\tpublic constructor(message: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, usageError: true });\n\t}\n}\n\n/**\n * DataCorruptionError indicates that we encountered definitive evidence that the data at rest\n * backing this container is corrupted, and this container would never be expected to load properly again\n *\n * @internal\n */\nexport class DataCorruptionError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.dataCorruptionError;\n\tpublic readonly canRetry = false;\n\n\tpublic constructor(message: string, props: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, dataProcessingError: 1 });\n\t}\n\n\t/**\n\t * Create a new `DataCorruptionError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataCorruptionCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataCorruptionError(message, {}),\n\t\t\terrorMessage,\n\t\t\tdataCorruptionCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n}\n\n/**\n * Indicates we hit a fatal error while processing incoming data from the Fluid Service.\n *\n * @remarks\n *\n * The error will often originate in the dataStore or DDS implementation that is responding to incoming changes.\n * This differs from {@link DataCorruptionError} in that this may be a transient error that will not repro in another\n * client or session.\n *\n * @internal\n */\nexport class DataProcessingError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\t/**\n\t * {@inheritDoc IFluidErrorBase.errorType}\n\t */\n\tpublic readonly errorType = FluidErrorTypes.dataProcessingError;\n\n\tpublic readonly canRetry = false;\n\n\tprivate constructor(errorMessage: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(errorMessage, props);\n\t}\n\n\t/**\n\t * Create a new `DataProcessingError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataProcessingError(message),\n\t\t\terrorMessage,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n\n\t/**\n\t * Wrap the given error in a `DataProcessingError`, unless the error is already of a known type\n\t * with the exception of a normalized {@link LoggingError}, which will still be wrapped.\n\t *\n\t * In either case, the error will have some relevant properties added for telemetry.\n\t *\n\t * @remarks See `wrapDataProcessingErrorIfUnrecognized` for details on wrapping behavior.\n\t *\n\t * @param originalError - The error to be converted.\n\t * @param dataProcessingCodepath - Which code-path failed while processing data.\n\t * @param messageLike - Message to include info about via telemetry props.\n\t *\n\t * @returns Either a new `DataProcessingError`, or (if wrapping is deemed unnecessary) the given error.\n\t */\n\tpublic static wrapIfUnrecognized(\n\t\toriginalError: unknown,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t): IFluidErrorBase {\n\t\treturn wrapDataProcessingErrorIfUnrecognized(\n\t\t\t(errorMessage: string) => new DataProcessingError(errorMessage),\n\t\t\toriginalError,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t);\n\t}\n}\n\n/**\n * Error indicating that two Fluid layers are incompatible.\n * See {@link @fluidframework/core-interfaces#ILayerIncompatibilityError} for more details.\n *\n * @internal\n */\nexport class LayerIncompatibilityError\n\textends LoggingError\n\timplements ILayerIncompatibilityError\n{\n\tpublic readonly errorType = FluidErrorTypes.layerIncompatibilityError;\n\tpublic readonly layer: string;\n\tpublic readonly layerVersion: string;\n\tpublic readonly incompatibleLayer: string;\n\tpublic readonly incompatibleLayerVersion: string;\n\tpublic readonly compatibilityRequirementsInMonths: number;\n\tpublic readonly actualDifferenceInMonths: number;\n\tpublic readonly details: string;\n\n\tpublic constructor(\n\t\tmessage: string,\n\t\tincompatibilityProps: {\n\t\t\tlayer: string;\n\t\t\tlayerVersion: string;\n\t\t\tincompatibleLayer: string;\n\t\t\tincompatibleLayerVersion: string;\n\t\t\tcompatibilityRequirementsInMonths: number;\n\t\t\tactualDifferenceInMonths: number;\n\t\t\tdetails: string;\n\t\t},\n\t\ttelemetryProps?: ITelemetryBaseProperties,\n\t) {\n\t\tsuper(message, {\n\t\t\t...incompatibilityProps,\n\t\t\t...telemetryProps,\n\t\t\tlayerIncompatibilityError: true,\n\t\t});\n\t\tthis.layer = incompatibilityProps.layer;\n\t\tthis.layerVersion = incompatibilityProps.layerVersion;\n\t\tthis.incompatibleLayer = incompatibilityProps.incompatibleLayer;\n\t\tthis.incompatibleLayerVersion = incompatibilityProps.incompatibleLayerVersion;\n\t\tthis.compatibilityRequirementsInMonths =\n\t\t\tincompatibilityProps.compatibilityRequirementsInMonths;\n\t\tthis.actualDifferenceInMonths = incompatibilityProps.actualDifferenceInMonths;\n\t\tthis.details = incompatibilityProps.details;\n\t}\n}\n\n/**\n * Extracts specific properties from the provided message that we know are safe to log.\n *\n * @param messageLike - Message to include info about via telemetry props.\n *\n * @internal\n */\nexport const extractSafePropertiesFromMessage = (\n\tmessageLike: MessageLike,\n): {\n\tmessageClientId: string | undefined;\n\tmessageSequenceNumber: number | undefined;\n\tmessageClientSequenceNumber: number | undefined;\n\tmessageReferenceSequenceNumber: number | undefined;\n\tmessageMinimumSequenceNumber: number | undefined;\n\tmessageTimestamp: number | undefined;\n} => ({\n\tmessageClientId: messageLike.clientId === null ? \"null\" : messageLike.clientId,\n\tmessageSequenceNumber: messageLike.sequenceNumber,\n\tmessageClientSequenceNumber: messageLike.clientSequenceNumber,\n\tmessageReferenceSequenceNumber: messageLike.referenceSequenceNumber,\n\tmessageMinimumSequenceNumber: messageLike.minimumSequenceNumber,\n\tmessageTimestamp: messageLike.timestamp,\n});\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"} |
+1
-1
@@ -190,3 +190,3 @@ /*! | ||
| static wrapIfUnrecognized(originalError, dataProcessingCodepath, messageLike) { | ||
| return wrapDataProcessingErrorIfUnrecognized((errorMessage, props) => new DataProcessingError(errorMessage, props), originalError, dataProcessingCodepath, messageLike); | ||
| return wrapDataProcessingErrorIfUnrecognized((errorMessage) => new DataProcessingError(errorMessage), originalError, dataProcessingCodepath, messageLike); | ||
| } | ||
@@ -193,0 +193,0 @@ } |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.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 type { IErrorBase, ITelemetryBaseProperties } from \"@fluidframework/core-interfaces\";\nimport {\n\tFluidErrorTypes,\n\ttype IGenericError,\n\ttype ILayerIncompatibilityError,\n\ttype IUsageError,\n} from \"@fluidframework/core-interfaces/internal\";\nimport type { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport {\n\tLoggingError,\n\tNORMALIZED_ERROR_TYPE,\n\tisExternalError,\n\tnormalizeError,\n\twrapError,\n} from \"./errorLogging.js\";\nimport type { IFluidErrorBase } from \"./fluidErrorBase.js\";\nimport type { ITelemetryPropertiesExt } from \"./telemetryTypes.js\";\n\n/**\n * A subset of `ISequencedDocumentMessage` properties that are safe to log for telemetry.\n * @internal\n */\nexport type MessageLike = Partial<\n\tPick<\n\t\tISequencedDocumentMessage,\n\t\t| \"clientId\"\n\t\t| \"sequenceNumber\"\n\t\t| \"clientSequenceNumber\"\n\t\t| \"referenceSequenceNumber\"\n\t\t| \"minimumSequenceNumber\"\n\t\t| \"timestamp\"\n\t>\n>;\n\n/**\n * Throws a UsageError with the given message if the condition is not met.\n * Use this API when `false` indicates a precondition is not met on a public API (for any FF layer).\n *\n * @param condition - The condition that should be true, if the condition is false a UsageError will be thrown.\n * @param message - The message to include in the error when the condition does not hold.\n * @param props - Telemetry props to include on the error when the condition does not hold.\n * @internal\n */\nexport function validatePrecondition(\n\tcondition: boolean,\n\tmessage: string,\n\tprops?: ITelemetryBaseProperties,\n): asserts condition {\n\tif (!condition) {\n\t\tthrow new UsageError(message, props);\n\t}\n}\n\n/**\n * Creates an error during data processing (DataProcessingError or DataCorruptionError) with telemetry properties.\n *\n * @remarks\n * This helper allows customizing the stack trace limit during error creation, which is useful\n * for capturing more context in error scenarios. It delegates to {@link wrapOrAnnotateError}\n * for the actual error wrapping/annotation logic.\n *\n * @param factory - Factory function that creates the specific error type.\n * @param errorMessage - The error message to use.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @param props - Additional telemetry properties to attach to the error.\n * @param stackTraceLimit - Optional limit for the stack trace depth.\n * @returns The created error with telemetry properties attached.\n */\nfunction buildDataProcessingError(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\terrorMessage: string,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n\tprops: ITelemetryPropertiesExt = {},\n\tstackTraceLimit?: number,\n): IFluidErrorBase {\n\tconst ErrorConfig = Error as unknown as { stackTraceLimit: number };\n\tconst originalStackTraceLimit = ErrorConfig.stackTraceLimit;\n\ttry {\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = stackTraceLimit;\n\t\t}\n\n\t\tconst error = wrapDataProcessingErrorIfUnrecognized(\n\t\t\tfactory,\n\t\t\terrorMessage,\n\t\t\tcodepath,\n\t\t\tmessageLike,\n\t\t);\n\t\terror.addTelemetryProperties(props);\n\n\t\treturn error;\n\t} finally {\n\t\t// Reset the stack trace limit to the original value\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = originalStackTraceLimit;\n\t\t}\n\t}\n}\n\n/**\n * Wraps an unrecognized error into a data processing error (DataProcessingError or DataCorruptionError)\n * using the provided factory.\n *\n * @remarks\n * This function handles two cases:\n * - **Unrecognized/external errors**: Wrapped using the provided factory function to create a proper\n * Fluid error type (DataProcessingError or DataCorruptionError).\n * - **Recognized Fluid errors**: Not wrapped, but annotated with data processing telemetry properties.\n *\n * An error is considered \"unrecognized\" if it's external (from outside Fluid) or has the\n * {@link NORMALIZED_ERROR_TYPE} error type (indicating it was normalized but not classified).\n *\n * We wrap conditionally since known error types represent well-understood failure modes, and ideally\n * one day we will move away from throwing these errors but rather we'll return them.\n * But an unrecognized error needs to be classified appropriately (e.g., as DataProcessingError).\n *\n * @param factory - Factory function that creates the specific error type for wrapping unrecognized errors.\n * @param originalError - The error to be wrapped or annotated.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @returns The wrapped or annotated error as an {@link IFluidErrorBase}.\n */\nfunction wrapDataProcessingErrorIfUnrecognized(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\toriginalError: unknown,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n): IFluidErrorBase {\n\tconst props = {\n\t\tdataProcessingError: 1,\n\t\tdataProcessingCodepath: codepath,\n\t\t...(messageLike === undefined ? undefined : extractSafePropertiesFromMessage(messageLike)),\n\t};\n\n\tconst normalizedError = normalizeError(originalError, { props });\n\t// Note that other errors may have the NORMALIZED_ERROR_TYPE errorType,\n\t// but if so they are still suitable to be wrapped as DataProcessingError.\n\tif (\n\t\tisExternalError(normalizedError) ||\n\t\tnormalizedError.errorType === NORMALIZED_ERROR_TYPE\n\t) {\n\t\t// Create a new DataProcessingError to wrap this external error\n\t\tconst error = wrapError(normalizedError, (message: string) => factory(message));\n\n\t\t// Copy over the props above and any others added to this error since first being normalized\n\t\terror.addTelemetryProperties(normalizedError.getTelemetryProperties());\n\n\t\treturn error;\n\t}\n\treturn normalizedError;\n}\n\n/**\n * Generic wrapper for an unrecognized/uncategorized error object\n *\n * @internal\n */\nexport class GenericError extends LoggingError implements IGenericError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.genericError;\n\n\t/**\n\t * Create a new GenericError\n\t * @param message - Error message\n\t * @param error - inner error object\n\t * @param props - Telemetry props to include when the error is logged\n\t */\n\tpublic constructor(\n\t\tmessage: string,\n\t\t// TODO: Use `unknown` instead (API breaking change because error is not just an input parameter, but a public member of the class)\n\t\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n\t\tpublic readonly error?: any,\n\t\tprops?: ITelemetryBaseProperties,\n\t) {\n\t\t// Don't try to log the inner error\n\t\tsuper(message, props, new Set([\"error\"]));\n\t}\n}\n\n/**\n * Error indicating an API is being used improperly resulting in an invalid operation.\n *\n * @internal\n */\nexport class UsageError extends LoggingError implements IUsageError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.usageError;\n\n\tpublic constructor(message: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, usageError: true });\n\t}\n}\n\n/**\n * DataCorruptionError indicates that we encountered definitive evidence that the data at rest\n * backing this container is corrupted, and this container would never be expected to load properly again\n *\n * @internal\n */\nexport class DataCorruptionError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.dataCorruptionError;\n\tpublic readonly canRetry = false;\n\n\tpublic constructor(message: string, props: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, dataProcessingError: 1 });\n\t}\n\n\t/**\n\t * Create a new `DataCorruptionError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataCorruptionCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataCorruptionError(message, {}),\n\t\t\terrorMessage,\n\t\t\tdataCorruptionCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n}\n\n/**\n * Indicates we hit a fatal error while processing incoming data from the Fluid Service.\n *\n * @remarks\n *\n * The error will often originate in the dataStore or DDS implementation that is responding to incoming changes.\n * This differs from {@link DataCorruptionError} in that this may be a transient error that will not repro in another\n * client or session.\n *\n * @internal\n */\nexport class DataProcessingError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\t/**\n\t * {@inheritDoc IFluidErrorBase.errorType}\n\t */\n\tpublic readonly errorType = FluidErrorTypes.dataProcessingError;\n\n\tpublic readonly canRetry = false;\n\n\tprivate constructor(errorMessage: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(errorMessage, props);\n\t}\n\n\t/**\n\t * Create a new `DataProcessingError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataProcessingError(message),\n\t\t\terrorMessage,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n\n\t/**\n\t * Wrap the given error in a `DataProcessingError`, unless the error is already of a known type\n\t * with the exception of a normalized {@link LoggingError}, which will still be wrapped.\n\t *\n\t * In either case, the error will have some relevant properties added for telemetry.\n\t *\n\t * @remarks See `wrapDataProcessingErrorIfUnrecognized` for details on wrapping behavior.\n\t *\n\t * @param originalError - The error to be converted.\n\t * @param dataProcessingCodepath - Which code-path failed while processing data.\n\t * @param messageLike - Message to include info about via telemetry props.\n\t *\n\t * @returns Either a new `DataProcessingError`, or (if wrapping is deemed unnecessary) the given error.\n\t */\n\tpublic static wrapIfUnrecognized(\n\t\toriginalError: unknown,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t): IFluidErrorBase {\n\t\treturn wrapDataProcessingErrorIfUnrecognized(\n\t\t\t(errorMessage: string, props?: ITelemetryBaseProperties) =>\n\t\t\t\tnew DataProcessingError(errorMessage, props),\n\t\t\toriginalError,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t);\n\t}\n}\n\n/**\n * Error indicating that two Fluid layers are incompatible.\n * See {@link @fluidframework/core-interfaces#ILayerIncompatibilityError} for more details.\n *\n * @internal\n */\nexport class LayerIncompatibilityError\n\textends LoggingError\n\timplements ILayerIncompatibilityError\n{\n\tpublic readonly errorType = FluidErrorTypes.layerIncompatibilityError;\n\tpublic readonly layer: string;\n\tpublic readonly layerVersion: string;\n\tpublic readonly incompatibleLayer: string;\n\tpublic readonly incompatibleLayerVersion: string;\n\tpublic readonly compatibilityRequirementsInMonths: number;\n\tpublic readonly actualDifferenceInMonths: number;\n\tpublic readonly details: string;\n\n\tpublic constructor(\n\t\tmessage: string,\n\t\tincompatibilityProps: {\n\t\t\tlayer: string;\n\t\t\tlayerVersion: string;\n\t\t\tincompatibleLayer: string;\n\t\t\tincompatibleLayerVersion: string;\n\t\t\tcompatibilityRequirementsInMonths: number;\n\t\t\tactualDifferenceInMonths: number;\n\t\t\tdetails: string;\n\t\t},\n\t\ttelemetryProps?: ITelemetryBaseProperties,\n\t) {\n\t\tsuper(message, {\n\t\t\t...incompatibilityProps,\n\t\t\t...telemetryProps,\n\t\t\tlayerIncompatibilityError: true,\n\t\t});\n\t\tthis.layer = incompatibilityProps.layer;\n\t\tthis.layerVersion = incompatibilityProps.layerVersion;\n\t\tthis.incompatibleLayer = incompatibilityProps.incompatibleLayer;\n\t\tthis.incompatibleLayerVersion = incompatibilityProps.incompatibleLayerVersion;\n\t\tthis.compatibilityRequirementsInMonths =\n\t\t\tincompatibilityProps.compatibilityRequirementsInMonths;\n\t\tthis.actualDifferenceInMonths = incompatibilityProps.actualDifferenceInMonths;\n\t\tthis.details = incompatibilityProps.details;\n\t}\n}\n\n/**\n * Extracts specific properties from the provided message that we know are safe to log.\n *\n * @param messageLike - Message to include info about via telemetry props.\n *\n * @internal\n */\nexport const extractSafePropertiesFromMessage = (\n\tmessageLike: MessageLike,\n): {\n\tmessageClientId: string | undefined;\n\tmessageSequenceNumber: number | undefined;\n\tmessageClientSequenceNumber: number | undefined;\n\tmessageReferenceSequenceNumber: number | undefined;\n\tmessageMinimumSequenceNumber: number | undefined;\n\tmessageTimestamp: number | undefined;\n} => ({\n\tmessageClientId: messageLike.clientId === null ? \"null\" : messageLike.clientId,\n\tmessageSequenceNumber: messageLike.sequenceNumber,\n\tmessageClientSequenceNumber: messageLike.clientSequenceNumber,\n\tmessageReferenceSequenceNumber: messageLike.referenceSequenceNumber,\n\tmessageMinimumSequenceNumber: messageLike.minimumSequenceNumber,\n\tmessageTimestamp: messageLike.timestamp,\n});\n"]} | ||
| {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.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 type { IErrorBase, ITelemetryBaseProperties } from \"@fluidframework/core-interfaces\";\nimport {\n\tFluidErrorTypes,\n\ttype IGenericError,\n\ttype ILayerIncompatibilityError,\n\ttype IUsageError,\n} from \"@fluidframework/core-interfaces/internal\";\nimport type { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport {\n\tLoggingError,\n\tNORMALIZED_ERROR_TYPE,\n\tisExternalError,\n\tnormalizeError,\n\twrapError,\n} from \"./errorLogging.js\";\nimport type { IFluidErrorBase } from \"./fluidErrorBase.js\";\nimport type { ITelemetryPropertiesExt } from \"./telemetryTypes.js\";\n\n/**\n * A subset of `ISequencedDocumentMessage` properties that are safe to log for telemetry.\n * @internal\n */\nexport type MessageLike = Partial<\n\tPick<\n\t\tISequencedDocumentMessage,\n\t\t| \"clientId\"\n\t\t| \"sequenceNumber\"\n\t\t| \"clientSequenceNumber\"\n\t\t| \"referenceSequenceNumber\"\n\t\t| \"minimumSequenceNumber\"\n\t\t| \"timestamp\"\n\t>\n>;\n\n/**\n * Throws a UsageError with the given message if the condition is not met.\n * Use this API when `false` indicates a precondition is not met on a public API (for any FF layer).\n *\n * @param condition - The condition that should be true, if the condition is false a UsageError will be thrown.\n * @param message - The message to include in the error when the condition does not hold.\n * @param props - Telemetry props to include on the error when the condition does not hold.\n * @internal\n */\nexport function validatePrecondition(\n\tcondition: boolean,\n\tmessage: string,\n\tprops?: ITelemetryBaseProperties,\n): asserts condition {\n\tif (!condition) {\n\t\tthrow new UsageError(message, props);\n\t}\n}\n\n/**\n * Creates an error during data processing (DataProcessingError or DataCorruptionError) with telemetry properties.\n *\n * @remarks\n * This helper allows customizing the stack trace limit during error creation, which is useful\n * for capturing more context in error scenarios. It delegates to {@link wrapOrAnnotateError}\n * for the actual error wrapping/annotation logic.\n *\n * @param factory - Factory function that creates the specific error type.\n * @param errorMessage - The error message to use.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @param props - Additional telemetry properties to attach to the error.\n * @param stackTraceLimit - Optional limit for the stack trace depth.\n * @returns The created error with telemetry properties attached.\n */\nfunction buildDataProcessingError(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\terrorMessage: string,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n\tprops: ITelemetryPropertiesExt = {},\n\tstackTraceLimit?: number,\n): IFluidErrorBase {\n\tconst ErrorConfig = Error as unknown as { stackTraceLimit: number };\n\tconst originalStackTraceLimit = ErrorConfig.stackTraceLimit;\n\ttry {\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = stackTraceLimit;\n\t\t}\n\n\t\tconst error = wrapDataProcessingErrorIfUnrecognized(\n\t\t\tfactory,\n\t\t\terrorMessage,\n\t\t\tcodepath,\n\t\t\tmessageLike,\n\t\t);\n\t\terror.addTelemetryProperties(props);\n\n\t\treturn error;\n\t} finally {\n\t\t// Reset the stack trace limit to the original value\n\t\tif (stackTraceLimit !== undefined) {\n\t\t\tErrorConfig.stackTraceLimit = originalStackTraceLimit;\n\t\t}\n\t}\n}\n\n/**\n * Wraps an unrecognized error into a data processing error (DataProcessingError or DataCorruptionError)\n * using the provided factory.\n *\n * @remarks\n * This function handles two cases:\n * - **Unrecognized/external errors**: Wrapped using the provided factory function to create a proper\n * Fluid error type (DataProcessingError or DataCorruptionError).\n * - **Recognized Fluid errors**: Not wrapped, but annotated with data processing telemetry properties.\n *\n * An error is considered \"unrecognized\" if it's external (from outside Fluid) or has the\n * {@link NORMALIZED_ERROR_TYPE} error type (indicating it was normalized but not classified).\n *\n * We wrap conditionally since known error types represent well-understood failure modes, and ideally\n * one day we will move away from throwing these errors but rather we'll return them.\n * But an unrecognized error needs to be classified appropriately (e.g., as DataProcessingError).\n *\n * @param factory - Factory function that creates the specific error type for wrapping unrecognized errors.\n * @param originalError - The error to be wrapped or annotated.\n * @param codepath - Identifier for the code path where the error was detected.\n * @param messageLike - Optional message properties to include in telemetry.\n * @returns The wrapped or annotated error as an {@link IFluidErrorBase}.\n */\nfunction wrapDataProcessingErrorIfUnrecognized(\n\tfactory: (message: string) => LoggingError & IFluidErrorBase,\n\toriginalError: unknown,\n\tcodepath: string,\n\tmessageLike?: MessageLike,\n): IFluidErrorBase {\n\tconst props = {\n\t\tdataProcessingError: 1,\n\t\tdataProcessingCodepath: codepath,\n\t\t...(messageLike === undefined ? undefined : extractSafePropertiesFromMessage(messageLike)),\n\t};\n\n\tconst normalizedError = normalizeError(originalError, { props });\n\t// Note that other errors may have the NORMALIZED_ERROR_TYPE errorType,\n\t// but if so they are still suitable to be wrapped as DataProcessingError.\n\tif (\n\t\tisExternalError(normalizedError) ||\n\t\tnormalizedError.errorType === NORMALIZED_ERROR_TYPE\n\t) {\n\t\t// Create a new DataProcessingError to wrap this external error\n\t\tconst error = wrapError(normalizedError, (message: string) => factory(message));\n\n\t\t// Copy over the props above and any others added to this error since first being normalized\n\t\terror.addTelemetryProperties(normalizedError.getTelemetryProperties());\n\n\t\treturn error;\n\t}\n\treturn normalizedError;\n}\n\n/**\n * Generic wrapper for an unrecognized/uncategorized error object\n *\n * @internal\n */\nexport class GenericError extends LoggingError implements IGenericError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.genericError;\n\n\t/**\n\t * Create a new GenericError\n\t * @param message - Error message\n\t * @param error - inner error object\n\t * @param props - Telemetry props to include when the error is logged\n\t */\n\tpublic constructor(\n\t\tmessage: string,\n\t\t// TODO: Use `unknown` instead (API breaking change because error is not just an input parameter, but a public member of the class)\n\t\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n\t\tpublic readonly error?: any,\n\t\tprops?: ITelemetryBaseProperties,\n\t) {\n\t\t// Don't try to log the inner error\n\t\tsuper(message, props, new Set([\"error\"]));\n\t}\n}\n\n/**\n * Error indicating an API is being used improperly resulting in an invalid operation.\n *\n * @internal\n */\nexport class UsageError extends LoggingError implements IUsageError, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.usageError;\n\n\tpublic constructor(message: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, usageError: true });\n\t}\n}\n\n/**\n * DataCorruptionError indicates that we encountered definitive evidence that the data at rest\n * backing this container is corrupted, and this container would never be expected to load properly again\n *\n * @internal\n */\nexport class DataCorruptionError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\tpublic readonly errorType = FluidErrorTypes.dataCorruptionError;\n\tpublic readonly canRetry = false;\n\n\tpublic constructor(message: string, props: ITelemetryBaseProperties) {\n\t\tsuper(message, { ...props, dataProcessingError: 1 });\n\t}\n\n\t/**\n\t * Create a new `DataCorruptionError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataCorruptionCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataCorruptionError(message, {}),\n\t\t\terrorMessage,\n\t\t\tdataCorruptionCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n}\n\n/**\n * Indicates we hit a fatal error while processing incoming data from the Fluid Service.\n *\n * @remarks\n *\n * The error will often originate in the dataStore or DDS implementation that is responding to incoming changes.\n * This differs from {@link DataCorruptionError} in that this may be a transient error that will not repro in another\n * client or session.\n *\n * @internal\n */\nexport class DataProcessingError extends LoggingError implements IErrorBase, IFluidErrorBase {\n\t/**\n\t * {@inheritDoc IFluidErrorBase.errorType}\n\t */\n\tpublic readonly errorType = FluidErrorTypes.dataProcessingError;\n\n\tpublic readonly canRetry = false;\n\n\tprivate constructor(errorMessage: string, props?: ITelemetryBaseProperties) {\n\t\tsuper(errorMessage, props);\n\t}\n\n\t/**\n\t * Create a new `DataProcessingError` detected and raised within the Fluid Framework.\n\t */\n\tpublic static create(\n\t\terrorMessage: string,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t\tprops: ITelemetryPropertiesExt = {},\n\t\tstackTraceLimit?: number,\n\t): IFluidErrorBase {\n\t\treturn buildDataProcessingError(\n\t\t\t(message: string) => new DataProcessingError(message),\n\t\t\terrorMessage,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t\tprops,\n\t\t\tstackTraceLimit,\n\t\t);\n\t}\n\n\t/**\n\t * Wrap the given error in a `DataProcessingError`, unless the error is already of a known type\n\t * with the exception of a normalized {@link LoggingError}, which will still be wrapped.\n\t *\n\t * In either case, the error will have some relevant properties added for telemetry.\n\t *\n\t * @remarks See `wrapDataProcessingErrorIfUnrecognized` for details on wrapping behavior.\n\t *\n\t * @param originalError - The error to be converted.\n\t * @param dataProcessingCodepath - Which code-path failed while processing data.\n\t * @param messageLike - Message to include info about via telemetry props.\n\t *\n\t * @returns Either a new `DataProcessingError`, or (if wrapping is deemed unnecessary) the given error.\n\t */\n\tpublic static wrapIfUnrecognized(\n\t\toriginalError: unknown,\n\t\tdataProcessingCodepath: string,\n\t\tmessageLike?: MessageLike,\n\t): IFluidErrorBase {\n\t\treturn wrapDataProcessingErrorIfUnrecognized(\n\t\t\t(errorMessage: string) => new DataProcessingError(errorMessage),\n\t\t\toriginalError,\n\t\t\tdataProcessingCodepath,\n\t\t\tmessageLike,\n\t\t);\n\t}\n}\n\n/**\n * Error indicating that two Fluid layers are incompatible.\n * See {@link @fluidframework/core-interfaces#ILayerIncompatibilityError} for more details.\n *\n * @internal\n */\nexport class LayerIncompatibilityError\n\textends LoggingError\n\timplements ILayerIncompatibilityError\n{\n\tpublic readonly errorType = FluidErrorTypes.layerIncompatibilityError;\n\tpublic readonly layer: string;\n\tpublic readonly layerVersion: string;\n\tpublic readonly incompatibleLayer: string;\n\tpublic readonly incompatibleLayerVersion: string;\n\tpublic readonly compatibilityRequirementsInMonths: number;\n\tpublic readonly actualDifferenceInMonths: number;\n\tpublic readonly details: string;\n\n\tpublic constructor(\n\t\tmessage: string,\n\t\tincompatibilityProps: {\n\t\t\tlayer: string;\n\t\t\tlayerVersion: string;\n\t\t\tincompatibleLayer: string;\n\t\t\tincompatibleLayerVersion: string;\n\t\t\tcompatibilityRequirementsInMonths: number;\n\t\t\tactualDifferenceInMonths: number;\n\t\t\tdetails: string;\n\t\t},\n\t\ttelemetryProps?: ITelemetryBaseProperties,\n\t) {\n\t\tsuper(message, {\n\t\t\t...incompatibilityProps,\n\t\t\t...telemetryProps,\n\t\t\tlayerIncompatibilityError: true,\n\t\t});\n\t\tthis.layer = incompatibilityProps.layer;\n\t\tthis.layerVersion = incompatibilityProps.layerVersion;\n\t\tthis.incompatibleLayer = incompatibilityProps.incompatibleLayer;\n\t\tthis.incompatibleLayerVersion = incompatibilityProps.incompatibleLayerVersion;\n\t\tthis.compatibilityRequirementsInMonths =\n\t\t\tincompatibilityProps.compatibilityRequirementsInMonths;\n\t\tthis.actualDifferenceInMonths = incompatibilityProps.actualDifferenceInMonths;\n\t\tthis.details = incompatibilityProps.details;\n\t}\n}\n\n/**\n * Extracts specific properties from the provided message that we know are safe to log.\n *\n * @param messageLike - Message to include info about via telemetry props.\n *\n * @internal\n */\nexport const extractSafePropertiesFromMessage = (\n\tmessageLike: MessageLike,\n): {\n\tmessageClientId: string | undefined;\n\tmessageSequenceNumber: number | undefined;\n\tmessageClientSequenceNumber: number | undefined;\n\tmessageReferenceSequenceNumber: number | undefined;\n\tmessageMinimumSequenceNumber: number | undefined;\n\tmessageTimestamp: number | undefined;\n} => ({\n\tmessageClientId: messageLike.clientId === null ? \"null\" : messageLike.clientId,\n\tmessageSequenceNumber: messageLike.sequenceNumber,\n\tmessageClientSequenceNumber: messageLike.clientSequenceNumber,\n\tmessageReferenceSequenceNumber: messageLike.referenceSequenceNumber,\n\tmessageMinimumSequenceNumber: messageLike.minimumSequenceNumber,\n\tmessageTimestamp: messageLike.timestamp,\n});\n"]} |
+7
-7
| { | ||
| "name": "@fluidframework/telemetry-utils", | ||
| "version": "2.101.1", | ||
| "version": "2.102.0", | ||
| "description": "Collection of telemetry relates utilities for Fluid", | ||
@@ -72,6 +72,6 @@ "homepage": "https://fluidframework.com", | ||
| "dependencies": { | ||
| "@fluid-internal/client-utils": "~2.101.1", | ||
| "@fluidframework/core-interfaces": "~2.101.1", | ||
| "@fluidframework/core-utils": "~2.101.1", | ||
| "@fluidframework/driver-definitions": "~2.101.1", | ||
| "@fluid-internal/client-utils": "~2.102.0", | ||
| "@fluidframework/core-interfaces": "~2.102.0", | ||
| "@fluidframework/core-utils": "~2.102.0", | ||
| "@fluidframework/driver-definitions": "~2.102.0", | ||
| "debug": "^4.3.4", | ||
@@ -83,3 +83,3 @@ "uuid": "^11.1.0" | ||
| "@biomejs/biome": "~2.4.5", | ||
| "@fluid-internal/mocha-test-setup": "~2.101.1", | ||
| "@fluid-internal/mocha-test-setup": "~2.102.0", | ||
| "@fluid-tools/build-cli": "^0.65.0", | ||
@@ -89,3 +89,3 @@ "@fluidframework/build-common": "^2.0.3", | ||
| "@fluidframework/eslint-config-fluid": "^9.0.0", | ||
| "@fluidframework/telemetry-utils-previous": "npm:@fluidframework/telemetry-utils@2.92.0", | ||
| "@fluidframework/telemetry-utils-previous": "npm:@fluidframework/telemetry-utils@2.101.0", | ||
| "@microsoft/api-extractor": "7.58.1", | ||
@@ -92,0 +92,0 @@ "@types/debug": "^4.1.5", |
+1
-2
@@ -298,4 +298,3 @@ /*! | ||
| return wrapDataProcessingErrorIfUnrecognized( | ||
| (errorMessage: string, props?: ITelemetryBaseProperties) => | ||
| new DataProcessingError(errorMessage, props), | ||
| (errorMessage: string) => new DataProcessingError(errorMessage), | ||
| originalError, | ||
@@ -302,0 +301,0 @@ dataProcessingCodepath, |
1067651
-0.02%12881
-0.01%+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed