@fluidframework/telemetry-utils 2.0.0-rc.2.0.1 → 2.0.0-rc.3.0.0

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,86 +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 { EventEmitterWithErrorHandling } from "../eventEmitterWithErrorHandling.js";
7
- describe("EventEmitterWithErrorHandling", () => {
8
- let errorHandlerCalled = false;
9
- function defaultErrorHandler(event, error) {
10
- errorHandlerCalled = true;
11
- throw error;
12
- }
13
- beforeEach(() => {
14
- errorHandlerCalled = false;
15
- });
16
- it("forwards events", () => {
17
- const emitter = new EventEmitterWithErrorHandling(defaultErrorHandler);
18
- let passedArg;
19
- emitter.on("foo", (arg) => {
20
- passedArg = arg;
21
- });
22
- emitter.emit("foo", 3);
23
- assert.strictEqual(passedArg, 3);
24
- assert.strictEqual(errorHandlerCalled, false);
25
- });
26
- it("forwards error event", () => {
27
- const emitter = new EventEmitterWithErrorHandling(defaultErrorHandler);
28
- let passedArg;
29
- emitter.on("error", (arg) => {
30
- passedArg = arg;
31
- });
32
- emitter.emit("error", 3);
33
- assert.strictEqual(passedArg, 3);
34
- assert.strictEqual(errorHandlerCalled, false);
35
- });
36
- it("error thrown from listener is handled, some other listeners succeed", () => {
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- const emitter = new EventEmitterWithErrorHandling((event, error) => {
39
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
40
- passedErrorMsg = error.message;
41
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
42
- passedEventArg = error.eventArg;
43
- });
44
- let passedErrorMsg;
45
- let passedEventArg;
46
- let earlyListenerCallCount = 0;
47
- let lateListenerCallCount = 0;
48
- // Innocent bystander - early (registered before throwing one)
49
- emitter.on("foo", (_arg) => {
50
- ++earlyListenerCallCount;
51
- });
52
- // The delinquent
53
- emitter.on("foo", (arg) => {
54
- const error = new Error("foo listener throws");
55
- Object.assign(error, { eventArg: arg });
56
- throw error;
57
- });
58
- // Innocent bystander - late (registered after throwing one)
59
- emitter.on("foo", (_arg) => {
60
- ++lateListenerCallCount;
61
- });
62
- emitter.emit("foo", 3); // listener above will throw. Expect error listener to be invoked
63
- assert.strictEqual(passedErrorMsg, "foo listener throws");
64
- assert.strictEqual(passedEventArg, 3);
65
- assert.strictEqual(earlyListenerCallCount, 1);
66
- assert.strictEqual(lateListenerCallCount, 0);
67
- });
68
- it("emitting error event when unhandled will invoke handler", () => {
69
- const emitter = new EventEmitterWithErrorHandling(defaultErrorHandler);
70
- try {
71
- const error = new Error("No one is listening");
72
- Object.assign(error, { prop: 4 });
73
- emitter.emit("error", error, 3); // the extra args (e.g. 3 here) are dropped
74
- assert.fail("previous line should throw");
75
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
- }
77
- catch (error) {
78
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
79
- assert.strictEqual(error.message, "No one is listening");
80
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
81
- assert.strictEqual(error.prop, 4);
82
- assert.strictEqual(errorHandlerCalled, true);
83
- }
84
- });
85
- });
86
- //# sourceMappingURL=EventEmitterWithErrorHandling.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventEmitterWithErrorHandling.spec.js","sourceRoot":"","sources":["../../src/test/EventEmitterWithErrorHandling.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 { EventEmitterWithErrorHandling } from \"../eventEmitterWithErrorHandling.js\";\n\ndescribe(\"EventEmitterWithErrorHandling\", () => {\n\tlet errorHandlerCalled = false;\n\tfunction defaultErrorHandler(event, error): void {\n\t\terrorHandlerCalled = true;\n\t\tthrow error;\n\t}\n\n\tbeforeEach(() => {\n\t\terrorHandlerCalled = false;\n\t});\n\n\tit(\"forwards events\", () => {\n\t\tconst emitter = new EventEmitterWithErrorHandling(defaultErrorHandler);\n\t\tlet passedArg: number | undefined;\n\t\temitter.on(\"foo\", (arg: number) => {\n\t\t\tpassedArg = arg;\n\t\t});\n\n\t\temitter.emit(\"foo\", 3);\n\t\tassert.strictEqual(passedArg, 3);\n\t\tassert.strictEqual(errorHandlerCalled, false);\n\t});\n\tit(\"forwards error event\", () => {\n\t\tconst emitter = new EventEmitterWithErrorHandling(defaultErrorHandler);\n\t\tlet passedArg: number | undefined;\n\t\temitter.on(\"error\", (arg: number) => {\n\t\t\tpassedArg = arg;\n\t\t});\n\n\t\temitter.emit(\"error\", 3);\n\t\tassert.strictEqual(passedArg, 3);\n\t\tassert.strictEqual(errorHandlerCalled, false);\n\t});\n\tit(\"error thrown from listener is handled, some other listeners succeed\", () => {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst emitter = new EventEmitterWithErrorHandling((event, error: any) => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n\t\t\tpassedErrorMsg = error.message;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n\t\t\tpassedEventArg = error.eventArg;\n\t\t});\n\t\tlet passedErrorMsg: string | undefined;\n\t\tlet passedEventArg: number | undefined;\n\t\tlet earlyListenerCallCount: number = 0;\n\t\tlet lateListenerCallCount: number = 0;\n\t\t// Innocent bystander - early (registered before throwing one)\n\t\temitter.on(\"foo\", (_arg: unknown) => {\n\t\t\t++earlyListenerCallCount;\n\t\t});\n\t\t// The delinquent\n\t\temitter.on(\"foo\", (arg: unknown) => {\n\t\t\tconst error = new Error(\"foo listener throws\");\n\t\t\tObject.assign(error, { eventArg: arg });\n\t\t\tthrow error;\n\t\t});\n\t\t// Innocent bystander - late (registered after throwing one)\n\t\temitter.on(\"foo\", (_arg) => {\n\t\t\t++lateListenerCallCount;\n\t\t});\n\n\t\temitter.emit(\"foo\", 3); // listener above will throw. Expect error listener to be invoked\n\t\tassert.strictEqual(passedErrorMsg, \"foo listener throws\");\n\t\tassert.strictEqual(passedEventArg, 3);\n\t\tassert.strictEqual(earlyListenerCallCount, 1);\n\t\tassert.strictEqual(lateListenerCallCount, 0);\n\t});\n\tit(\"emitting error event when unhandled will invoke handler\", () => {\n\t\tconst emitter = new EventEmitterWithErrorHandling(defaultErrorHandler);\n\t\ttry {\n\t\t\tconst error = new Error(\"No one is listening\");\n\t\t\tObject.assign(error, { prop: 4 });\n\t\t\temitter.emit(\"error\", error, 3); // the extra args (e.g. 3 here) are dropped\n\t\t\tassert.fail(\"previous line should throw\");\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t} catch (error: any) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tassert.strictEqual(error.message, \"No one is listening\");\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tassert.strictEqual(error.prop, 4);\n\t\t\tassert.strictEqual(errorHandlerCalled, true);\n\t\t}\n\t});\n});\n"]}
@@ -1,233 +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 { LogLevel, } from "@fluidframework/core-interfaces";
7
- import { ChildLogger, createChildLogger, createMultiSinkLogger } from "../logger.js";
8
- import { MockLogger } from "../mockLogger.js";
9
- describe("ChildLogger", () => {
10
- it("Properties & Getters Propagate", () => {
11
- let sent = false;
12
- const logger = {
13
- send(event) {
14
- if (event.testProperty !== true || event.testGetter !== true) {
15
- throw new Error("expected testProperty and testGetter on event");
16
- }
17
- sent = true;
18
- },
19
- };
20
- const childLogger1 = ChildLogger.create(logger, "test1", {
21
- all: {
22
- testProperty: true,
23
- testGetter: () => true,
24
- },
25
- });
26
- childLogger1.send({ category: "generic", eventName: "test1" });
27
- assert(sent, "event should be sent");
28
- sent = false;
29
- const childLogger2 = createChildLogger({ logger: childLogger1, namespace: "test2" });
30
- childLogger2.send({ category: "generic", eventName: "test2" });
31
- assert(sent, "event should be sent");
32
- });
33
- it("Undefined initial Properties and Getter", () => {
34
- let sent = false;
35
- const logger = {
36
- send(event) {
37
- if (event.testProperty !== true || event.testGetter !== true) {
38
- throw new Error("expected testProperty and testGetter on event");
39
- }
40
- if (event.eventName !== "test1:test2:testEvent") {
41
- throw new Error("expected combined namespace");
42
- }
43
- sent = true;
44
- },
45
- };
46
- const childLogger1 = createChildLogger({ logger, namespace: "test1" });
47
- sent = false;
48
- const childLogger2 = ChildLogger.create(childLogger1, "test2", {
49
- all: {
50
- testProperty: true,
51
- testGetter: () => true,
52
- },
53
- });
54
- childLogger2.send({ category: "generic", eventName: "testEvent" });
55
- assert(sent, "event should be sent");
56
- });
57
- it("Properties Are Combined", () => {
58
- let sent = false;
59
- const logger = {
60
- send(event) {
61
- if (event.testProperty1 !== true || event.testProperty2 !== true) {
62
- throw new Error("expected testProperty1 and testProperty2 on event");
63
- }
64
- if (event.eventName !== "test1:test2:testEvent") {
65
- throw new Error("expected combined namespace");
66
- }
67
- sent = true;
68
- },
69
- };
70
- const childLogger1 = ChildLogger.create(logger, "test1", {
71
- all: {
72
- testProperty1: true,
73
- },
74
- });
75
- const childLogger2 = ChildLogger.create(childLogger1, "test2", {
76
- all: {
77
- testProperty2: true,
78
- },
79
- });
80
- childLogger2.send({ category: "generic", eventName: "testEvent" });
81
- assert(sent, "event should be sent");
82
- });
83
- it("Getters Are Combined", () => {
84
- let sent = false;
85
- const logger = {
86
- send(event) {
87
- if (event.testGetter1 !== true || event.testGetter2 !== true) {
88
- throw new Error("expected testGetter1 and testGetter2 on event");
89
- }
90
- if (event.eventName !== "test1:test2:testEvent") {
91
- throw new Error("expected combined namespace");
92
- }
93
- sent = true;
94
- },
95
- };
96
- const childLogger1 = ChildLogger.create(logger, "test1", {
97
- all: {
98
- testGetter1: () => true,
99
- },
100
- });
101
- const childLogger2 = ChildLogger.create(childLogger1, "test2", {
102
- all: {
103
- testGetter2: () => true,
104
- },
105
- });
106
- childLogger2.send({ category: "generic", eventName: "testEvent" });
107
- assert(sent, "event should be sent");
108
- });
109
- it("Undefined initial namespace", () => {
110
- let sent = false;
111
- const logger = {
112
- send(event) {
113
- if (event.eventName !== "test2:testEvent") {
114
- throw new Error("expected combined namespace");
115
- }
116
- sent = true;
117
- },
118
- };
119
- const childLogger1 = createChildLogger({ logger });
120
- sent = false;
121
- const childLogger2 = createChildLogger({ logger: childLogger1, namespace: "test2" });
122
- childLogger2.send({ category: "generic", eventName: "testEvent" });
123
- assert(sent, "event should be sent");
124
- });
125
- it("Undefined second child namespace", () => {
126
- let sent = false;
127
- const logger = {
128
- send(event) {
129
- if (event.eventName !== "test1:testEvent") {
130
- throw new Error("expected combined namespace");
131
- }
132
- sent = true;
133
- },
134
- };
135
- const childLogger1 = createChildLogger({ logger, namespace: "test1" });
136
- sent = false;
137
- const childLogger2 = createChildLogger({ logger: childLogger1 });
138
- childLogger2.send({ category: "generic", eventName: "testEvent" });
139
- assert(sent, "event should be sent");
140
- });
141
- it("Undefined namespace", () => {
142
- let sent = false;
143
- const logger = {
144
- send(event) {
145
- if (event.eventName !== "testEvent") {
146
- throw new Error("expected combined namespace");
147
- }
148
- sent = true;
149
- },
150
- };
151
- const childLogger1 = createChildLogger({ logger });
152
- sent = false;
153
- const childLogger2 = createChildLogger({ logger: childLogger1 });
154
- childLogger2.send({ category: "generic", eventName: "testEvent" });
155
- assert(sent, "event should be sent");
156
- });
157
- it("should not send events with log level less than minloglevel", () => {
158
- let sent = false;
159
- const logger = {
160
- send(event) {
161
- if (event.eventName !== "testEvent") {
162
- throw new Error("unexpected event");
163
- }
164
- sent = true;
165
- },
166
- minLogLevel: LogLevel.error,
167
- };
168
- const childLogger1 = createChildLogger({ logger });
169
- childLogger1.send({ category: "error", eventName: "testEvent" }, LogLevel.error);
170
- assert(sent, "event should be sent");
171
- sent = false;
172
- childLogger1.send({ category: "generic", eventName: "testEvent" }, LogLevel.default);
173
- assert(!sent, "event should not be sent");
174
- });
175
- it("should receive verbose events with min loglevel set as verbose", () => {
176
- let sent = false;
177
- const logger = {
178
- send(event) {
179
- if (event.eventName !== "testEvent") {
180
- throw new Error("unexpected event");
181
- }
182
- sent = true;
183
- },
184
- minLogLevel: LogLevel.verbose,
185
- };
186
- const childLogger1 = createChildLogger({ logger });
187
- childLogger1.send({ category: "generic", eventName: "testEvent" }, LogLevel.verbose);
188
- assert(sent, "event should be sent");
189
- sent = false;
190
- childLogger1.send({ category: "error", eventName: "testEvent" });
191
- assert(sent, "default event should be sent");
192
- });
193
- it("should not receive verbose events with no min loglevel", () => {
194
- let sent = false;
195
- const logger = {
196
- send(event) {
197
- if (event.eventName !== "testEvent") {
198
- throw new Error("unexpected event");
199
- }
200
- sent = true;
201
- },
202
- };
203
- const childLogger1 = createChildLogger({ logger });
204
- childLogger1.send({ category: "error", eventName: "testEvent" });
205
- assert(sent, "default event should be sent");
206
- sent = false;
207
- childLogger1.send({ category: "generic", eventName: "testEvent" }, LogLevel.verbose);
208
- assert(!sent, "event should not be sent");
209
- });
210
- it("should be able to send events correctly according to loglevel if multisink logger is used inside childlogger", () => {
211
- let sent = false;
212
- const logger1 = {
213
- send(event) {
214
- if (event.eventName !== "testEvent") {
215
- throw new Error("unexpected event");
216
- }
217
- sent = true;
218
- },
219
- minLogLevel: LogLevel.default,
220
- };
221
- const multiSinkLogger = createMultiSinkLogger({
222
- loggers: [logger1, new MockLogger(LogLevel.error)],
223
- });
224
- const childLogger1 = createChildLogger({
225
- logger: multiSinkLogger,
226
- });
227
- childLogger1.send({ category: "generic", eventName: "testEvent" }, LogLevel.verbose);
228
- assert(!sent, "verbose event should not be sent");
229
- childLogger1.send({ category: "generic", eventName: "testEvent" }, LogLevel.default);
230
- assert(sent, "verbose event should be sent");
231
- });
232
- });
233
- //# sourceMappingURL=childLogger.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"childLogger.spec.js","sourceRoot":"","sources":["../../src/test/childLogger.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 {\n\tITelemetryBaseEvent,\n\tITelemetryBaseLogger,\n\tLogLevel,\n} from \"@fluidframework/core-interfaces\";\nimport { ChildLogger, createChildLogger, createMultiSinkLogger } from \"../logger.js\";\nimport { MockLogger } from \"../mockLogger.js\";\n\ndescribe(\"ChildLogger\", () => {\n\tit(\"Properties & Getters Propagate\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.testProperty !== true || event.testGetter !== true) {\n\t\t\t\t\tthrow new Error(\"expected testProperty and testGetter on event\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = ChildLogger.create(logger, \"test1\", {\n\t\t\tall: {\n\t\t\t\ttestProperty: true,\n\t\t\t\ttestGetter: () => true,\n\t\t\t},\n\t\t});\n\n\t\tchildLogger1.send({ category: \"generic\", eventName: \"test1\" });\n\t\tassert(sent, \"event should be sent\");\n\n\t\tsent = false;\n\t\tconst childLogger2 = createChildLogger({ logger: childLogger1, namespace: \"test2\" });\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"test2\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"Undefined initial Properties and Getter\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.testProperty !== true || event.testGetter !== true) {\n\t\t\t\t\tthrow new Error(\"expected testProperty and testGetter on event\");\n\t\t\t\t}\n\t\t\t\tif (event.eventName !== \"test1:test2:testEvent\") {\n\t\t\t\t\tthrow new Error(\"expected combined namespace\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger, namespace: \"test1\" });\n\n\t\tsent = false;\n\t\tconst childLogger2 = ChildLogger.create(childLogger1, \"test2\", {\n\t\t\tall: {\n\t\t\t\ttestProperty: true,\n\t\t\t\ttestGetter: () => true,\n\t\t\t},\n\t\t});\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"testEvent\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"Properties Are Combined\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.testProperty1 !== true || event.testProperty2 !== true) {\n\t\t\t\t\tthrow new Error(\"expected testProperty1 and testProperty2 on event\");\n\t\t\t\t}\n\t\t\t\tif (event.eventName !== \"test1:test2:testEvent\") {\n\t\t\t\t\tthrow new Error(\"expected combined namespace\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = ChildLogger.create(logger, \"test1\", {\n\t\t\tall: {\n\t\t\t\ttestProperty1: true,\n\t\t\t},\n\t\t});\n\n\t\tconst childLogger2 = ChildLogger.create(childLogger1, \"test2\", {\n\t\t\tall: {\n\t\t\t\ttestProperty2: true,\n\t\t\t},\n\t\t});\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"testEvent\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"Getters Are Combined\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.testGetter1 !== true || event.testGetter2 !== true) {\n\t\t\t\t\tthrow new Error(\"expected testGetter1 and testGetter2 on event\");\n\t\t\t\t}\n\t\t\t\tif (event.eventName !== \"test1:test2:testEvent\") {\n\t\t\t\t\tthrow new Error(\"expected combined namespace\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = ChildLogger.create(logger, \"test1\", {\n\t\t\tall: {\n\t\t\t\ttestGetter1: () => true,\n\t\t\t},\n\t\t});\n\n\t\tconst childLogger2 = ChildLogger.create(childLogger1, \"test2\", {\n\t\t\tall: {\n\t\t\t\ttestGetter2: () => true,\n\t\t\t},\n\t\t});\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"testEvent\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"Undefined initial namespace\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"test2:testEvent\") {\n\t\t\t\t\tthrow new Error(\"expected combined namespace\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger });\n\n\t\tsent = false;\n\t\tconst childLogger2 = createChildLogger({ logger: childLogger1, namespace: \"test2\" });\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"testEvent\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"Undefined second child namespace\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"test1:testEvent\") {\n\t\t\t\t\tthrow new Error(\"expected combined namespace\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger, namespace: \"test1\" });\n\n\t\tsent = false;\n\t\tconst childLogger2 = createChildLogger({ logger: childLogger1 });\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"testEvent\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"Undefined namespace\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"testEvent\") {\n\t\t\t\t\tthrow new Error(\"expected combined namespace\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger });\n\n\t\tsent = false;\n\t\tconst childLogger2 = createChildLogger({ logger: childLogger1 });\n\n\t\tchildLogger2.send({ category: \"generic\", eventName: \"testEvent\" });\n\t\tassert(sent, \"event should be sent\");\n\t});\n\n\tit(\"should not send events with log level less than minloglevel\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"testEvent\") {\n\t\t\t\t\tthrow new Error(\"unexpected event\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\n\t\t\tminLogLevel: LogLevel.error,\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger });\n\n\t\tchildLogger1.send({ category: \"error\", eventName: \"testEvent\" }, LogLevel.error);\n\t\tassert(sent, \"event should be sent\");\n\n\t\tsent = false;\n\t\tchildLogger1.send({ category: \"generic\", eventName: \"testEvent\" }, LogLevel.default);\n\t\tassert(!sent, \"event should not be sent\");\n\t});\n\n\tit(\"should receive verbose events with min loglevel set as verbose\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"testEvent\") {\n\t\t\t\t\tthrow new Error(\"unexpected event\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\n\t\t\tminLogLevel: LogLevel.verbose,\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger });\n\n\t\tchildLogger1.send({ category: \"generic\", eventName: \"testEvent\" }, LogLevel.verbose);\n\t\tassert(sent, \"event should be sent\");\n\n\t\tsent = false;\n\t\tchildLogger1.send({ category: \"error\", eventName: \"testEvent\" });\n\t\tassert(sent, \"default event should be sent\");\n\t});\n\n\tit(\"should not receive verbose events with no min loglevel\", () => {\n\t\tlet sent = false;\n\t\tconst logger: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"testEvent\") {\n\t\t\t\t\tthrow new Error(\"unexpected event\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t};\n\t\tconst childLogger1 = createChildLogger({ logger });\n\n\t\tchildLogger1.send({ category: \"error\", eventName: \"testEvent\" });\n\t\tassert(sent, \"default event should be sent\");\n\n\t\tsent = false;\n\t\tchildLogger1.send({ category: \"generic\", eventName: \"testEvent\" }, LogLevel.verbose);\n\t\tassert(!sent, \"event should not be sent\");\n\t});\n\n\tit(\"should be able to send events correctly according to loglevel if multisink logger is used inside childlogger\", () => {\n\t\tlet sent = false;\n\t\tconst logger1: ITelemetryBaseLogger = {\n\t\t\tsend(event: ITelemetryBaseEvent): void {\n\t\t\t\tif (event.eventName !== \"testEvent\") {\n\t\t\t\t\tthrow new Error(\"unexpected event\");\n\t\t\t\t}\n\t\t\t\tsent = true;\n\t\t\t},\n\t\t\tminLogLevel: LogLevel.default,\n\t\t};\n\t\tconst multiSinkLogger = createMultiSinkLogger({\n\t\t\tloggers: [logger1, new MockLogger(LogLevel.error)],\n\t\t});\n\t\tconst childLogger1 = createChildLogger({\n\t\t\tlogger: multiSinkLogger,\n\t\t});\n\n\t\tchildLogger1.send({ category: \"generic\", eventName: \"testEvent\" }, LogLevel.verbose);\n\t\tassert(!sent, \"verbose event should not be sent\");\n\n\t\tchildLogger1.send({ category: \"generic\", eventName: \"testEvent\" }, LogLevel.default);\n\t\tassert(sent, \"verbose event should be sent\");\n\t});\n});\n"]}
@@ -1,229 +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 { CachedConfigProvider, inMemoryConfigProvider, wrapConfigProviderWithDefaults, } from "../config.js";
7
- import { TelemetryDataTag } from "../logger.js";
8
- import { MockLogger } from "../mockLogger.js";
9
- const getMockStore = (settings) => {
10
- const ops = [];
11
- return {
12
- getItem: (key) => {
13
- ops.push(key);
14
- return settings[key];
15
- },
16
- getOps: () => ops,
17
- length: Object.keys(settings).length,
18
- clear: () => { },
19
- // eslint-disable-next-line unicorn/no-null
20
- key: (_index) => null,
21
- removeItem: (_key) => { },
22
- setItem: (_key, _value) => { },
23
- };
24
- };
25
- const untypedProvider = (settings) => {
26
- return {
27
- getRawConfig: (name) => settings[name],
28
- };
29
- };
30
- describe("Config", () => {
31
- it("Typing - storage provider", () => {
32
- const settings = {
33
- number: "1",
34
- badNumber: "{1}",
35
- stringAndNumber: "1",
36
- stringAndBoolean: "true",
37
- string: "string",
38
- boolean: "true",
39
- badBoolean: "truthy",
40
- numberArray: `[1, 2, 3]`,
41
- badNumberArray: `["one", "two", "three"]`,
42
- stringArray: `["1", "2", "3"]`,
43
- badStringArray: "1",
44
- booleanArray: "[true, false, true]",
45
- BadBooleanArray: "[true, 1, true]",
46
- };
47
- const mockStore = getMockStore(settings);
48
- const logger = new MockLogger();
49
- const config = new CachedConfigProvider(logger, inMemoryConfigProvider(mockStore));
50
- assert.equal(config.getNumber("number"), 1);
51
- logger.assertMatch([
52
- {
53
- category: "generic",
54
- eventName: "ConfigRead",
55
- configName: { tag: TelemetryDataTag.CodeArtifact, value: "number" },
56
- configValue: {
57
- tag: TelemetryDataTag.CodeArtifact,
58
- value: `{"raw":"1","string":"1","number":1}`,
59
- },
60
- },
61
- ]);
62
- assert.equal(config.getNumber("badNumber"), undefined);
63
- assert.equal(config.getNumber("stringAndNumber"), 1);
64
- assert.equal(config.getString("stringAndNumber"), "1");
65
- assert.equal(config.getString("stringAndBoolean"), "true");
66
- assert.equal(config.getString("string"), "string");
67
- assert.equal(config.getBoolean("boolean"), true);
68
- assert.equal(config.getBoolean("badBoolean"), undefined);
69
- assert.equal(config.getBoolean("stringAndBoolean"), true);
70
- assert.deepEqual(config.getNumberArray("numberArray"), [1, 2, 3]);
71
- assert.equal(config.getNumberArray("badNumberArray"), undefined);
72
- assert.deepEqual(config.getStringArray("stringArray"), ["1", "2", "3"]);
73
- assert.equal(config.getStringArray("badStringArray"), undefined);
74
- assert.deepEqual(config.getBooleanArray("booleanArray"), [true, false, true]);
75
- assert.equal(config.getBooleanArray("BadBooleanArray"), undefined);
76
- });
77
- it("Typing - custom provider", () => {
78
- const settings = {
79
- number: 1,
80
- badNumber: "{1}",
81
- stringAndNumber: "1",
82
- stringAndBoolean: "true",
83
- string: "string",
84
- badString: [],
85
- boolean: "true",
86
- badBoolean: "truthy",
87
- numberArray: `[1, 2, 3]`,
88
- badNumberArray: ["one", "two", "three"],
89
- stringArray: `["1", "2", "3"]`,
90
- badStringArray: "1",
91
- booleanArray: [true, false, true],
92
- badBooleanArray: [1, 2, 3],
93
- badBooleanArray2: ["true", "false", "true"],
94
- };
95
- const mockStore = untypedProvider(settings);
96
- const config = new CachedConfigProvider(undefined, mockStore);
97
- assert.equal(config.getNumber("number"), 1);
98
- assert.equal(config.getNumber("stringAndNumber"), 1);
99
- assert.equal(config.getNumber("badNumber"), undefined);
100
- assert.equal(config.getString("stringAndNumber"), "1");
101
- assert.equal(config.getString("stringAndBoolean"), "true");
102
- assert.equal(config.getString("string"), "string");
103
- assert.equal(config.getString("badString"), undefined);
104
- assert.equal(config.getBoolean("boolean"), true);
105
- assert.equal(config.getBoolean("badBoolean"), undefined);
106
- assert.equal(config.getBoolean("stringAndBoolean"), true);
107
- assert.deepEqual(config.getNumberArray("numberArray"), [1, 2, 3]);
108
- assert.equal(config.getNumberArray("badNumberArray"), undefined);
109
- assert.deepEqual(config.getStringArray("stringArray"), ["1", "2", "3"]);
110
- assert.equal(config.getStringArray("badStringArray"), undefined);
111
- assert.deepEqual(config.getBooleanArray("booleanArray"), [true, false, true]);
112
- assert.equal(config.getBooleanArray("badBooleanArray"), undefined);
113
- assert.equal(config.getBooleanArray("badBooleanArray2"), undefined);
114
- });
115
- it("Void provider", () => {
116
- const config = new CachedConfigProvider(undefined, inMemoryConfigProvider(undefined));
117
- assert.equal(config.getNumber("number"), undefined);
118
- assert.equal(config.getString("does not exist"), undefined);
119
- assert.equal(config.getBoolean("boolean"), undefined);
120
- });
121
- it("Config priority", () => {
122
- const settings1 = {
123
- number: "1",
124
- string: "string1",
125
- boolean: "true",
126
- featureEnabled: "false",
127
- };
128
- const settings2 = {
129
- number: "2",
130
- string: "string2",
131
- boolean: "false",
132
- number2: "3",
133
- featureEnabled: "true",
134
- };
135
- const settings3 = {
136
- number2: "4",
137
- number3: "4",
138
- featureEnabled: "true",
139
- };
140
- const config1 = new CachedConfigProvider(undefined, inMemoryConfigProvider(getMockStore(settings1)), inMemoryConfigProvider(getMockStore(settings1)), inMemoryConfigProvider(getMockStore(settings2)), inMemoryConfigProvider(getMockStore(settings3)));
141
- assert.equal(config1.getNumber("number"), 1); // from settings1
142
- assert.equal(config1.getString("string"), "string1"); // from settings1
143
- assert.equal(config1.getBoolean("boolean"), true); // from settings1
144
- assert.equal(config1.getNumber("number2"), 3); // from settings2
145
- assert.equal(config1.getNumber("number3"), 4); // from settings3
146
- assert.equal(config1.getBoolean("featureEnabled"), false); // from settings1.BreakGlass
147
- const config2 = new CachedConfigProvider(undefined, inMemoryConfigProvider(getMockStore(settings3)), inMemoryConfigProvider(getMockStore(settings2)), inMemoryConfigProvider(getMockStore(settings1)), inMemoryConfigProvider(getMockStore(settings1)));
148
- assert.equal(config2.getNumber("number"), 2); // from settings2
149
- assert.equal(config2.getString("string"), "string2"); // from settings2
150
- assert.equal(config2.getBoolean("boolean"), false); // from settings2
151
- assert.equal(config2.getNumber("number2"), 4); // from settings3
152
- assert.equal(config2.getNumber("number3"), 4); // from settings3
153
- assert.equal(config1.getBoolean("featureEnabled"), false); // from settings1.BreakGlass
154
- });
155
- class HybridSettingsProvider {
156
- constructor(store) {
157
- this.store = store;
158
- this.SettingsProvider = this;
159
- }
160
- getRawConfig(name) {
161
- // The point here is to use `getSetting`
162
- // eslint-disable-next-line unicorn/no-null
163
- const val = this.getSetting(name, null);
164
- return val ?? undefined;
165
- }
166
- getSetting(settingName, defaultValue, namespace) {
167
- const key = namespace === undefined ? settingName : `${namespace}.${settingName}`;
168
- return this.store[key] ?? defaultValue;
169
- }
170
- }
171
- it("Typing - SettingsProvider", () => {
172
- const settings = {
173
- number: 1,
174
- sortOfNumber: "1",
175
- badNumber: "{1}",
176
- stringAndNumber: "1",
177
- stringAndBoolean: "true",
178
- string: "string",
179
- badString: [],
180
- boolean: "true",
181
- badBoolean: "truthy",
182
- numberArray: `[1, 2, 3]`,
183
- badNumberArray: ["one", "two", "three"],
184
- stringArray: `["1", "2", "3"]`,
185
- badStringArray: "1",
186
- booleanArray: [true, false, true],
187
- badBooleanArray: [1, 2, 3],
188
- badBooleanArray2: ["true", "false", "true"],
189
- };
190
- const config = new CachedConfigProvider(undefined, new HybridSettingsProvider(settings));
191
- assert.equal(config.getNumber("number"), 1);
192
- assert.equal(config.getNumber("sortOfNumber"), 1);
193
- assert.equal(config.getNumber("badNumber"), undefined);
194
- assert.equal(config.getString("stringAndNumber"), "1");
195
- assert.equal(config.getString("stringAndBoolean"), "true");
196
- assert.equal(config.getString("string"), "string");
197
- assert.equal(config.getString("badString"), undefined);
198
- assert.equal(config.getBoolean("boolean"), true);
199
- assert.equal(config.getBoolean("badBoolean"), undefined);
200
- assert.deepEqual(config.getNumberArray("numberArray"), [1, 2, 3]);
201
- assert.equal(config.getNumberArray("badNumberArray"), undefined);
202
- assert.deepEqual(config.getStringArray("stringArray"), ["1", "2", "3"]);
203
- assert.equal(config.getStringArray("badStringArray"), undefined);
204
- assert.deepEqual(config.getBooleanArray("booleanArray"), [true, false, true]);
205
- assert.equal(config.getBooleanArray("badBooleanArray"), undefined);
206
- assert.equal(config.getBooleanArray("badBooleanArray2"), undefined);
207
- });
208
- // #endregion SettingsProvider
209
- });
210
- describe("wrappedConfigProvider", () => {
211
- const configProvider = (featureGates) => ({
212
- getRawConfig: (name) => featureGates[name],
213
- });
214
- it("When there is no original config provider", () => {
215
- const config = wrapConfigProviderWithDefaults(undefined, { "Fluid.Feature.Gate": true });
216
- assert.strictEqual(config.getRawConfig("Fluid.Feature.Gate"), true);
217
- });
218
- it("When the original config provider does not specify the required key", () => {
219
- const config = wrapConfigProviderWithDefaults(configProvider({}), {
220
- "Fluid.Feature.Gate": true,
221
- });
222
- assert.strictEqual(config.getRawConfig("Fluid.Feature.Gate"), true);
223
- });
224
- it("When the original config provider specifies the required key", () => {
225
- const config = wrapConfigProviderWithDefaults(configProvider({ "Fluid.Feature.Gate": false }), { "Fluid.Feature.Gate": true });
226
- assert.strictEqual(config.getRawConfig("Fluid.Feature.Gate"), false);
227
- });
228
- });
229
- //# sourceMappingURL=config.spec.js.map