@fluid-internal/client-utils 2.0.0-dev.6.4.0.191258

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 (149) hide show
  1. package/.eslintrc.js +16 -0
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +3 -0
  4. package/LICENSE +21 -0
  5. package/README.md +70 -0
  6. package/api-extractor.json +16 -0
  7. package/dist/base64Encoding.d.ts +28 -0
  8. package/dist/base64Encoding.d.ts.map +1 -0
  9. package/dist/base64Encoding.js +43 -0
  10. package/dist/base64Encoding.js.map +1 -0
  11. package/dist/bufferBrowser.d.ts +84 -0
  12. package/dist/bufferBrowser.d.ts.map +1 -0
  13. package/dist/bufferBrowser.js +201 -0
  14. package/dist/bufferBrowser.js.map +1 -0
  15. package/dist/bufferNode.d.ts +62 -0
  16. package/dist/bufferNode.d.ts.map +1 -0
  17. package/dist/bufferNode.js +54 -0
  18. package/dist/bufferNode.js.map +1 -0
  19. package/dist/bufferShared.d.ts +12 -0
  20. package/dist/bufferShared.d.ts.map +1 -0
  21. package/dist/bufferShared.js +21 -0
  22. package/dist/bufferShared.js.map +1 -0
  23. package/dist/eventForwarder.d.ts +33 -0
  24. package/dist/eventForwarder.d.ts.map +1 -0
  25. package/dist/eventForwarder.js +98 -0
  26. package/dist/eventForwarder.js.map +1 -0
  27. package/dist/hashFileBrowser.d.ts +30 -0
  28. package/dist/hashFileBrowser.d.ts.map +1 -0
  29. package/dist/hashFileBrowser.js +97 -0
  30. package/dist/hashFileBrowser.js.map +1 -0
  31. package/dist/hashFileNode.d.ts +30 -0
  32. package/dist/hashFileNode.d.ts.map +1 -0
  33. package/dist/hashFileNode.js +66 -0
  34. package/dist/hashFileNode.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +41 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/indexBrowser.d.ts +8 -0
  40. package/dist/indexBrowser.d.ts.map +1 -0
  41. package/dist/indexBrowser.js +19 -0
  42. package/dist/indexBrowser.js.map +1 -0
  43. package/dist/indexNode.d.ts +8 -0
  44. package/dist/indexNode.d.ts.map +1 -0
  45. package/dist/indexNode.js +19 -0
  46. package/dist/indexNode.js.map +1 -0
  47. package/dist/performanceBrowser.d.ts +10 -0
  48. package/dist/performanceBrowser.d.ts.map +1 -0
  49. package/dist/performanceBrowser.js +12 -0
  50. package/dist/performanceBrowser.js.map +1 -0
  51. package/dist/performanceIsomorphic.d.ts +12 -0
  52. package/dist/performanceIsomorphic.d.ts.map +1 -0
  53. package/dist/performanceIsomorphic.js +7 -0
  54. package/dist/performanceIsomorphic.js.map +1 -0
  55. package/dist/performanceNode.d.ts +10 -0
  56. package/dist/performanceNode.d.ts.map +1 -0
  57. package/dist/performanceNode.js +14 -0
  58. package/dist/performanceNode.js.map +1 -0
  59. package/dist/trace.d.ts +40 -0
  60. package/dist/trace.d.ts.map +1 -0
  61. package/dist/trace.js +36 -0
  62. package/dist/trace.js.map +1 -0
  63. package/dist/tsdoc-metadata.json +11 -0
  64. package/dist/typedEventEmitter.d.ts +37 -0
  65. package/dist/typedEventEmitter.d.ts.map +1 -0
  66. package/dist/typedEventEmitter.js +27 -0
  67. package/dist/typedEventEmitter.js.map +1 -0
  68. package/jest-puppeteer.config.js +13 -0
  69. package/jest.config.js +20 -0
  70. package/lib/base64Encoding.d.ts +28 -0
  71. package/lib/base64Encoding.d.ts.map +1 -0
  72. package/lib/base64Encoding.js +37 -0
  73. package/lib/base64Encoding.js.map +1 -0
  74. package/lib/bufferBrowser.d.ts +84 -0
  75. package/lib/bufferBrowser.d.ts.map +1 -0
  76. package/lib/bufferBrowser.js +174 -0
  77. package/lib/bufferBrowser.js.map +1 -0
  78. package/lib/bufferNode.d.ts +62 -0
  79. package/lib/bufferNode.d.ts.map +1 -0
  80. package/lib/bufferNode.js +48 -0
  81. package/lib/bufferNode.js.map +1 -0
  82. package/lib/bufferShared.d.ts +12 -0
  83. package/lib/bufferShared.d.ts.map +1 -0
  84. package/lib/bufferShared.js +17 -0
  85. package/lib/bufferShared.js.map +1 -0
  86. package/lib/eventForwarder.d.ts +33 -0
  87. package/lib/eventForwarder.d.ts.map +1 -0
  88. package/lib/eventForwarder.js +94 -0
  89. package/lib/eventForwarder.js.map +1 -0
  90. package/lib/hashFileBrowser.d.ts +30 -0
  91. package/lib/hashFileBrowser.d.ts.map +1 -0
  92. package/lib/hashFileBrowser.js +73 -0
  93. package/lib/hashFileBrowser.js.map +1 -0
  94. package/lib/hashFileNode.d.ts +30 -0
  95. package/lib/hashFileNode.d.ts.map +1 -0
  96. package/lib/hashFileNode.js +58 -0
  97. package/lib/hashFileNode.js.map +1 -0
  98. package/lib/index.d.ts +20 -0
  99. package/lib/index.d.ts.map +1 -0
  100. package/lib/index.js +21 -0
  101. package/lib/index.js.map +1 -0
  102. package/lib/indexBrowser.d.ts +8 -0
  103. package/lib/indexBrowser.d.ts.map +1 -0
  104. package/lib/indexBrowser.js +8 -0
  105. package/lib/indexBrowser.js.map +1 -0
  106. package/lib/indexNode.d.ts +8 -0
  107. package/lib/indexNode.d.ts.map +1 -0
  108. package/lib/indexNode.js +8 -0
  109. package/lib/indexNode.js.map +1 -0
  110. package/lib/performanceBrowser.d.ts +10 -0
  111. package/lib/performanceBrowser.d.ts.map +1 -0
  112. package/lib/performanceBrowser.js +9 -0
  113. package/lib/performanceBrowser.js.map +1 -0
  114. package/lib/performanceIsomorphic.d.ts +12 -0
  115. package/lib/performanceIsomorphic.d.ts.map +1 -0
  116. package/lib/performanceIsomorphic.js +6 -0
  117. package/lib/performanceIsomorphic.js.map +1 -0
  118. package/lib/performanceNode.d.ts +10 -0
  119. package/lib/performanceNode.d.ts.map +1 -0
  120. package/lib/performanceNode.js +11 -0
  121. package/lib/performanceNode.js.map +1 -0
  122. package/lib/trace.d.ts +40 -0
  123. package/lib/trace.d.ts.map +1 -0
  124. package/lib/trace.js +32 -0
  125. package/lib/trace.js.map +1 -0
  126. package/lib/typedEventEmitter.d.ts +37 -0
  127. package/lib/typedEventEmitter.d.ts.map +1 -0
  128. package/lib/typedEventEmitter.js +23 -0
  129. package/lib/typedEventEmitter.js.map +1 -0
  130. package/package.json +140 -0
  131. package/prettier.config.cjs +8 -0
  132. package/src/base64Encoding.ts +42 -0
  133. package/src/bufferBrowser.ts +198 -0
  134. package/src/bufferNode.ts +80 -0
  135. package/src/bufferShared.ts +17 -0
  136. package/src/eventForwarder.ts +120 -0
  137. package/src/hashFileBrowser.ts +84 -0
  138. package/src/hashFileNode.ts +66 -0
  139. package/src/index.ts +22 -0
  140. package/src/indexBrowser.ts +14 -0
  141. package/src/indexNode.ts +14 -0
  142. package/src/performanceBrowser.ts +11 -0
  143. package/src/performanceIsomorphic.ts +13 -0
  144. package/src/performanceNode.ts +13 -0
  145. package/src/trace.ts +58 -0
  146. package/src/typedEventEmitter.ts +79 -0
  147. package/tsconfig.esnext.json +7 -0
  148. package/tsconfig.json +14 -0
  149. package/types/perf_hooks.d.ts +10 -0
package/src/trace.ts ADDED
@@ -0,0 +1,58 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { performance } from "./indexNode";
7
+
8
+ /**
9
+ * Helper class for tracing performance of events
10
+ * Time measurements are in milliseconds as a floating point with a decimal
11
+ *
12
+ * @internal
13
+ */
14
+ export class Trace {
15
+ public static start(): Trace {
16
+ const startTick = performance.now();
17
+ return new Trace(startTick);
18
+ }
19
+
20
+ protected lastTick: number;
21
+ protected constructor(public readonly startTick: number) {
22
+ this.lastTick = startTick;
23
+ }
24
+
25
+ public trace(): ITraceEvent {
26
+ const tick = performance.now();
27
+ const event = {
28
+ totalTimeElapsed: tick - this.startTick,
29
+ duration: tick - this.lastTick,
30
+ tick,
31
+ };
32
+ this.lastTick = tick;
33
+ return event;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Event in a performance trace including time elapsed.
39
+ *
40
+ * @internal
41
+ */
42
+ export interface ITraceEvent {
43
+ /**
44
+ * Total time elapsed since the start of the Trace.
45
+ * Measured in milliseconds as a floating point with a decimal
46
+ */
47
+ readonly totalTimeElapsed: number;
48
+ /**
49
+ * Time elapsed since the last trace event.
50
+ * Measured in milliseconds as a floating point with a decimal
51
+ */
52
+ readonly duration: number;
53
+ /**
54
+ * This number represents a relative time which should
55
+ * be consistent for all trace ticks.
56
+ */
57
+ readonly tick: number;
58
+ }
@@ -0,0 +1,79 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { EventEmitter } from "events";
7
+ import {
8
+ IEvent,
9
+ TransformedEvent,
10
+ IEventTransformer,
11
+ IEventProvider,
12
+ } from "@fluidframework/core-interfaces";
13
+
14
+ /**
15
+ * The event emitter polyfill and the node event emitter have different event types:
16
+ * string | symbol vs. string | number
17
+ *
18
+ * This type allow us to correctly handle either type
19
+ *
20
+ * @internal
21
+ */
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ export type EventEmitterEventType = EventEmitter extends { on(event: infer E, listener: any) }
24
+ ? E
25
+ : never;
26
+
27
+ /**
28
+ * @internal
29
+ */
30
+ export type TypedEventTransform<TThis, TEvent> =
31
+ // Event emitter supports some special events for the emitter itself to use
32
+ // this exposes those events for the TypedEventEmitter.
33
+ // Since we know what the shape of these events are, we can describe them directly via a TransformedEvent
34
+ // which easier than trying to extend TEvent directly
35
+ TransformedEvent<
36
+ TThis,
37
+ "newListener" | "removeListener",
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ Parameters<(event: string, listener: (...args: any[]) => void) => void>
40
+ > &
41
+ // Expose all the events provides by TEvent
42
+ IEventTransformer<TThis, TEvent & IEvent> &
43
+ // Add the default overload so this is covertable to EventEmitter regardless of environment
44
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ TransformedEvent<TThis, EventEmitterEventType, any[]>;
46
+
47
+ /**
48
+ * Event Emitter helper class the supports emitting typed events
49
+ *
50
+ * @internal
51
+ */
52
+ export class TypedEventEmitter<TEvent>
53
+ extends EventEmitter
54
+ implements IEventProvider<TEvent & IEvent>
55
+ {
56
+ constructor() {
57
+ super();
58
+ this.addListener = super.addListener.bind(this) as TypedEventTransform<this, TEvent>;
59
+ this.on = super.on.bind(this) as TypedEventTransform<this, TEvent>;
60
+ this.once = super.once.bind(this) as TypedEventTransform<this, TEvent>;
61
+ this.prependListener = super.prependListener.bind(this) as TypedEventTransform<
62
+ this,
63
+ TEvent
64
+ >;
65
+ this.prependOnceListener = super.prependOnceListener.bind(this) as TypedEventTransform<
66
+ this,
67
+ TEvent
68
+ >;
69
+ this.removeListener = super.removeListener.bind(this) as TypedEventTransform<this, TEvent>;
70
+ this.off = super.off.bind(this) as TypedEventTransform<this, TEvent>;
71
+ }
72
+ readonly addListener: TypedEventTransform<this, TEvent>;
73
+ readonly on: TypedEventTransform<this, TEvent>;
74
+ readonly once: TypedEventTransform<this, TEvent>;
75
+ readonly prependListener: TypedEventTransform<this, TEvent>;
76
+ readonly prependOnceListener: TypedEventTransform<this, TEvent>;
77
+ readonly removeListener: TypedEventTransform<this, TEvent>;
78
+ readonly off: TypedEventTransform<this, TEvent>;
79
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./lib",
5
+ "module": "esnext",
6
+ },
7
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "@fluidframework/build-common/ts-common-config.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src",
5
+ "outDir": "./dist",
6
+ "composite": true,
7
+ "baseUrl": ".",
8
+ "paths": {
9
+ "perf_hooks": ["types/perf_hooks.d.ts"],
10
+ },
11
+ },
12
+ "include": ["src/**/*"],
13
+ "exclude": ["src/test/**/*"],
14
+ }
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /* eslint-disable unicorn/filename-case */
7
+ // This is needed instead of adding "node" to tsconfig types list.
8
+ declare module "perf_hooks" {
9
+ export const performance: import("../src/performanceIsomorphic").IsomorphicPerformance;
10
+ }