@fluid-internal/client-utils 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.246488

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 (155) hide show
  1. package/.eslintrc.cjs +1 -1
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +4 -0
  4. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  5. package/api-extractor-lint.json +1 -1
  6. package/api-extractor.json +1 -1
  7. package/api-report/client-utils.api.md +8 -27
  8. package/dist/base64Encoding.js +4 -4
  9. package/dist/base64Encoding.js.map +1 -1
  10. package/dist/client-utils-alpha.d.ts +6 -11
  11. package/dist/client-utils-beta.d.ts +5 -11
  12. package/dist/client-utils-public.d.ts +5 -11
  13. package/dist/client-utils-untrimmed.d.ts +9 -39
  14. package/dist/eventEmitter.cjs +11 -0
  15. package/dist/eventEmitter.cjs.map +1 -0
  16. package/{lib/index.d.mts → dist/eventEmitter.d.cts} +2 -2
  17. package/dist/eventEmitter.d.cts.map +1 -0
  18. package/dist/hashFileBrowser.d.ts +1 -1
  19. package/dist/hashFileBrowser.d.ts.map +1 -1
  20. package/dist/hashFileBrowser.js +2 -2
  21. package/dist/hashFileBrowser.js.map +1 -1
  22. package/dist/hashFileNode.d.ts +1 -1
  23. package/dist/hashFileNode.d.ts.map +1 -1
  24. package/dist/hashFileNode.js.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/indexBrowser.d.ts +9 -9
  30. package/dist/indexBrowser.d.ts.map +1 -1
  31. package/dist/indexBrowser.js +24 -24
  32. package/dist/indexBrowser.js.map +1 -1
  33. package/dist/indexNode.d.ts +10 -10
  34. package/dist/indexNode.d.ts.map +1 -1
  35. package/dist/indexNode.js +23 -23
  36. package/dist/indexNode.js.map +1 -1
  37. package/dist/package.json +7 -0
  38. package/dist/trace.js +3 -3
  39. package/dist/trace.js.map +1 -1
  40. package/dist/tsdoc-metadata.json +1 -1
  41. package/dist/typedEventEmitter.d.ts +3 -6
  42. package/dist/typedEventEmitter.d.ts.map +1 -1
  43. package/dist/typedEventEmitter.js +2 -4
  44. package/dist/typedEventEmitter.js.map +1 -1
  45. package/{jest-puppeteer.config.js → jest-puppeteer.config.cjs} +4 -1
  46. package/{jest.config.js → jest.config.cjs} +1 -0
  47. package/lib/{base64Encoding.d.mts → base64Encoding.d.ts} +1 -1
  48. package/lib/base64Encoding.d.ts.map +1 -0
  49. package/lib/{base64Encoding.mjs → base64Encoding.js} +2 -2
  50. package/lib/base64Encoding.js.map +1 -0
  51. package/lib/{bufferBrowser.d.mts → bufferBrowser.d.ts} +1 -1
  52. package/lib/bufferBrowser.d.ts.map +1 -0
  53. package/lib/{bufferBrowser.mjs → bufferBrowser.js} +1 -1
  54. package/lib/bufferBrowser.js.map +1 -0
  55. package/lib/{bufferNode.d.mts → bufferNode.d.ts} +1 -1
  56. package/lib/bufferNode.d.ts.map +1 -0
  57. package/lib/{bufferNode.mjs → bufferNode.js} +1 -1
  58. package/lib/bufferNode.js.map +1 -0
  59. package/lib/{bufferShared.d.mts → bufferShared.d.ts} +1 -1
  60. package/lib/bufferShared.d.ts.map +1 -0
  61. package/lib/{bufferShared.mjs → bufferShared.js} +1 -1
  62. package/lib/bufferShared.js.map +1 -0
  63. package/lib/{client-utils-alpha.d.mts → client-utils-alpha.d.ts} +6 -11
  64. package/lib/{client-utils-public.d.mts → client-utils-beta.d.ts} +5 -11
  65. package/lib/{client-utils-beta.d.mts → client-utils-public.d.ts} +5 -11
  66. package/lib/{client-utils-untrimmed.d.mts → client-utils-untrimmed.d.ts} +9 -39
  67. package/lib/eventEmitter.cjs +11 -0
  68. package/lib/eventEmitter.cjs.map +1 -0
  69. package/lib/eventEmitter.d.cts +6 -0
  70. package/lib/eventEmitter.d.cts.map +1 -0
  71. package/lib/{hashFileNode.d.mts → hashFileBrowser.d.ts} +2 -2
  72. package/lib/hashFileBrowser.d.ts.map +1 -0
  73. package/lib/{hashFileBrowser.mjs → hashFileBrowser.js} +5 -3
  74. package/lib/{hashFileBrowser.mjs.map → hashFileBrowser.js.map} +1 -1
  75. package/lib/{hashFileBrowser.d.mts → hashFileNode.d.ts} +2 -2
  76. package/lib/hashFileNode.d.ts.map +1 -0
  77. package/lib/{hashFileNode.mjs → hashFileNode.js} +1 -1
  78. package/lib/hashFileNode.js.map +1 -0
  79. package/lib/{index.mjs → index.d.ts} +2 -2
  80. package/lib/index.d.ts.map +1 -0
  81. package/lib/index.js +10 -0
  82. package/lib/index.js.map +1 -0
  83. package/lib/indexBrowser.d.ts +14 -0
  84. package/lib/indexBrowser.d.ts.map +1 -0
  85. package/lib/indexBrowser.js +13 -0
  86. package/lib/indexBrowser.js.map +1 -0
  87. package/lib/indexNode.d.ts +15 -0
  88. package/lib/indexNode.d.ts.map +1 -0
  89. package/lib/indexNode.js +13 -0
  90. package/lib/indexNode.js.map +1 -0
  91. package/lib/{performanceIsomorphic.d.mts → performanceIsomorphic.d.ts} +1 -1
  92. package/lib/performanceIsomorphic.d.ts.map +1 -0
  93. package/lib/{performanceIsomorphic.mjs → performanceIsomorphic.js} +1 -1
  94. package/lib/performanceIsomorphic.js.map +1 -0
  95. package/lib/test/mocha/typedEventEmitter.spec.js +43 -0
  96. package/lib/test/mocha/typedEventEmitter.spec.js.map +1 -0
  97. package/lib/test/types/validateClientUtilsPrevious.generated.js +42 -0
  98. package/lib/test/types/validateClientUtilsPrevious.generated.js.map +1 -0
  99. package/lib/{trace.d.mts → trace.d.ts} +1 -1
  100. package/lib/trace.d.ts.map +1 -0
  101. package/lib/{trace.mjs → trace.js} +2 -2
  102. package/lib/trace.js.map +1 -0
  103. package/lib/{typedEventEmitter.d.mts → typedEventEmitter.d.ts} +4 -7
  104. package/lib/typedEventEmitter.d.ts.map +1 -0
  105. package/lib/{typedEventEmitter.mjs → typedEventEmitter.js} +2 -2
  106. package/lib/typedEventEmitter.js.map +1 -0
  107. package/package.json +50 -35
  108. package/src/base64Encoding.ts +1 -1
  109. package/src/cjs/package.json +7 -0
  110. package/src/eventEmitter.cts +7 -0
  111. package/src/hashFileBrowser.ts +1 -1
  112. package/src/hashFileNode.ts +1 -1
  113. package/src/index.ts +1 -1
  114. package/src/indexBrowser.ts +13 -9
  115. package/src/indexNode.ts +14 -10
  116. package/src/trace.ts +1 -1
  117. package/src/typedEventEmitter.ts +3 -8
  118. package/tsconfig.cjs.json +7 -0
  119. package/tsconfig.json +4 -7
  120. package/dist/eventForwarder.d.ts +0 -34
  121. package/dist/eventForwarder.d.ts.map +0 -1
  122. package/dist/eventForwarder.js +0 -98
  123. package/dist/eventForwarder.js.map +0 -1
  124. package/lib/base64Encoding.d.mts.map +0 -1
  125. package/lib/base64Encoding.mjs.map +0 -1
  126. package/lib/bufferBrowser.d.mts.map +0 -1
  127. package/lib/bufferBrowser.mjs.map +0 -1
  128. package/lib/bufferNode.d.mts.map +0 -1
  129. package/lib/bufferNode.mjs.map +0 -1
  130. package/lib/bufferShared.d.mts.map +0 -1
  131. package/lib/bufferShared.mjs.map +0 -1
  132. package/lib/eventForwarder.d.mts +0 -34
  133. package/lib/eventForwarder.d.mts.map +0 -1
  134. package/lib/eventForwarder.mjs +0 -94
  135. package/lib/eventForwarder.mjs.map +0 -1
  136. package/lib/hashFileBrowser.d.mts.map +0 -1
  137. package/lib/hashFileNode.d.mts.map +0 -1
  138. package/lib/hashFileNode.mjs.map +0 -1
  139. package/lib/index.d.mts.map +0 -1
  140. package/lib/index.mjs.map +0 -1
  141. package/lib/indexBrowser.d.mts +0 -14
  142. package/lib/indexBrowser.d.mts.map +0 -1
  143. package/lib/indexBrowser.mjs +0 -13
  144. package/lib/indexBrowser.mjs.map +0 -1
  145. package/lib/indexNode.d.mts +0 -15
  146. package/lib/indexNode.d.mts.map +0 -1
  147. package/lib/indexNode.mjs +0 -13
  148. package/lib/indexNode.mjs.map +0 -1
  149. package/lib/performanceIsomorphic.d.mts.map +0 -1
  150. package/lib/performanceIsomorphic.mjs.map +0 -1
  151. package/lib/trace.d.mts.map +0 -1
  152. package/lib/trace.mjs.map +0 -1
  153. package/lib/typedEventEmitter.d.mts.map +0 -1
  154. package/lib/typedEventEmitter.mjs.map +0 -1
  155. package/src/eventForwarder.ts +0 -122
@@ -1 +0,0 @@
1
- {"version":3,"file":"eventForwarder.d.mts","sourceRoot":"","sources":["../src/eventForwarder.ts"],"names":[],"mappings":"AAAA;;;GAGG;;OAII,EAAE,YAAY,EAAE,MAAM,QAAQ;OAC9B,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,iCAAiC;OAC9E,EAAE,iBAAiB,EAAE;AAE5B;;;;;;GAMG;AACH,qBAAa,cAAc,CAAC,MAAM,GAAG,MAAM,CAC1C,SAAQ,iBAAiB,CAAC,MAAM,CAChC,YAAW,WAAW;IAEtB,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAoB;IAE/D;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IACD,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG7B;gBAEQ,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;IAcnE;;OAEG;IACI,OAAO,IAAI,IAAI;IAetB,SAAS,CAAC,YAAY,CACrB,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EACtD,GAAG,MAAM,EAAE,MAAM,EAAE,GACjB,IAAI;IAqBP,SAAS,CAAC,cAAc,CACvB,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EACtD,GAAG,MAAM,EAAE,MAAM,EAAE,GACjB,IAAI;CAiBP"}
@@ -1,94 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { TypedEventEmitter } from "./typedEventEmitter.mjs";
6
- /**
7
- * Base class used for forwarding events from a source EventEmitter.
8
- * This can be useful when all arbitrary listeners need to be removed,
9
- * but the primary source needs to stay intact.
10
- *
11
- * @internal
12
- */
13
- export class EventForwarder extends TypedEventEmitter {
14
- static isEmitterEvent(event) {
15
- return (event === EventForwarder.newListenerEvent ||
16
- event === EventForwarder.removeListenerEvent);
17
- }
18
- /**
19
- * {@inheritDoc @fluidframework/core-interfaces#IDisposable.disposed}
20
- */
21
- get disposed() {
22
- return this.isDisposed;
23
- }
24
- constructor(source) {
25
- super();
26
- this.isDisposed = false;
27
- this.forwardingEvents = new Map();
28
- if (source !== undefined) {
29
- // NewListener event is raised whenever someone starts listening to this events, so
30
- // we keep track of events being listened to, and start forwarding from the source
31
- // event emitter per event listened to on this
32
- const removeListenerHandler = (event) => this.unforwardEvent(source, event);
33
- const newListenerHandler = (event) => this.forwardEvent(source, event);
34
- this.on(EventForwarder.removeListenerEvent, removeListenerHandler);
35
- this.on(EventForwarder.newListenerEvent, newListenerHandler);
36
- }
37
- }
38
- /**
39
- * {@inheritDoc @fluidframework/core-interfaces#IDisposable.dispose}
40
- */
41
- dispose() {
42
- this.isDisposed = true;
43
- for (const listenerRemovers of this.forwardingEvents.values()) {
44
- for (const listenerRemover of listenerRemovers.values()) {
45
- try {
46
- listenerRemover();
47
- }
48
- catch {
49
- // Should be fine because of removeAllListeners below
50
- }
51
- }
52
- }
53
- this.removeAllListeners();
54
- this.forwardingEvents.clear();
55
- }
56
- forwardEvent(source, ...events) {
57
- for (const event of events) {
58
- if (source !== undefined &&
59
- event !== undefined &&
60
- !EventForwarder.isEmitterEvent(event)) {
61
- let sources = this.forwardingEvents.get(event);
62
- if (sources === undefined) {
63
- sources = new Map();
64
- this.forwardingEvents.set(event, sources);
65
- }
66
- if (!sources.has(source)) {
67
- const listener = (...args) => this.emit(event, ...args);
68
- sources.set(source, () => source.off(event, listener));
69
- source.on(event, listener);
70
- }
71
- }
72
- }
73
- }
74
- unforwardEvent(source, ...events) {
75
- for (const event of events) {
76
- if (event !== undefined && !EventForwarder.isEmitterEvent(event)) {
77
- const sources = this.forwardingEvents.get(event);
78
- if (sources?.has(source) === true && this.listenerCount(event) === 0) {
79
- const listenerRemover = sources.get(source);
80
- if (listenerRemover !== undefined) {
81
- listenerRemover();
82
- }
83
- sources.delete(source);
84
- if (sources.size === 0) {
85
- this.forwardingEvents.delete(event);
86
- }
87
- }
88
- }
89
- }
90
- }
91
- }
92
- EventForwarder.newListenerEvent = "newListener";
93
- EventForwarder.removeListenerEvent = "removeListener";
94
- //# sourceMappingURL=eventForwarder.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eventForwarder.mjs","sourceRoot":"","sources":["../src/eventForwarder.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\n// False positive: this is an import from the `events` package, not from Node.\n// eslint-disable-next-line unicorn/prefer-node-protocol\nimport { EventEmitter } from \"events\";\nimport { IDisposable, IEvent, IEventProvider } from \"@fluidframework/core-interfaces\";\nimport { TypedEventEmitter } from \"./typedEventEmitter\";\n\n/**\n * Base class used for forwarding events from a source EventEmitter.\n * This can be useful when all arbitrary listeners need to be removed,\n * but the primary source needs to stay intact.\n *\n * @internal\n */\nexport class EventForwarder<TEvent = IEvent>\n\textends TypedEventEmitter<TEvent>\n\timplements IDisposable\n{\n\tprotected static isEmitterEvent(event: string): boolean {\n\t\treturn (\n\t\t\tevent === EventForwarder.newListenerEvent ||\n\t\t\tevent === EventForwarder.removeListenerEvent\n\t\t);\n\t}\n\n\tprivate static readonly newListenerEvent = \"newListener\";\n\tprivate static readonly removeListenerEvent = \"removeListener\";\n\n\t/**\n\t * {@inheritDoc @fluidframework/core-interfaces#IDisposable.disposed}\n\t */\n\tpublic get disposed(): boolean {\n\t\treturn this.isDisposed;\n\t}\n\tprivate isDisposed: boolean = false;\n\n\tprivate readonly forwardingEvents = new Map<\n\t\tstring,\n\t\tMap<EventEmitter | IEventProvider<TEvent & IEvent>, () => void>\n\t>();\n\n\tconstructor(source?: EventEmitter | IEventProvider<TEvent & IEvent>) {\n\t\tsuper();\n\t\tif (source !== undefined) {\n\t\t\t// NewListener event is raised whenever someone starts listening to this events, so\n\t\t\t// we keep track of events being listened to, and start forwarding from the source\n\t\t\t// event emitter per event listened to on this\n\t\t\tconst removeListenerHandler = (event: string): void =>\n\t\t\t\tthis.unforwardEvent(source, event);\n\t\t\tconst newListenerHandler = (event: string): void => this.forwardEvent(source, event);\n\t\t\tthis.on(EventForwarder.removeListenerEvent, removeListenerHandler);\n\t\t\tthis.on(EventForwarder.newListenerEvent, newListenerHandler);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/core-interfaces#IDisposable.dispose}\n\t */\n\tpublic dispose(): void {\n\t\tthis.isDisposed = true;\n\t\tfor (const listenerRemovers of this.forwardingEvents.values()) {\n\t\t\tfor (const listenerRemover of listenerRemovers.values()) {\n\t\t\t\ttry {\n\t\t\t\t\tlistenerRemover();\n\t\t\t\t} catch {\n\t\t\t\t\t// Should be fine because of removeAllListeners below\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.removeAllListeners();\n\t\tthis.forwardingEvents.clear();\n\t}\n\n\tprotected forwardEvent(\n\t\tsource: EventEmitter | IEventProvider<TEvent & IEvent>,\n\t\t...events: string[]\n\t): void {\n\t\tfor (const event of events) {\n\t\t\tif (\n\t\t\t\tsource !== undefined &&\n\t\t\t\tevent !== undefined &&\n\t\t\t\t!EventForwarder.isEmitterEvent(event)\n\t\t\t) {\n\t\t\t\tlet sources = this.forwardingEvents.get(event);\n\t\t\t\tif (sources === undefined) {\n\t\t\t\t\tsources = new Map();\n\t\t\t\t\tthis.forwardingEvents.set(event, sources);\n\t\t\t\t}\n\t\t\t\tif (!sources.has(source)) {\n\t\t\t\t\tconst listener = (...args: unknown[]): boolean => this.emit(event, ...args);\n\t\t\t\t\tsources.set(source, () => source.off(event, listener));\n\t\t\t\t\tsource.on(event, listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected unforwardEvent(\n\t\tsource: EventEmitter | IEventProvider<TEvent & IEvent>,\n\t\t...events: string[]\n\t): void {\n\t\tfor (const event of events) {\n\t\t\tif (event !== undefined && !EventForwarder.isEmitterEvent(event)) {\n\t\t\t\tconst sources = this.forwardingEvents.get(event);\n\t\t\t\tif (sources?.has(source) === true && this.listenerCount(event) === 0) {\n\t\t\t\t\tconst listenerRemover = sources.get(source);\n\t\t\t\t\tif (listenerRemover !== undefined) {\n\t\t\t\t\t\tlistenerRemover();\n\t\t\t\t\t}\n\t\t\t\t\tsources.delete(source);\n\t\t\t\t\tif (sources.size === 0) {\n\t\t\t\t\t\tthis.forwardingEvents.delete(event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hashFileBrowser.d.mts","sourceRoot":"","sources":["../src/hashFileBrowser.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAGI,EAAE,SAAS,EAAE;AAyBpB;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAC7B,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,OAAO,GAAG,SAAmB,EACxC,YAAY,GAAE,KAAK,GAAG,QAAgB,GACpC,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hashFileNode.d.mts","sourceRoot":"","sources":["../src/hashFileNode.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAII,KAAK,EAAE,SAAS,EAAE;AAEzB;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAC7B,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,OAAO,GAAG,SAAmB,EACxC,YAAY,GAAE,KAAK,GAAG,QAAgB,GACpC,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hashFileNode.mjs","sourceRoot":"","sources":["../src/hashFileNode.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ;AAIrC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,IAAe,EACf,YAAiC,OAAO,EACxC,eAAiC,KAAK;IAEtC,IAAI,MAAM,CAAC;IACX,wCAAwC;IACxC,QAAQ,SAAS,EAAE;QAClB,KAAK,OAAO,CAAC,CAAC;YACb,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACpB,MAAM;SACN;QACD,KAAK,SAAS,CAAC,CAAC;YACf,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM;SACN;KACD;IACD,yGAAyG;IACzG,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAW,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAe;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IAC7B,qDAAqD;IACrD,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { sha1, sha256 } from \"sha.js\";\n\nimport type { IsoBuffer } from \"./bufferNode\";\n\n/**\n * Hash a file. Consistent within a session, but should not be persisted and\n * is not consistent with git.\n * If called under an insecure context for a browser, this will fallback to\n * using the node implementation.\n *\n * @param file - The contents of the file in a buffer.\n * @param algorithm - The hash algorithm to use, artificially constrained by what is used internally.\n * @param hashEncoding - The encoding of the returned hash, also artificially constrained.\n * @returns The hash of the content of the buffer.\n *\n * @internal\n */\nexport async function hashFile(\n\tfile: IsoBuffer,\n\talgorithm: \"SHA-1\" | \"SHA-256\" = \"SHA-1\",\n\thashEncoding: \"hex\" | \"base64\" = \"hex\",\n): Promise<string> {\n\tlet engine;\n\t// eslint-disable-next-line default-case\n\tswitch (algorithm) {\n\t\tcase \"SHA-1\": {\n\t\t\tengine = new sha1();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"SHA-256\": {\n\t\t\tengine = new sha256();\n\t\t\tbreak;\n\t\t}\n\t}\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\treturn engine.update(file).digest(hashEncoding) as string;\n}\n\n/**\n * Create a github hash (Github hashes the string with blob and size)\n * Must be called under secure context for browsers\n *\n * @param file - The contents of the file in a buffer\n * @returns The sha1 hash of the content of the buffer with the `blob` prefix and size\n *\n * @internal\n */\nexport async function gitHashFile(file: IsoBuffer): Promise<string> {\n\tconst size = file.byteLength;\n\t// eslint-disable-next-line unicorn/prefer-code-point\n\tconst filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`;\n\tconst engine = new sha1();\n\treturn engine.update(filePrefix).update(file).digest(\"hex\");\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/lib/index.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// THIS FILE IS NOT ACTUALLY USED (see indexBrowser.ts and indexNode.ts for that).\n// It's only here so type-test-generator doesn't fail, until we update it to support packages that don't have an\n// index.ts file.\n// eslint-disable-next-line no-restricted-syntax\nexport * from \"./indexNode\";\n"]}
@@ -1,14 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- export { bufferToString, isArrayBuffer, IsoBuffer, stringToBuffer, Uint8ArrayToString, } from "./bufferBrowser.mjs";
6
- export { gitHashFile, hashFile } from "./hashFileBrowser.mjs";
7
- export { performance } from "./performanceIsomorphic.mjs";
8
- export { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from "./base64Encoding.mjs";
9
- export { Uint8ArrayToArrayBuffer } from "./bufferShared.mjs";
10
- export { EventForwarder } from "./eventForwarder.mjs";
11
- export { IsomorphicPerformance } from "./performanceIsomorphic.mjs";
12
- export { ITraceEvent, Trace } from "./trace.mjs";
13
- export { EventEmitterEventType, TypedEventEmitter, TypedEventTransform } from "./typedEventEmitter.mjs";
14
- //# sourceMappingURL=indexBrowser.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexBrowser.d.mts","sourceRoot":"","sources":["../src/indexBrowser.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EACN,cAAc,EACd,aAAa,EACb,SAAS,EACT,cAAc,EACd,kBAAkB,GAClB;OACM,EAAE,WAAW,EAAE,QAAQ,EAAE;OACzB,EAAE,WAAW,EAAE;OAEf,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE;OAC9C,EAAE,uBAAuB,EAAE;OAC3B,EAAE,cAAc,EAAE;OAClB,EAAE,qBAAqB,EAAE;OACzB,EAAE,WAAW,EAAE,KAAK,EAAE;OACtB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE"}
@@ -1,13 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- export { bufferToString, isArrayBuffer, IsoBuffer, stringToBuffer, Uint8ArrayToString, } from "./bufferBrowser.mjs";
6
- export { gitHashFile, hashFile } from "./hashFileBrowser.mjs";
7
- export { performance } from "./performanceIsomorphic.mjs";
8
- export { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from "./base64Encoding.mjs";
9
- export { Uint8ArrayToArrayBuffer } from "./bufferShared.mjs";
10
- export { EventForwarder } from "./eventForwarder.mjs";
11
- export { Trace } from "./trace.mjs";
12
- export { TypedEventEmitter } from "./typedEventEmitter.mjs";
13
- //# sourceMappingURL=indexBrowser.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexBrowser.mjs","sourceRoot":"","sources":["../src/indexBrowser.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EACN,cAAc,EACd,aAAa,EACb,SAAS,EACT,cAAc,EACd,kBAAkB,GAClB;OACM,EAAE,WAAW,EAAE,QAAQ,EAAE;OACzB,EAAE,WAAW,EAAE;OAEf,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE;OAC9C,EAAE,uBAAuB,EAAE;OAC3B,EAAE,cAAc,EAAE;OAElB,EAAe,KAAK,EAAE;OACtB,EAAyB,iBAAiB,EAAuB","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tbufferToString,\n\tisArrayBuffer,\n\tIsoBuffer,\n\tstringToBuffer,\n\tUint8ArrayToString,\n} from \"./bufferBrowser\";\nexport { gitHashFile, hashFile } from \"./hashFileBrowser\";\nexport { performance } from \"./performanceIsomorphic\";\n\nexport { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from \"./base64Encoding\";\nexport { Uint8ArrayToArrayBuffer } from \"./bufferShared\";\nexport { EventForwarder } from \"./eventForwarder\";\nexport { IsomorphicPerformance } from \"./performanceIsomorphic\";\nexport { ITraceEvent, Trace } from \"./trace\";\nexport { EventEmitterEventType, TypedEventEmitter, TypedEventTransform } from \"./typedEventEmitter\";\n"]}
@@ -1,15 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- export { type Buffer } from "./bufferNode.mjs";
6
- export { bufferToString, IsoBuffer, stringToBuffer, Uint8ArrayToString } from "./bufferNode.mjs";
7
- export { gitHashFile, hashFile } from "./hashFileNode.mjs";
8
- export { performance } from "./performanceIsomorphic.mjs";
9
- export { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from "./base64Encoding.mjs";
10
- export { Uint8ArrayToArrayBuffer } from "./bufferShared.mjs";
11
- export { EventForwarder } from "./eventForwarder.mjs";
12
- export { IsomorphicPerformance } from "./performanceIsomorphic.mjs";
13
- export { ITraceEvent, Trace } from "./trace.mjs";
14
- export { EventEmitterEventType, TypedEventEmitter, TypedEventTransform } from "./typedEventEmitter.mjs";
15
- //# sourceMappingURL=indexNode.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexNode.d.mts","sourceRoot":"","sources":["../src/indexNode.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAE,KAAK,MAAM,EAAE;OACf,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE;OACjE,EAAE,WAAW,EAAE,QAAQ,EAAE;OACzB,EAAE,WAAW,EAAE;OAEf,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE;OAC9C,EAAE,uBAAuB,EAAE;OAC3B,EAAE,cAAc,EAAE;OAClB,EAAE,qBAAqB,EAAE;OACzB,EAAE,WAAW,EAAE,KAAK,EAAE;OACtB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE"}
package/lib/indexNode.mjs DELETED
@@ -1,13 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- export { bufferToString, IsoBuffer, stringToBuffer, Uint8ArrayToString } from "./bufferNode.mjs";
6
- export { gitHashFile, hashFile } from "./hashFileNode.mjs";
7
- export { performance } from "./performanceIsomorphic.mjs";
8
- export { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from "./base64Encoding.mjs";
9
- export { Uint8ArrayToArrayBuffer } from "./bufferShared.mjs";
10
- export { EventForwarder } from "./eventForwarder.mjs";
11
- export { Trace } from "./trace.mjs";
12
- export { TypedEventEmitter } from "./typedEventEmitter.mjs";
13
- //# sourceMappingURL=indexNode.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexNode.mjs","sourceRoot":"","sources":["../src/indexNode.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAGI,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE;OACjE,EAAE,WAAW,EAAE,QAAQ,EAAE;OACzB,EAAE,WAAW,EAAE;OAEf,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE;OAC9C,EAAE,uBAAuB,EAAE;OAC3B,EAAE,cAAc,EAAE;OAElB,EAAe,KAAK,EAAE;OACtB,EAAyB,iBAAiB,EAAuB","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { type Buffer } from \"./bufferNode\";\nexport { bufferToString, IsoBuffer, stringToBuffer, Uint8ArrayToString } from \"./bufferNode\";\nexport { gitHashFile, hashFile } from \"./hashFileNode\";\nexport { performance } from \"./performanceIsomorphic\";\n\nexport { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from \"./base64Encoding\";\nexport { Uint8ArrayToArrayBuffer } from \"./bufferShared\";\nexport { EventForwarder } from \"./eventForwarder\";\nexport { IsomorphicPerformance } from \"./performanceIsomorphic\";\nexport { ITraceEvent, Trace } from \"./trace\";\nexport { EventEmitterEventType, TypedEventEmitter, TypedEventTransform } from \"./typedEventEmitter\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"performanceIsomorphic.d.mts","sourceRoot":"","sources":["../src/performanceIsomorphic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,GACvD,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,qBAA8C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"performanceIsomorphic.mjs","sourceRoot":"","sources":["../src/performanceIsomorphic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAA0B,UAAU,CAAC,WAAW,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This type contains all browser performance properties as optional, and some\n * of the intersecting properties of node and browser performance as required.\n *\n * @internal\n */\nexport type IsomorphicPerformance = Partial<Performance> &\n\tPick<Performance, \"clearMarks\" | \"mark\" | \"measure\" | \"now\">;\n\n/**\n * This exported \"performance\" member masks the built-in globalThis.performance object\n * as an IsomorphicPerformance, which hides all of its features that aren't compatible\n * between Node and browser implementations. Anything exposed on this performance object\n * is considered safe to use regarless of the environment it runs in.\n *\n * @internal\n */\nexport const performance: IsomorphicPerformance = globalThis.performance;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace.d.mts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,qBAAa,KAAK;aAOqB,SAAS,EAAE,MAAM;WANzC,KAAK,IAAI,KAAK;IAK5B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,aAA6B,SAAS,EAAE,MAAM;IAIhD,KAAK,IAAI,WAAW;CAU3B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB"}
package/lib/trace.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace.mjs","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAE,WAAW,EAAE;AAEtB;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IACV,MAAM,CAAC,KAAK;QAClB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAGD,YAAsC,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;QACtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC3B,CAAC;IAEM,KAAK;QACX,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG;YACb,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS;YACvC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ;YAC9B,IAAI;SACJ,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,KAAK,CAAC;IACd,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { performance } from \"./indexNode\";\n\n/**\n * Helper class for tracing performance of events\n * Time measurements are in milliseconds as a floating point with a decimal\n *\n * @internal\n */\nexport class Trace {\n\tpublic static start(): Trace {\n\t\tconst startTick = performance.now();\n\t\treturn new Trace(startTick);\n\t}\n\n\tprotected lastTick: number;\n\tprotected constructor(public readonly startTick: number) {\n\t\tthis.lastTick = startTick;\n\t}\n\n\tpublic trace(): ITraceEvent {\n\t\tconst tick = performance.now();\n\t\tconst event = {\n\t\t\ttotalTimeElapsed: tick - this.startTick,\n\t\t\tduration: tick - this.lastTick,\n\t\t\ttick,\n\t\t};\n\t\tthis.lastTick = tick;\n\t\treturn event;\n\t}\n}\n\n/**\n * Event in a performance trace including time elapsed.\n *\n * @internal\n */\nexport interface ITraceEvent {\n\t/**\n\t * Total time elapsed since the start of the Trace.\n\t * Measured in milliseconds as a floating point with a decimal\n\t */\n\treadonly totalTimeElapsed: number;\n\t/**\n\t * Time elapsed since the last trace event.\n\t * Measured in milliseconds as a floating point with a decimal\n\t */\n\treadonly duration: number;\n\t/**\n\t * This number represents a relative time which should\n\t * be consistent for all trace ticks.\n\t */\n\treadonly tick: number;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typedEventEmitter.d.mts","sourceRoot":"","sources":["../src/typedEventEmitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;;OAII,EAAE,YAAY,EAAE,MAAM,QAAQ;OAC9B,EACN,MAAM,EACN,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,MAAM,iCAAiC;AAExC;;;;;;GAMG;AAEH,MAAM,MAAM,qBAAqB,GAAG,YAAY,SAAS;IAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAC;CAAE,GAC3F,CAAC,GACD,KAAK,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,KAAK,EAAE,MAAM,IAK5C,gBAAgB,CACf,KAAK,EACL,aAAa,GAAG,gBAAgB,EAEhC,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,CACvE,GAEA,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,GAGzC,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;AAExD;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,MAAM,CACpC,SAAQ,YACR,YAAW,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;;IAkB1C,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;CAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typedEventEmitter.mjs","sourceRoot":"","sources":["../src/typedEventEmitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAII,EAAE,YAAY,EAAE,MAAM,QAAQ;AAwCrC;;;GAGG;AACH,MAAM,OAAO,iBACZ,SAAQ,YAAY;IAGpB;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAsC,CAAC;QACrF,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAsC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAsC,CAAC;QACvE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAGrD,CAAC;QACF,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAG7D,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAsC,CAAC;QAC3F,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAsC,CAAC;IACtE,CAAC;CAQD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// False positive: this is an import from the `events` package, not from Node.\n// eslint-disable-next-line unicorn/prefer-node-protocol\nimport { EventEmitter } from \"events\";\nimport {\n\tIEvent,\n\tTransformedEvent,\n\tIEventTransformer,\n\tIEventProvider,\n} from \"@fluidframework/core-interfaces\";\n\n/**\n * The event emitter polyfill and the node event emitter have different event types:\n * string | symbol vs. string | number\n *\n * This type allow us to correctly handle either type\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type EventEmitterEventType = EventEmitter extends { on(event: infer E, listener: any) }\n\t? E\n\t: never;\n\n/**\n * @public\n */\nexport type TypedEventTransform<TThis, TEvent> =\n\t// Event emitter supports some special events for the emitter itself to use\n\t// this exposes those events for the TypedEventEmitter.\n\t// Since we know what the shape of these events are, we can describe them directly via a TransformedEvent\n\t// which easier than trying to extend TEvent directly\n\tTransformedEvent<\n\t\tTThis,\n\t\t\"newListener\" | \"removeListener\",\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tParameters<(event: string, listener: (...args: any[]) => void) => void>\n\t> &\n\t\t// Expose all the events provides by TEvent\n\t\tIEventTransformer<TThis, TEvent & IEvent> &\n\t\t// Add the default overload so this is covertable to EventEmitter regardless of environment\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tTransformedEvent<TThis, EventEmitterEventType, any[]>;\n\n/**\n * Event Emitter helper class the supports emitting typed events\n * @public\n */\nexport class TypedEventEmitter<TEvent>\n\textends EventEmitter\n\timplements IEventProvider<TEvent & IEvent>\n{\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addListener = super.addListener.bind(this) as TypedEventTransform<this, TEvent>;\n\t\tthis.on = super.on.bind(this) as TypedEventTransform<this, TEvent>;\n\t\tthis.once = super.once.bind(this) as TypedEventTransform<this, TEvent>;\n\t\tthis.prependListener = super.prependListener.bind(this) as TypedEventTransform<\n\t\t\tthis,\n\t\t\tTEvent\n\t\t>;\n\t\tthis.prependOnceListener = super.prependOnceListener.bind(this) as TypedEventTransform<\n\t\t\tthis,\n\t\t\tTEvent\n\t\t>;\n\t\tthis.removeListener = super.removeListener.bind(this) as TypedEventTransform<this, TEvent>;\n\t\tthis.off = super.off.bind(this) as TypedEventTransform<this, TEvent>;\n\t}\n\treadonly addListener: TypedEventTransform<this, TEvent>;\n\treadonly on: TypedEventTransform<this, TEvent>;\n\treadonly once: TypedEventTransform<this, TEvent>;\n\treadonly prependListener: TypedEventTransform<this, TEvent>;\n\treadonly prependOnceListener: TypedEventTransform<this, TEvent>;\n\treadonly removeListener: TypedEventTransform<this, TEvent>;\n\treadonly off: TypedEventTransform<this, TEvent>;\n}\n"]}
@@ -1,122 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- // False positive: this is an import from the `events` package, not from Node.
7
- // eslint-disable-next-line unicorn/prefer-node-protocol
8
- import { EventEmitter } from "events";
9
- import { IDisposable, IEvent, IEventProvider } from "@fluidframework/core-interfaces";
10
- import { TypedEventEmitter } from "./typedEventEmitter";
11
-
12
- /**
13
- * Base class used for forwarding events from a source EventEmitter.
14
- * This can be useful when all arbitrary listeners need to be removed,
15
- * but the primary source needs to stay intact.
16
- *
17
- * @internal
18
- */
19
- export class EventForwarder<TEvent = IEvent>
20
- extends TypedEventEmitter<TEvent>
21
- implements IDisposable
22
- {
23
- protected static isEmitterEvent(event: string): boolean {
24
- return (
25
- event === EventForwarder.newListenerEvent ||
26
- event === EventForwarder.removeListenerEvent
27
- );
28
- }
29
-
30
- private static readonly newListenerEvent = "newListener";
31
- private static readonly removeListenerEvent = "removeListener";
32
-
33
- /**
34
- * {@inheritDoc @fluidframework/core-interfaces#IDisposable.disposed}
35
- */
36
- public get disposed(): boolean {
37
- return this.isDisposed;
38
- }
39
- private isDisposed: boolean = false;
40
-
41
- private readonly forwardingEvents = new Map<
42
- string,
43
- Map<EventEmitter | IEventProvider<TEvent & IEvent>, () => void>
44
- >();
45
-
46
- constructor(source?: EventEmitter | IEventProvider<TEvent & IEvent>) {
47
- super();
48
- if (source !== undefined) {
49
- // NewListener event is raised whenever someone starts listening to this events, so
50
- // we keep track of events being listened to, and start forwarding from the source
51
- // event emitter per event listened to on this
52
- const removeListenerHandler = (event: string): void =>
53
- this.unforwardEvent(source, event);
54
- const newListenerHandler = (event: string): void => this.forwardEvent(source, event);
55
- this.on(EventForwarder.removeListenerEvent, removeListenerHandler);
56
- this.on(EventForwarder.newListenerEvent, newListenerHandler);
57
- }
58
- }
59
-
60
- /**
61
- * {@inheritDoc @fluidframework/core-interfaces#IDisposable.dispose}
62
- */
63
- public dispose(): void {
64
- this.isDisposed = true;
65
- for (const listenerRemovers of this.forwardingEvents.values()) {
66
- for (const listenerRemover of listenerRemovers.values()) {
67
- try {
68
- listenerRemover();
69
- } catch {
70
- // Should be fine because of removeAllListeners below
71
- }
72
- }
73
- }
74
- this.removeAllListeners();
75
- this.forwardingEvents.clear();
76
- }
77
-
78
- protected forwardEvent(
79
- source: EventEmitter | IEventProvider<TEvent & IEvent>,
80
- ...events: string[]
81
- ): void {
82
- for (const event of events) {
83
- if (
84
- source !== undefined &&
85
- event !== undefined &&
86
- !EventForwarder.isEmitterEvent(event)
87
- ) {
88
- let sources = this.forwardingEvents.get(event);
89
- if (sources === undefined) {
90
- sources = new Map();
91
- this.forwardingEvents.set(event, sources);
92
- }
93
- if (!sources.has(source)) {
94
- const listener = (...args: unknown[]): boolean => this.emit(event, ...args);
95
- sources.set(source, () => source.off(event, listener));
96
- source.on(event, listener);
97
- }
98
- }
99
- }
100
- }
101
-
102
- protected unforwardEvent(
103
- source: EventEmitter | IEventProvider<TEvent & IEvent>,
104
- ...events: string[]
105
- ): void {
106
- for (const event of events) {
107
- if (event !== undefined && !EventForwarder.isEmitterEvent(event)) {
108
- const sources = this.forwardingEvents.get(event);
109
- if (sources?.has(source) === true && this.listenerCount(event) === 0) {
110
- const listenerRemover = sources.get(source);
111
- if (listenerRemover !== undefined) {
112
- listenerRemover();
113
- }
114
- sources.delete(source);
115
- if (sources.size === 0) {
116
- this.forwardingEvents.delete(event);
117
- }
118
- }
119
- }
120
- }
121
- }
122
- }