@fluidframework/telemetry-utils 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1

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 (132) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/telemetry-utils.api.md +6 -6
  3. package/dist/config.d.ts +2 -2
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +6 -2
  6. package/dist/config.js.map +1 -1
  7. package/dist/error.d.ts +4 -2
  8. package/dist/error.d.ts.map +1 -1
  9. package/dist/error.js +5 -5
  10. package/dist/error.js.map +1 -1
  11. package/dist/errorLogging.d.ts +3 -2
  12. package/dist/errorLogging.d.ts.map +1 -1
  13. package/dist/errorLogging.js.map +1 -1
  14. package/dist/eventEmitterWithErrorHandling.d.ts +1 -1
  15. package/dist/eventEmitterWithErrorHandling.d.ts.map +1 -1
  16. package/dist/eventEmitterWithErrorHandling.js +2 -2
  17. package/dist/eventEmitterWithErrorHandling.js.map +1 -1
  18. package/dist/events.d.ts +1 -1
  19. package/dist/events.d.ts.map +1 -1
  20. package/dist/events.js.map +1 -1
  21. package/dist/fluidErrorBase.d.ts.map +1 -1
  22. package/dist/fluidErrorBase.js.map +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/legacy.d.ts +28 -0
  27. package/dist/logger.d.ts +2 -2
  28. package/dist/logger.d.ts.map +1 -1
  29. package/dist/logger.js +1 -1
  30. package/dist/logger.js.map +1 -1
  31. package/dist/mockLogger.d.ts +1 -1
  32. package/dist/mockLogger.d.ts.map +1 -1
  33. package/dist/mockLogger.js +3 -3
  34. package/dist/mockLogger.js.map +1 -1
  35. package/dist/public.d.ts +20 -0
  36. package/dist/sampledTelemetryHelper.d.ts +2 -2
  37. package/dist/sampledTelemetryHelper.d.ts.map +1 -1
  38. package/dist/sampledTelemetryHelper.js.map +1 -1
  39. package/dist/utils.d.ts +4 -0
  40. package/dist/utils.d.ts.map +1 -1
  41. package/dist/utils.js +4 -0
  42. package/dist/utils.js.map +1 -1
  43. package/internal.d.ts +11 -0
  44. package/legacy.d.ts +11 -0
  45. package/lib/config.d.ts +2 -2
  46. package/lib/config.d.ts.map +1 -1
  47. package/lib/config.js +5 -1
  48. package/lib/config.js.map +1 -1
  49. package/lib/error.d.ts +4 -2
  50. package/lib/error.d.ts.map +1 -1
  51. package/lib/error.js +1 -1
  52. package/lib/error.js.map +1 -1
  53. package/lib/errorLogging.d.ts +3 -2
  54. package/lib/errorLogging.d.ts.map +1 -1
  55. package/lib/errorLogging.js.map +1 -1
  56. package/lib/eventEmitterWithErrorHandling.d.ts +1 -1
  57. package/lib/eventEmitterWithErrorHandling.d.ts.map +1 -1
  58. package/lib/eventEmitterWithErrorHandling.js.map +1 -1
  59. package/lib/events.d.ts +1 -1
  60. package/lib/events.d.ts.map +1 -1
  61. package/lib/events.js.map +1 -1
  62. package/lib/fluidErrorBase.d.ts.map +1 -1
  63. package/lib/fluidErrorBase.js.map +1 -1
  64. package/lib/index.d.ts.map +1 -1
  65. package/lib/index.js.map +1 -1
  66. package/lib/legacy.d.ts +28 -0
  67. package/lib/logger.d.ts +2 -2
  68. package/lib/logger.d.ts.map +1 -1
  69. package/lib/logger.js +2 -2
  70. package/lib/logger.js.map +1 -1
  71. package/lib/mockLogger.d.ts +1 -1
  72. package/lib/mockLogger.d.ts.map +1 -1
  73. package/lib/mockLogger.js +2 -2
  74. package/lib/mockLogger.js.map +1 -1
  75. package/lib/public.d.ts +20 -0
  76. package/lib/sampledTelemetryHelper.d.ts +2 -2
  77. package/lib/sampledTelemetryHelper.d.ts.map +1 -1
  78. package/lib/sampledTelemetryHelper.js.map +1 -1
  79. package/lib/utils.d.ts +4 -0
  80. package/lib/utils.d.ts.map +1 -1
  81. package/lib/utils.js +4 -0
  82. package/lib/utils.js.map +1 -1
  83. package/package.json +27 -48
  84. package/src/config.ts +5 -3
  85. package/src/error.ts +4 -4
  86. package/src/errorLogging.ts +6 -8
  87. package/src/eventEmitterWithErrorHandling.ts +2 -1
  88. package/src/events.ts +2 -1
  89. package/src/fluidErrorBase.ts +1 -0
  90. package/src/index.ts +1 -0
  91. package/src/logger.ts +7 -6
  92. package/src/mockLogger.ts +4 -3
  93. package/src/sampledTelemetryHelper.ts +3 -2
  94. package/src/utils.ts +2 -0
  95. package/api-extractor-cjs.json +0 -8
  96. package/dist/telemetry-utils-alpha.d.ts +0 -282
  97. package/dist/telemetry-utils-beta.d.ts +0 -239
  98. package/dist/telemetry-utils-public.d.ts +0 -239
  99. package/dist/telemetry-utils-untrimmed.d.ts +0 -1077
  100. package/lib/telemetry-utils-alpha.d.ts +0 -282
  101. package/lib/telemetry-utils-beta.d.ts +0 -239
  102. package/lib/telemetry-utils-public.d.ts +0 -239
  103. package/lib/telemetry-utils-untrimmed.d.ts +0 -1077
  104. package/lib/test/EventEmitterWithErrorHandling.spec.js +0 -86
  105. package/lib/test/EventEmitterWithErrorHandling.spec.js.map +0 -1
  106. package/lib/test/childLogger.spec.js +0 -233
  107. package/lib/test/childLogger.spec.js.map +0 -1
  108. package/lib/test/config.spec.js +0 -229
  109. package/lib/test/config.spec.js.map +0 -1
  110. package/lib/test/error.spec.js +0 -161
  111. package/lib/test/error.spec.js.map +0 -1
  112. package/lib/test/errorLogging.spec.js +0 -801
  113. package/lib/test/errorLogging.spec.js.map +0 -1
  114. package/lib/test/errorTypeLoggingTest.spec.js +0 -107
  115. package/lib/test/errorTypeLoggingTest.spec.js.map +0 -1
  116. package/lib/test/mockLogger.spec.js +0 -164
  117. package/lib/test/mockLogger.spec.js.map +0 -1
  118. package/lib/test/multiSinkLogger.spec.js +0 -84
  119. package/lib/test/multiSinkLogger.spec.js.map +0 -1
  120. package/lib/test/performanceEvent.spec.js +0 -86
  121. package/lib/test/performanceEvent.spec.js.map +0 -1
  122. package/lib/test/sampledTelemetryHelper.spec.js +0 -169
  123. package/lib/test/sampledTelemetryHelper.spec.js.map +0 -1
  124. package/lib/test/telemetryLogger.spec.js +0 -357
  125. package/lib/test/telemetryLogger.spec.js.map +0 -1
  126. package/lib/test/thresholdCounter.spec.js +0 -51
  127. package/lib/test/thresholdCounter.spec.js.map +0 -1
  128. package/lib/test/types/validateTelemetryUtilsPrevious.generated.js +0 -132
  129. package/lib/test/types/validateTelemetryUtilsPrevious.generated.js.map +0 -1
  130. package/lib/test/utils.spec.js +0 -284
  131. package/lib/test/utils.spec.js.map +0 -1
  132. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.spec.js","sourceRoot":"","sources":["../../src/test/config.spec.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 { strict as assert } from \"node:assert\";\nimport { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\nimport {\n\tCachedConfigProvider,\n\tinMemoryConfigProvider,\n\twrapConfigProviderWithDefaults,\n} from \"../config.js\";\nimport { TelemetryDataTag } from \"../logger.js\";\nimport { MockLogger } from \"../mockLogger.js\";\n\nconst getMockStore = (settings: Record<string, string>): Storage => {\n\tconst ops: string[] = [];\n\treturn {\n\t\tgetItem: (key: string): string | null => {\n\t\t\tops.push(key);\n\t\t\treturn settings[key];\n\t\t},\n\t\tgetOps: (): Readonly<string[]> => ops,\n\t\tlength: Object.keys(settings).length,\n\t\tclear: (): void => {},\n\t\t// eslint-disable-next-line unicorn/no-null\n\t\tkey: (_index: number): string | null => null,\n\t\tremoveItem: (_key: string): void => {},\n\t\tsetItem: (_key: string, _value: string): void => {},\n\t};\n};\n\nconst untypedProvider = (settings: Record<string, ConfigTypes>): IConfigProviderBase => {\n\treturn {\n\t\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n\t};\n};\n\ndescribe(\"Config\", () => {\n\tit(\"Typing - storage provider\", () => {\n\t\tconst settings = {\n\t\t\tnumber: \"1\",\n\t\t\tbadNumber: \"{1}\",\n\t\t\tstringAndNumber: \"1\",\n\t\t\tstringAndBoolean: \"true\",\n\t\t\tstring: \"string\",\n\t\t\tboolean: \"true\",\n\t\t\tbadBoolean: \"truthy\",\n\t\t\tnumberArray: `[1, 2, 3]`,\n\t\t\tbadNumberArray: `[\"one\", \"two\", \"three\"]`,\n\t\t\tstringArray: `[\"1\", \"2\", \"3\"]`,\n\t\t\tbadStringArray: \"1\",\n\t\t\tbooleanArray: \"[true, false, true]\",\n\t\t\tBadBooleanArray: \"[true, 1, true]\",\n\t\t};\n\n\t\tconst mockStore = getMockStore(settings);\n\t\tconst logger = new MockLogger();\n\t\tconst config = new CachedConfigProvider(logger, inMemoryConfigProvider(mockStore));\n\n\t\tassert.equal(config.getNumber(\"number\"), 1);\n\t\tlogger.assertMatch([\n\t\t\t{\n\t\t\t\tcategory: \"generic\",\n\t\t\t\teventName: \"ConfigRead\",\n\t\t\t\tconfigName: { tag: TelemetryDataTag.CodeArtifact, value: \"number\" },\n\t\t\t\tconfigValue: {\n\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\tvalue: `{\"raw\":\"1\",\"string\":\"1\",\"number\":1}`,\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t\tassert.equal(config.getNumber(\"badNumber\"), undefined);\n\t\tassert.equal(config.getNumber(\"stringAndNumber\"), 1);\n\n\t\tassert.equal(config.getString(\"stringAndNumber\"), \"1\");\n\t\tassert.equal(config.getString(\"stringAndBoolean\"), \"true\");\n\t\tassert.equal(config.getString(\"string\"), \"string\");\n\n\t\tassert.equal(config.getBoolean(\"boolean\"), true);\n\t\tassert.equal(config.getBoolean(\"badBoolean\"), undefined);\n\t\tassert.equal(config.getBoolean(\"stringAndBoolean\"), true);\n\n\t\tassert.deepEqual(config.getNumberArray(\"numberArray\"), [1, 2, 3]);\n\t\tassert.equal(config.getNumberArray(\"badNumberArray\"), undefined);\n\n\t\tassert.deepEqual(config.getStringArray(\"stringArray\"), [\"1\", \"2\", \"3\"]);\n\t\tassert.equal(config.getStringArray(\"badStringArray\"), undefined);\n\n\t\tassert.deepEqual(config.getBooleanArray(\"booleanArray\"), [true, false, true]);\n\t\tassert.equal(config.getBooleanArray(\"BadBooleanArray\"), undefined);\n\t});\n\n\tit(\"Typing - custom provider\", () => {\n\t\tconst settings = {\n\t\t\tnumber: 1,\n\t\t\tbadNumber: \"{1}\",\n\t\t\tstringAndNumber: \"1\",\n\t\t\tstringAndBoolean: \"true\",\n\t\t\tstring: \"string\",\n\t\t\tbadString: [],\n\t\t\tboolean: \"true\",\n\t\t\tbadBoolean: \"truthy\",\n\t\t\tnumberArray: `[1, 2, 3]`,\n\t\t\tbadNumberArray: [\"one\", \"two\", \"three\"],\n\t\t\tstringArray: `[\"1\", \"2\", \"3\"]`,\n\t\t\tbadStringArray: \"1\",\n\t\t\tbooleanArray: [true, false, true],\n\t\t\tbadBooleanArray: [1, 2, 3],\n\t\t\tbadBooleanArray2: [\"true\", \"false\", \"true\"],\n\t\t};\n\n\t\tconst mockStore = untypedProvider(settings);\n\t\tconst config = new CachedConfigProvider(undefined, mockStore);\n\n\t\tassert.equal(config.getNumber(\"number\"), 1);\n\t\tassert.equal(config.getNumber(\"stringAndNumber\"), 1);\n\t\tassert.equal(config.getNumber(\"badNumber\"), undefined);\n\n\t\tassert.equal(config.getString(\"stringAndNumber\"), \"1\");\n\t\tassert.equal(config.getString(\"stringAndBoolean\"), \"true\");\n\t\tassert.equal(config.getString(\"string\"), \"string\");\n\t\tassert.equal(config.getString(\"badString\"), undefined);\n\n\t\tassert.equal(config.getBoolean(\"boolean\"), true);\n\t\tassert.equal(config.getBoolean(\"badBoolean\"), undefined);\n\t\tassert.equal(config.getBoolean(\"stringAndBoolean\"), true);\n\n\t\tassert.deepEqual(config.getNumberArray(\"numberArray\"), [1, 2, 3]);\n\t\tassert.equal(config.getNumberArray(\"badNumberArray\"), undefined);\n\n\t\tassert.deepEqual(config.getStringArray(\"stringArray\"), [\"1\", \"2\", \"3\"]);\n\t\tassert.equal(config.getStringArray(\"badStringArray\"), undefined);\n\n\t\tassert.deepEqual(config.getBooleanArray(\"booleanArray\"), [true, false, true]);\n\t\tassert.equal(config.getBooleanArray(\"badBooleanArray\"), undefined);\n\t\tassert.equal(config.getBooleanArray(\"badBooleanArray2\"), undefined);\n\t});\n\n\tit(\"Void provider\", () => {\n\t\tconst config = new CachedConfigProvider(undefined, inMemoryConfigProvider(undefined));\n\t\tassert.equal(config.getNumber(\"number\"), undefined);\n\t\tassert.equal(config.getString(\"does not exist\"), undefined);\n\t\tassert.equal(config.getBoolean(\"boolean\"), undefined);\n\t});\n\n\tit(\"Config priority\", () => {\n\t\tconst settings1 = {\n\t\t\tnumber: \"1\",\n\t\t\tstring: \"string1\",\n\t\t\tboolean: \"true\",\n\t\t\tfeatureEnabled: \"false\",\n\t\t};\n\t\tconst settings2 = {\n\t\t\tnumber: \"2\",\n\t\t\tstring: \"string2\",\n\t\t\tboolean: \"false\",\n\t\t\tnumber2: \"3\",\n\t\t\tfeatureEnabled: \"true\",\n\t\t};\n\t\tconst settings3 = {\n\t\t\tnumber2: \"4\",\n\t\t\tnumber3: \"4\",\n\t\t\tfeatureEnabled: \"true\",\n\t\t};\n\n\t\tconst config1 = new CachedConfigProvider(\n\t\t\tundefined,\n\t\t\tinMemoryConfigProvider(getMockStore(settings1)),\n\t\t\tinMemoryConfigProvider(getMockStore(settings1)),\n\t\t\tinMemoryConfigProvider(getMockStore(settings2)),\n\t\t\tinMemoryConfigProvider(getMockStore(settings3)),\n\t\t);\n\n\t\tassert.equal(config1.getNumber(\"number\"), 1); // from settings1\n\t\tassert.equal(config1.getString(\"string\"), \"string1\"); // from settings1\n\t\tassert.equal(config1.getBoolean(\"boolean\"), true); // from settings1\n\t\tassert.equal(config1.getNumber(\"number2\"), 3); // from settings2\n\t\tassert.equal(config1.getNumber(\"number3\"), 4); // from settings3\n\t\tassert.equal(config1.getBoolean(\"featureEnabled\"), false); // from settings1.BreakGlass\n\n\t\tconst config2 = new CachedConfigProvider(\n\t\t\tundefined,\n\t\t\tinMemoryConfigProvider(getMockStore(settings3)),\n\t\t\tinMemoryConfigProvider(getMockStore(settings2)),\n\t\t\tinMemoryConfigProvider(getMockStore(settings1)),\n\t\t\tinMemoryConfigProvider(getMockStore(settings1)),\n\t\t);\n\n\t\tassert.equal(config2.getNumber(\"number\"), 2); // from settings2\n\t\tassert.equal(config2.getString(\"string\"), \"string2\"); // from settings2\n\t\tassert.equal(config2.getBoolean(\"boolean\"), false); // from settings2\n\t\tassert.equal(config2.getNumber(\"number2\"), 4); // from settings3\n\t\tassert.equal(config2.getNumber(\"number3\"), 4); // from settings3\n\t\tassert.equal(config1.getBoolean(\"featureEnabled\"), false); // from settings1.BreakGlass\n\t});\n\n\t// #region SettingsProvider\n\n\ttype SettingType = string | boolean | number | (string | boolean | number)[] | null;\n\n\tinterface ProvideSettingsProvider {\n\t\treadonly SettingsProvider: SettingsProvider;\n\t}\n\n\tinterface SettingsProvider extends ProvideSettingsProvider {\n\t\t/**\n\t\t * Used to get the setting value for the specified setting.\n\t\t * Providing a default in case setting is not available or not defined.\n\t\t */\n\t\tgetSetting<T extends SettingType>(\n\t\t\tsettingName: string,\n\t\t\tdefaultValue: T,\n\t\t\tnamespace?: string,\n\t\t): T;\n\t}\n\n\tclass HybridSettingsProvider implements SettingsProvider, IConfigProviderBase {\n\t\tconstructor(private readonly store: Record<string, SettingType | ConfigTypes>) {}\n\n\t\tgetRawConfig(name: string): ConfigTypes {\n\t\t\t// The point here is to use `getSetting`\n\t\t\t// eslint-disable-next-line unicorn/no-null\n\t\t\tconst val = this.getSetting(name, null);\n\t\t\treturn val ?? undefined;\n\t\t}\n\n\t\tgetSetting<T extends SettingType>(\n\t\t\tsettingName: string,\n\t\t\tdefaultValue: T,\n\t\t\tnamespace?: string,\n\t\t): T {\n\t\t\tconst key = namespace === undefined ? settingName : `${namespace}.${settingName}`;\n\t\t\treturn (this.store[key] as T) ?? defaultValue;\n\t\t}\n\n\t\tSettingsProvider: SettingsProvider = this;\n\t}\n\n\tit(\"Typing - SettingsProvider\", () => {\n\t\tconst settings = {\n\t\t\tnumber: 1,\n\t\t\tsortOfNumber: \"1\",\n\t\t\tbadNumber: \"{1}\",\n\t\t\tstringAndNumber: \"1\",\n\t\t\tstringAndBoolean: \"true\",\n\t\t\tstring: \"string\",\n\t\t\tbadString: [],\n\t\t\tboolean: \"true\",\n\t\t\tbadBoolean: \"truthy\",\n\t\t\tnumberArray: `[1, 2, 3]`,\n\t\t\tbadNumberArray: [\"one\", \"two\", \"three\"],\n\t\t\tstringArray: `[\"1\", \"2\", \"3\"]`,\n\t\t\tbadStringArray: \"1\",\n\t\t\tbooleanArray: [true, false, true],\n\t\t\tbadBooleanArray: [1, 2, 3],\n\t\t\tbadBooleanArray2: [\"true\", \"false\", \"true\"],\n\t\t};\n\n\t\tconst config = new CachedConfigProvider(undefined, new HybridSettingsProvider(settings));\n\n\t\tassert.equal(config.getNumber(\"number\"), 1);\n\t\tassert.equal(config.getNumber(\"sortOfNumber\"), 1);\n\t\tassert.equal(config.getNumber(\"badNumber\"), undefined);\n\n\t\tassert.equal(config.getString(\"stringAndNumber\"), \"1\");\n\t\tassert.equal(config.getString(\"stringAndBoolean\"), \"true\");\n\t\tassert.equal(config.getString(\"string\"), \"string\");\n\t\tassert.equal(config.getString(\"badString\"), undefined);\n\n\t\tassert.equal(config.getBoolean(\"boolean\"), true);\n\t\tassert.equal(config.getBoolean(\"badBoolean\"), undefined);\n\n\t\tassert.deepEqual(config.getNumberArray(\"numberArray\"), [1, 2, 3]);\n\t\tassert.equal(config.getNumberArray(\"badNumberArray\"), undefined);\n\n\t\tassert.deepEqual(config.getStringArray(\"stringArray\"), [\"1\", \"2\", \"3\"]);\n\t\tassert.equal(config.getStringArray(\"badStringArray\"), undefined);\n\n\t\tassert.deepEqual(config.getBooleanArray(\"booleanArray\"), [true, false, true]);\n\t\tassert.equal(config.getBooleanArray(\"badBooleanArray\"), undefined);\n\t\tassert.equal(config.getBooleanArray(\"badBooleanArray2\"), undefined);\n\t});\n\n\t// #endregion SettingsProvider\n});\n\ndescribe(\"wrappedConfigProvider\", () => {\n\tconst configProvider = (featureGates: Record<string, ConfigTypes>): IConfigProviderBase => ({\n\t\tgetRawConfig: (name: string): ConfigTypes => featureGates[name],\n\t});\n\n\tit(\"When there is no original config provider\", () => {\n\t\tconst config = wrapConfigProviderWithDefaults(undefined, { \"Fluid.Feature.Gate\": true });\n\t\tassert.strictEqual(config.getRawConfig(\"Fluid.Feature.Gate\"), true);\n\t});\n\n\tit(\"When the original config provider does not specify the required key\", () => {\n\t\tconst config = wrapConfigProviderWithDefaults(configProvider({}), {\n\t\t\t\"Fluid.Feature.Gate\": true,\n\t\t});\n\t\tassert.strictEqual(config.getRawConfig(\"Fluid.Feature.Gate\"), true);\n\t});\n\n\tit(\"When the original config provider specifies the required key\", () => {\n\t\tconst config = wrapConfigProviderWithDefaults(\n\t\t\tconfigProvider({ \"Fluid.Feature.Gate\": false }),\n\t\t\t{ \"Fluid.Feature.Gate\": true },\n\t\t);\n\t\tassert.strictEqual(config.getRawConfig(\"Fluid.Feature.Gate\"), false);\n\t});\n});\n"]}
@@ -1,161 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from "node:assert";
6
- import { FluidErrorTypes } from "@fluidframework/core-interfaces";
7
- import { DataCorruptionError, DataProcessingError } from "../error.js";
8
- import { LoggingError, isILoggingError, normalizeError } from "../errorLogging.js";
9
- describe("Errors", () => {
10
- describe("DataProcessingError.create", () => {
11
- it("Should yield a DataProcessingError", () => {
12
- const dpe = DataProcessingError.create("Some message", "someCodepath", undefined, {
13
- someProp: 1234,
14
- });
15
- assert(dpe instanceof DataProcessingError);
16
- assert(dpe.errorType === FluidErrorTypes.dataProcessingError);
17
- assert(dpe.message === "Some message");
18
- assert(dpe.getTelemetryProperties().someProp === 1234);
19
- assert(dpe.getTelemetryProperties().dataProcessingError === 1);
20
- assert(dpe.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
21
- assert(dpe.getTelemetryProperties().untrustedOrigin === 1);
22
- });
23
- });
24
- describe("DataProcessingError coercion via DataProcessingError.wrapIfUnrecognized", () => {
25
- it("Should preserve the stack", () => {
26
- const originalError = new Error("Test error");
27
- const testError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
28
- assert(testError.stack === originalError.stack);
29
- });
30
- it("Should skip coercion for valid Fluid Error", () => {
31
- const originalError = new DataCorruptionError("some message", {});
32
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
33
- assert(coercedError === originalError);
34
- assert(coercedError.errorType === FluidErrorTypes.dataCorruptionError);
35
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
36
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
37
- });
38
- it("Should skip coercion for LoggingError with errorType", () => {
39
- const originalError = new LoggingError("Inherited error message", {
40
- errorType: "Some error type",
41
- otherProperty: "some safe-to-log property",
42
- });
43
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
44
- assert(coercedError === originalError);
45
- assert(coercedError.errorType === "Some error type");
46
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
47
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
48
- });
49
- it("Should coerce normalized external error", () => {
50
- const originalError = normalizeError("boo");
51
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
52
- assert(coercedError !== originalError);
53
- assert(coercedError instanceof DataProcessingError);
54
- assert(coercedError.errorType === FluidErrorTypes.dataProcessingError);
55
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
56
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
57
- assert(coercedError.getTelemetryProperties().untrustedOrigin === 1);
58
- });
59
- it("Should coerce external error object even with errorType", () => {
60
- const originalError = {
61
- errorType: "Some error type",
62
- };
63
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
64
- assert(coercedError !== originalError);
65
- assert(coercedError instanceof DataProcessingError);
66
- assert(coercedError.errorType === FluidErrorTypes.dataProcessingError);
67
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
68
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
69
- assert(coercedError.getTelemetryProperties().untrustedOrigin === 1);
70
- assert(coercedError.message === "[object Object]");
71
- });
72
- it("Should coerce LoggingError missing errorType", () => {
73
- const originalError = new LoggingError("Inherited error message", {
74
- otherProperty: "some safe-to-log property",
75
- });
76
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
77
- assert(coercedError !== originalError);
78
- assert(coercedError instanceof DataProcessingError);
79
- assert(coercedError.errorType === FluidErrorTypes.dataProcessingError);
80
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
81
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
82
- assert(coercedError.getTelemetryProperties().untrustedOrigin === undefined);
83
- assert(coercedError.message === "Inherited error message");
84
- assert(coercedError.getTelemetryProperties().otherProperty === "some safe-to-log property", "telemetryProps should be copied when wrapping");
85
- });
86
- it("Should coerce Normalized LoggingError with errorType", () => {
87
- const originalError = new LoggingError("Inherited error message", {
88
- otherProperty: "some safe-to-log property",
89
- });
90
- const normalizedLoggingError = normalizeError(originalError);
91
- const coercedError = DataProcessingError.wrapIfUnrecognized(normalizedLoggingError, "someCodepath", undefined);
92
- assert(coercedError !== originalError);
93
- assert(coercedError instanceof DataProcessingError);
94
- assert(coercedError.errorType === FluidErrorTypes.dataProcessingError);
95
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
96
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
97
- assert(coercedError.getTelemetryProperties().untrustedOrigin === undefined);
98
- assert(coercedError.message === "Inherited error message");
99
- assert(coercedError.getTelemetryProperties().otherProperty === "some safe-to-log property", "telemetryProps should be copied when wrapping");
100
- });
101
- it("Should not fail coercing malformed inputs", () => {
102
- const originalMalformations = [
103
- // eslint-disable-next-line unicorn/no-null
104
- null,
105
- undefined,
106
- false,
107
- true,
108
- 3.14,
109
- Symbol("Unique"),
110
- () => { },
111
- [],
112
- [1, 2, 3],
113
- ];
114
- const coercedErrors = originalMalformations.map((value) => DataProcessingError.wrapIfUnrecognized(value, "someCodepath", undefined));
115
- assert(coercedErrors.every((error) => typeof error.message === "string" &&
116
- error.errorType === FluidErrorTypes.dataProcessingError &&
117
- error.getTelemetryProperties().dataProcessingError === 1 &&
118
- error.getTelemetryProperties().dataProcessingCodepath === "someCodepath" &&
119
- error.getTelemetryProperties().untrustedOrigin === 1));
120
- assert(!originalMalformations.some((value) => typeof value === "string" ||
121
- (typeof value === "object" && !Array.isArray(value) && value !== null)), "Neither strings nor objects are considered malformed");
122
- });
123
- it("Should be coercible from a string message", () => {
124
- const originalMessage = "Example of some thrown string";
125
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalMessage, "someCodepath", undefined);
126
- assert(coercedError.message === originalMessage);
127
- assert(coercedError.errorType === FluidErrorTypes.dataProcessingError);
128
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
129
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
130
- });
131
- it("Should be coercible from a property object (no errorType)", () => {
132
- const originalError = {
133
- message: "Inherited error message",
134
- };
135
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", undefined);
136
- assert(coercedError.message === originalError.message);
137
- assert(coercedError.errorType === FluidErrorTypes.dataProcessingError);
138
- assert(coercedError.getTelemetryProperties().dataProcessingError === 1);
139
- assert(coercedError.getTelemetryProperties().dataProcessingCodepath === "someCodepath");
140
- });
141
- it("op props should be logged when coerced", () => {
142
- const originalError = {
143
- message: "Inherited error message",
144
- };
145
- const op = { sequenceNumber: 42 };
146
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", op);
147
- assert(isILoggingError(coercedError));
148
- assert(coercedError.getTelemetryProperties().messageSequenceNumber === op.sequenceNumber);
149
- });
150
- it("op props should be logged even when not coerced", () => {
151
- const originalError = {
152
- errorType: "hello",
153
- };
154
- const op = { sequenceNumber: 42 };
155
- const coercedError = DataProcessingError.wrapIfUnrecognized(originalError, "someCodepath", op);
156
- assert(isILoggingError(coercedError));
157
- assert(coercedError.getTelemetryProperties().messageSequenceNumber === op.sequenceNumber);
158
- });
159
- });
160
- });
161
- //# sourceMappingURL=error.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error.spec.js","sourceRoot":"","sources":["../../src/test/error.spec.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 { strict as assert } from \"node:assert\";\n\nimport { FluidErrorTypes } from \"@fluidframework/core-interfaces\";\n\nimport { DataCorruptionError, DataProcessingError } from \"../error.js\";\nimport { LoggingError, isILoggingError, normalizeError } from \"../errorLogging.js\";\n\ndescribe(\"Errors\", () => {\n\tdescribe(\"DataProcessingError.create\", () => {\n\t\tit(\"Should yield a DataProcessingError\", () => {\n\t\t\tconst dpe = DataProcessingError.create(\"Some message\", \"someCodepath\", undefined, {\n\t\t\t\tsomeProp: 1234,\n\t\t\t});\n\t\t\tassert(dpe instanceof DataProcessingError);\n\t\t\tassert(dpe.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(dpe.message === \"Some message\");\n\t\t\tassert(dpe.getTelemetryProperties().someProp === 1234);\n\t\t\tassert(dpe.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(dpe.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t\tassert(dpe.getTelemetryProperties().untrustedOrigin === 1);\n\t\t});\n\t});\n\tdescribe(\"DataProcessingError coercion via DataProcessingError.wrapIfUnrecognized\", () => {\n\t\tit(\"Should preserve the stack\", () => {\n\t\t\tconst originalError = new Error(\"Test error\");\n\t\t\tconst testError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert(testError.stack === originalError.stack);\n\t\t});\n\t\tit(\"Should skip coercion for valid Fluid Error\", () => {\n\t\t\tconst originalError = new DataCorruptionError(\"some message\", {});\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert((coercedError as unknown) === originalError);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataCorruptionError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t});\n\t\tit(\"Should skip coercion for LoggingError with errorType\", () => {\n\t\t\tconst originalError = new LoggingError(\"Inherited error message\", {\n\t\t\t\terrorType: \"Some error type\",\n\t\t\t\totherProperty: \"some safe-to-log property\",\n\t\t\t});\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert((coercedError as unknown) === originalError);\n\t\t\tassert(coercedError.errorType === \"Some error type\");\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t});\n\t\tit(\"Should coerce normalized external error\", () => {\n\t\t\tconst originalError = normalizeError(\"boo\");\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert((coercedError as unknown) !== originalError);\n\t\t\tassert(coercedError instanceof DataProcessingError);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t\tassert(coercedError.getTelemetryProperties().untrustedOrigin === 1);\n\t\t});\n\t\tit(\"Should coerce external error object even with errorType\", () => {\n\t\t\tconst originalError = {\n\t\t\t\terrorType: \"Some error type\",\n\t\t\t};\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert((coercedError as unknown) !== originalError);\n\t\t\tassert(coercedError instanceof DataProcessingError);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t\tassert(coercedError.getTelemetryProperties().untrustedOrigin === 1);\n\t\t\tassert(coercedError.message === \"[object Object]\");\n\t\t});\n\t\tit(\"Should coerce LoggingError missing errorType\", () => {\n\t\t\tconst originalError = new LoggingError(\"Inherited error message\", {\n\t\t\t\totherProperty: \"some safe-to-log property\",\n\t\t\t});\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert((coercedError as unknown) !== originalError);\n\t\t\tassert(coercedError instanceof DataProcessingError);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t\tassert(coercedError.getTelemetryProperties().untrustedOrigin === undefined);\n\t\t\tassert(coercedError.message === \"Inherited error message\");\n\t\t\tassert(\n\t\t\t\tcoercedError.getTelemetryProperties().otherProperty === \"some safe-to-log property\",\n\t\t\t\t\"telemetryProps should be copied when wrapping\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should coerce Normalized LoggingError with errorType\", () => {\n\t\t\tconst originalError = new LoggingError(\"Inherited error message\", {\n\t\t\t\totherProperty: \"some safe-to-log property\",\n\t\t\t});\n\t\t\tconst normalizedLoggingError = normalizeError(originalError);\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\tnormalizedLoggingError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\t\t\tassert((coercedError as unknown) !== originalError);\n\t\t\tassert(coercedError instanceof DataProcessingError);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t\tassert(coercedError.getTelemetryProperties().untrustedOrigin === undefined);\n\t\t\tassert(coercedError.message === \"Inherited error message\");\n\t\t\tassert(\n\t\t\t\tcoercedError.getTelemetryProperties().otherProperty === \"some safe-to-log property\",\n\t\t\t\t\"telemetryProps should be copied when wrapping\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should not fail coercing malformed inputs\", () => {\n\t\t\tconst originalMalformations = [\n\t\t\t\t// eslint-disable-next-line unicorn/no-null\n\t\t\t\tnull,\n\t\t\t\tundefined,\n\t\t\t\tfalse,\n\t\t\t\ttrue,\n\t\t\t\t3.14,\n\t\t\t\tSymbol(\"Unique\"),\n\t\t\t\t(): void => {},\n\t\t\t\t[],\n\t\t\t\t[1, 2, 3],\n\t\t\t];\n\t\t\tconst coercedErrors = originalMalformations.map((value) =>\n\t\t\t\tDataProcessingError.wrapIfUnrecognized(value, \"someCodepath\", undefined),\n\t\t\t);\n\n\t\t\tassert(\n\t\t\t\tcoercedErrors.every(\n\t\t\t\t\t(error) =>\n\t\t\t\t\t\ttypeof error.message === \"string\" &&\n\t\t\t\t\t\terror.errorType === FluidErrorTypes.dataProcessingError &&\n\t\t\t\t\t\terror.getTelemetryProperties().dataProcessingError === 1 &&\n\t\t\t\t\t\terror.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\" &&\n\t\t\t\t\t\terror.getTelemetryProperties().untrustedOrigin === 1,\n\t\t\t\t),\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!originalMalformations.some(\n\t\t\t\t\t(value) =>\n\t\t\t\t\t\ttypeof value === \"string\" ||\n\t\t\t\t\t\t(typeof value === \"object\" && !Array.isArray(value) && value !== null),\n\t\t\t\t),\n\t\t\t\t\"Neither strings nor objects are considered malformed\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should be coercible from a string message\", () => {\n\t\t\tconst originalMessage = \"Example of some thrown string\";\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalMessage,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert(coercedError.message === originalMessage);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t});\n\n\t\tit(\"Should be coercible from a property object (no errorType)\", () => {\n\t\t\tconst originalError = {\n\t\t\t\tmessage: \"Inherited error message\",\n\t\t\t};\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\tundefined,\n\t\t\t);\n\n\t\t\tassert(coercedError.message === originalError.message);\n\t\t\tassert(coercedError.errorType === FluidErrorTypes.dataProcessingError);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingError === 1);\n\t\t\tassert(coercedError.getTelemetryProperties().dataProcessingCodepath === \"someCodepath\");\n\t\t});\n\n\t\tit(\"op props should be logged when coerced\", () => {\n\t\t\tconst originalError = {\n\t\t\t\tmessage: \"Inherited error message\",\n\t\t\t};\n\t\t\tconst op = { sequenceNumber: 42 };\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\top,\n\t\t\t);\n\n\t\t\tassert(isILoggingError(coercedError));\n\t\t\tassert(\n\t\t\t\tcoercedError.getTelemetryProperties().messageSequenceNumber === op.sequenceNumber,\n\t\t\t);\n\t\t});\n\n\t\tit(\"op props should be logged even when not coerced\", () => {\n\t\t\tconst originalError = {\n\t\t\t\terrorType: \"hello\",\n\t\t\t};\n\t\t\tconst op = { sequenceNumber: 42 };\n\t\t\tconst coercedError = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\toriginalError,\n\t\t\t\t\"someCodepath\",\n\t\t\t\top,\n\t\t\t);\n\n\t\t\tassert(isILoggingError(coercedError));\n\t\t\tassert(\n\t\t\t\tcoercedError.getTelemetryProperties().messageSequenceNumber === op.sequenceNumber,\n\t\t\t);\n\t\t});\n\t});\n});\n"]}