@prismicio/simulator 0.2.0 → 0.2.1-canary.d9ffa62

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 (144) hide show
  1. package/dist/SimulatorAPI.cjs +7 -9
  2. package/dist/SimulatorAPI.cjs.map +1 -1
  3. package/dist/SimulatorAPI.d.cts.map +1 -0
  4. package/dist/SimulatorAPI.d.ts.map +1 -0
  5. package/dist/SimulatorAPI.js +6 -8
  6. package/dist/SimulatorAPI.js.map +1 -1
  7. package/dist/SimulatorClient.cjs +7 -9
  8. package/dist/SimulatorClient.cjs.map +1 -1
  9. package/dist/SimulatorClient.d.cts.map +1 -0
  10. package/dist/SimulatorClient.d.ts.map +1 -0
  11. package/dist/SimulatorClient.js +6 -8
  12. package/dist/SimulatorClient.js.map +1 -1
  13. package/dist/channel/ChannelEmitter.cjs +10 -13
  14. package/dist/channel/ChannelEmitter.cjs.map +1 -1
  15. package/dist/channel/ChannelEmitter.d.cts +1 -3
  16. package/dist/channel/ChannelEmitter.d.cts.map +1 -0
  17. package/dist/channel/ChannelEmitter.d.ts +1 -3
  18. package/dist/channel/ChannelEmitter.d.ts.map +1 -0
  19. package/dist/channel/ChannelEmitter.js +6 -9
  20. package/dist/channel/ChannelEmitter.js.map +1 -1
  21. package/dist/channel/ChannelNetwork.cjs +5 -6
  22. package/dist/channel/ChannelNetwork.cjs.map +1 -1
  23. package/dist/channel/ChannelNetwork.d.cts.map +1 -0
  24. package/dist/channel/ChannelNetwork.d.ts.map +1 -0
  25. package/dist/channel/ChannelNetwork.js +3 -4
  26. package/dist/channel/ChannelNetwork.js.map +1 -1
  27. package/dist/channel/ChannelReceiver.cjs +12 -10
  28. package/dist/channel/ChannelReceiver.cjs.map +1 -1
  29. package/dist/channel/ChannelReceiver.d.cts.map +1 -0
  30. package/dist/channel/ChannelReceiver.d.ts.map +1 -0
  31. package/dist/channel/ChannelReceiver.js +8 -6
  32. package/dist/channel/ChannelReceiver.js.map +1 -1
  33. package/dist/channel/errors.cjs +1 -2
  34. package/dist/channel/errors.cjs.map +1 -1
  35. package/dist/channel/errors.d.cts.map +1 -0
  36. package/dist/channel/errors.d.ts.map +1 -0
  37. package/dist/channel/errors.js +1 -1
  38. package/dist/channel/errors.js.map +1 -1
  39. package/dist/channel/messages.cjs +5 -6
  40. package/dist/channel/messages.cjs.map +1 -1
  41. package/dist/channel/messages.d.cts +0 -1
  42. package/dist/channel/messages.d.cts.map +1 -0
  43. package/dist/channel/messages.d.ts +0 -1
  44. package/dist/channel/messages.d.ts.map +1 -0
  45. package/dist/channel/messages.js +5 -5
  46. package/dist/channel/messages.js.map +1 -1
  47. package/dist/channel/types.cjs +7 -8
  48. package/dist/channel/types.cjs.map +1 -1
  49. package/dist/channel/types.d.cts +1 -1
  50. package/dist/channel/types.d.cts.map +1 -0
  51. package/dist/channel/types.d.ts +1 -1
  52. package/dist/channel/types.d.ts.map +1 -0
  53. package/dist/channel/types.js +7 -7
  54. package/dist/channel/types.js.map +1 -1
  55. package/dist/globalExtensions.d.cts +1 -1
  56. package/dist/globalExtensions.d.cts.map +1 -0
  57. package/dist/globalExtensions.d.ts +1 -1
  58. package/dist/globalExtensions.d.ts.map +1 -0
  59. package/dist/index.cjs +7 -7
  60. package/dist/index.d.cts +0 -1
  61. package/dist/index.d.ts +0 -1
  62. package/dist/index.js +2 -3
  63. package/dist/kit/SimulatorManager.cjs +12 -15
  64. package/dist/kit/SimulatorManager.cjs.map +1 -1
  65. package/dist/kit/SimulatorManager.d.cts.map +1 -0
  66. package/dist/kit/SimulatorManager.d.ts.map +1 -0
  67. package/dist/kit/SimulatorManager.js +7 -10
  68. package/dist/kit/SimulatorManager.js.map +1 -1
  69. package/dist/kit/State.cjs +7 -8
  70. package/dist/kit/State.cjs.map +1 -1
  71. package/dist/kit/State.d.cts.map +1 -0
  72. package/dist/kit/State.d.ts.map +1 -0
  73. package/dist/kit/State.js +4 -5
  74. package/dist/kit/State.js.map +1 -1
  75. package/dist/kit/domHelpers.cjs +1 -2
  76. package/dist/kit/domHelpers.cjs.map +1 -1
  77. package/dist/kit/domHelpers.d.cts.map +1 -0
  78. package/dist/kit/domHelpers.d.ts.map +1 -0
  79. package/dist/kit/domHelpers.js +1 -1
  80. package/dist/kit/domHelpers.js.map +1 -1
  81. package/dist/kit/eventHandlers.cjs +1 -2
  82. package/dist/kit/eventHandlers.cjs.map +1 -1
  83. package/dist/kit/eventHandlers.d.cts.map +1 -0
  84. package/dist/kit/eventHandlers.d.ts.map +1 -0
  85. package/dist/kit/eventHandlers.js +1 -1
  86. package/dist/kit/eventHandlers.js.map +1 -1
  87. package/dist/kit/getDefault.cjs +1 -2
  88. package/dist/kit/getDefault.cjs.map +1 -1
  89. package/dist/kit/getDefault.d.cts.map +1 -0
  90. package/dist/kit/getDefault.d.ts.map +1 -0
  91. package/dist/kit/getDefault.js +1 -1
  92. package/dist/kit/messages.cjs +3 -6
  93. package/dist/kit/messages.cjs.map +1 -1
  94. package/dist/kit/messages.d.cts.map +1 -0
  95. package/dist/kit/messages.d.ts.map +1 -0
  96. package/dist/kit/messages.js +3 -5
  97. package/dist/kit/messages.js.map +1 -1
  98. package/dist/kit/types.cjs +6 -7
  99. package/dist/kit/types.cjs.map +1 -1
  100. package/dist/kit/types.d.cts +1 -1
  101. package/dist/kit/types.d.cts.map +1 -0
  102. package/dist/kit/types.d.ts +1 -1
  103. package/dist/kit/types.d.ts.map +1 -0
  104. package/dist/kit/types.js +6 -6
  105. package/dist/kit/types.js.map +1 -1
  106. package/dist/kit.cjs +9 -9
  107. package/dist/kit.js +3 -4
  108. package/dist/lib/EventEmitter.cjs +1 -2
  109. package/dist/lib/EventEmitter.cjs.map +1 -1
  110. package/dist/lib/EventEmitter.d.cts.map +1 -0
  111. package/dist/lib/EventEmitter.d.ts.map +1 -0
  112. package/dist/lib/EventEmitter.js +1 -1
  113. package/dist/lib/EventEmitter.js.map +1 -1
  114. package/dist/lib/throttle.cjs +1 -2
  115. package/dist/lib/throttle.cjs.map +1 -1
  116. package/dist/lib/throttle.js +1 -1
  117. package/dist/types.cjs +10 -11
  118. package/dist/types.cjs.map +1 -1
  119. package/dist/types.d.cts +2 -2
  120. package/dist/types.d.cts.map +1 -0
  121. package/dist/types.d.ts +2 -2
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +10 -10
  124. package/dist/types.js.map +1 -1
  125. package/package.json +33 -35
  126. package/src/SimulatorAPI.ts +14 -30
  127. package/src/SimulatorClient.ts +15 -32
  128. package/src/channel/ChannelEmitter.ts +25 -57
  129. package/src/channel/ChannelNetwork.ts +36 -61
  130. package/src/channel/ChannelReceiver.ts +36 -51
  131. package/src/channel/errors.ts +2 -7
  132. package/src/channel/index.ts +5 -20
  133. package/src/channel/messages.ts +4 -13
  134. package/src/channel/types.ts +15 -31
  135. package/src/index.ts +2 -10
  136. package/src/kit/SimulatorManager.ts +7 -20
  137. package/src/kit/State.ts +4 -9
  138. package/src/kit/domHelpers.ts +1 -3
  139. package/src/kit/eventHandlers.ts +2 -7
  140. package/src/kit/index.ts +1 -5
  141. package/src/kit/messages.ts +1 -2
  142. package/src/kit/types.ts +0 -1
  143. package/src/lib/EventEmitter.ts +3 -9
  144. package/src/lib/__PRODUCTION__.ts +1 -2
@@ -1,6 +1,5 @@
1
- const require_types = require('./types.cjs');
2
- const require_ChannelReceiver = require('./channel/ChannelReceiver.cjs');
3
-
1
+ const require_ChannelReceiver = require("./channel/ChannelReceiver.cjs");
2
+ const require_types = require("./types.cjs");
4
3
  //#region src/SimulatorAPI.ts
5
4
  const simulatorAPIDefaultOptions = {
6
5
  requestIDPrefix: "api-",
@@ -9,7 +8,7 @@ const simulatorAPIDefaultOptions = {
9
8
  };
10
9
  var SimulatorAPI = class extends require_ChannelReceiver.ChannelReceiver {
11
10
  constructor(requestHandlers, options) {
12
- const debug = (options === null || options === void 0 ? void 0 : options.debug) || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
11
+ const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
13
12
  super({
14
13
  [require_types.ClientRequestType.Ping]: (_req, res) => {
15
14
  return res.success("pong");
@@ -21,10 +20,9 @@ var SimulatorAPI = class extends require_ChannelReceiver.ChannelReceiver {
21
20
  debug
22
21
  });
23
22
  if (debug) {
24
- var _window, _window$prismic, _window$prismic$slice;
25
- (_window = window).prismic || (_window.prismic = {});
26
- (_window$prismic = window.prismic).sliceSimulator || (_window$prismic.sliceSimulator = {});
27
- (_window$prismic$slice = window.prismic.sliceSimulator).api || (_window$prismic$slice.api = []);
23
+ window.prismic ||= {};
24
+ window.prismic.sliceSimulator ||= {};
25
+ window.prismic.sliceSimulator.api ||= [];
28
26
  window.prismic.sliceSimulator.api.push(this);
29
27
  }
30
28
  }
@@ -35,8 +33,8 @@ var SimulatorAPI = class extends require_ChannelReceiver.ChannelReceiver {
35
33
  return await this.postFormattedRequest(require_types.APIRequestType.SetSliceZoneSize, data);
36
34
  };
37
35
  };
38
-
39
36
  //#endregion
40
37
  exports.SimulatorAPI = SimulatorAPI;
41
38
  exports.simulatorAPIDefaultOptions = simulatorAPIDefaultOptions;
39
+
42
40
  //# sourceMappingURL=SimulatorAPI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimulatorAPI.cjs","names":["ChannelReceiver","ClientRequestType","APIRequestType"],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\tAPITransactions,\n\tClientTransactions} from \"./types\";\nimport {\n\tAPIRequestType,\n\tClientRequestType\n} from \"./types\"\n\nimport type {\n\tAllChannelReceiverOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods} from \"./channel\";\nimport {\n\tChannelReceiver\n} from \"./channel\"\n\nexport type SimulatorAPIOptions = {\n\tactiveSliceAPI: boolean\n\tsliceZoneSizeAPI: boolean\n}\n\nexport const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> &\n\tSimulatorAPIOptions = {\n\trequestIDPrefix: \"api-\",\n\tactiveSliceAPI: false,\n\tsliceZoneSizeAPI: false,\n}\n\nexport class SimulatorAPI\n\textends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>\n\timplements TransactionsMethods<APITransactions>\n{\n\tconstructor(\n\t\trequestHandlers: Omit<\n\t\t\tTransactionsHandlers<ClientTransactions>,\n\t\t\tClientRequestType.Ping\n\t\t> &\n\t\t\tPartial<\n\t\t\t\tPick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>\n\t\t\t>,\n\t\toptions?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug ||\n\t\t\t/[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\t{\n\t\t\t\t[ClientRequestType.Ping]: (_req, res) => {\n\t\t\t\t\treturn res.success(\"pong\")\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorAPIDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append API to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.api ||= []\n\t\t\twindow.prismic.sliceSimulator.api.push(this)\n\t\t}\n\t}\n\n\t[APIRequestType.SetActiveSlice]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetActiveSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetActiveSlice, data)\n\t};\n\n\t[APIRequestType.SetSliceZoneSize]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetSliceZoneSize]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(\n\t\t\tAPIRequestType.SetSliceZoneSize,\n\t\t\tdata,\n\t\t)\n\t}\n}\n"],"mappings":";;;;AAsBA,MAAa,6BACU;CACtB,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;AAED,IAAa,eAAb,cACSA,wCAET;CACC,YACC,iBAOA,SACC;EAED,MAAM,2DACL,QAAS,UACT,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAEnE,QACC;IACEC,gCAAkB,QAAQ,MAAM,QAAQ;AACxC,WAAO,IAAI,QAAQ,OAAO;;GAE3B,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;;AACV,sBAAO,8BAAY,EAAE;AACrB,6BAAO,SAAQ,oDAAmB,EAAE;AACpC,mCAAO,QAAQ,gBAAe,oCAAQ,EAAE;AACxC,UAAO,QAAQ,eAAe,IAAI,KAAK,KAAK;;;CAI9C,CAACC,6BAAe,kBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,6BAAe,gBAAgB,KAAK;;CAG5E,CAACA,6BAAe,oBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBACjBA,6BAAe,kBACf,KACA"}
1
+ {"version":3,"file":"SimulatorAPI.cjs","names":["ChannelReceiver","ClientRequestType","APIRequestType"],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\tAllChannelReceiverOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelReceiver } from \"./channel\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport type SimulatorAPIOptions = {\n\tactiveSliceAPI: boolean\n\tsliceZoneSizeAPI: boolean\n}\n\nexport const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> & SimulatorAPIOptions =\n\t{\n\t\trequestIDPrefix: \"api-\",\n\t\tactiveSliceAPI: false,\n\t\tsliceZoneSizeAPI: false,\n\t}\n\nexport class SimulatorAPI\n\textends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>\n\timplements TransactionsMethods<APITransactions>\n{\n\tconstructor(\n\t\trequestHandlers: Omit<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping> &\n\t\t\tPartial<Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>>,\n\t\toptions?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\t{\n\t\t\t\t[ClientRequestType.Ping]: (_req, res) => {\n\t\t\t\t\treturn res.success(\"pong\")\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorAPIDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append API to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.api ||= []\n\t\t\twindow.prismic.sliceSimulator.api.push(this)\n\t\t}\n\t}\n\n\t[APIRequestType.SetActiveSlice]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetActiveSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetActiveSlice, data)\n\t};\n\n\t[APIRequestType.SetSliceZoneSize]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetSliceZoneSize]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data)\n\t}\n}\n"],"mappings":";;;AAeA,MAAa,6BACZ;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;AAEF,IAAa,eAAb,cACSA,wBAAAA,gBAET;CACC,YACC,iBAEA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC;IACEC,cAAAA,kBAAkB,QAAQ,MAAM,QAAQ;AACxC,WAAO,IAAI,QAAQ,OAAO;;GAE3B,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,QAAQ,EAAE;AACxC,UAAO,QAAQ,eAAe,IAAI,KAAK,KAAK;;;CAI9C,CAACC,cAAAA,eAAe,kBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,eAAe,gBAAgB,KAAK;;CAG5E,CAACA,cAAAA,eAAe,oBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,eAAe,kBAAkB,KAAK"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulatorAPI.d.cts","names":[],"sources":["../src/SimulatorAPI.ts"],"mappings":";;;;;KAUY,mBAAA;EACX,cAAA;EACA,gBAAA;AAAA;AAAA,cAGY,0BAAA,EAA4B,OAAA,CAAQ,yBAAA,IAA6B,mBAAA;AAAA,cAOjE,YAAA,SACJ,eAAA,CAAgB,kBAAA,EAAoB,mBAAA,aACjC,mBAAA,CAAoB,eAAA;cAG9B,eAAA,EAAiB,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IACjF,OAAA,CAAQ,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IAC1E,OAAA,GAAU,OAAA,CAAQ,yBAAA,GAA4B,mBAAA;EAAA,CA6B9C,cAAA,CAAe,cAAA,GAAiB,iBAAA,CAChC,eAAA,CAAgB,cAAA,CAAe,cAAA;EAAA,CAK/B,cAAA,CAAe,gBAAA,GAAmB,iBAAA,CAClC,eAAA,CAAgB,cAAA,CAAe,gBAAA;AAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulatorAPI.d.ts","names":[],"sources":["../src/SimulatorAPI.ts"],"mappings":";;;;;KAUY,mBAAA;EACX,cAAA;EACA,gBAAA;AAAA;AAAA,cAGY,0BAAA,EAA4B,OAAA,CAAQ,yBAAA,IAA6B,mBAAA;AAAA,cAOjE,YAAA,SACJ,eAAA,CAAgB,kBAAA,EAAoB,mBAAA,aACjC,mBAAA,CAAoB,eAAA;cAG9B,eAAA,EAAiB,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IACjF,OAAA,CAAQ,IAAA,CAAK,oBAAA,CAAqB,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,IAC1E,OAAA,GAAU,OAAA,CAAQ,yBAAA,GAA4B,mBAAA;EAAA,CA6B9C,cAAA,CAAe,cAAA,GAAiB,iBAAA,CAChC,eAAA,CAAgB,cAAA,CAAe,cAAA;EAAA,CAK/B,cAAA,CAAe,gBAAA,GAAmB,iBAAA,CAClC,eAAA,CAAgB,cAAA,CAAe,gBAAA;AAAA"}
@@ -1,6 +1,5 @@
1
- import { APIRequestType, ClientRequestType } from "./types.js";
2
1
  import { ChannelReceiver } from "./channel/ChannelReceiver.js";
3
-
2
+ import { APIRequestType, ClientRequestType } from "./types.js";
4
3
  //#region src/SimulatorAPI.ts
5
4
  const simulatorAPIDefaultOptions = {
6
5
  requestIDPrefix: "api-",
@@ -9,7 +8,7 @@ const simulatorAPIDefaultOptions = {
9
8
  };
10
9
  var SimulatorAPI = class extends ChannelReceiver {
11
10
  constructor(requestHandlers, options) {
12
- const debug = (options === null || options === void 0 ? void 0 : options.debug) || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
11
+ const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
13
12
  super({
14
13
  [ClientRequestType.Ping]: (_req, res) => {
15
14
  return res.success("pong");
@@ -21,10 +20,9 @@ var SimulatorAPI = class extends ChannelReceiver {
21
20
  debug
22
21
  });
23
22
  if (debug) {
24
- var _window, _window$prismic, _window$prismic$slice;
25
- (_window = window).prismic || (_window.prismic = {});
26
- (_window$prismic = window.prismic).sliceSimulator || (_window$prismic.sliceSimulator = {});
27
- (_window$prismic$slice = window.prismic.sliceSimulator).api || (_window$prismic$slice.api = []);
23
+ window.prismic ||= {};
24
+ window.prismic.sliceSimulator ||= {};
25
+ window.prismic.sliceSimulator.api ||= [];
28
26
  window.prismic.sliceSimulator.api.push(this);
29
27
  }
30
28
  }
@@ -35,7 +33,7 @@ var SimulatorAPI = class extends ChannelReceiver {
35
33
  return await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data);
36
34
  };
37
35
  };
38
-
39
36
  //#endregion
40
37
  export { SimulatorAPI, simulatorAPIDefaultOptions };
38
+
41
39
  //# sourceMappingURL=SimulatorAPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimulatorAPI.js","names":[],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\tAPITransactions,\n\tClientTransactions} from \"./types\";\nimport {\n\tAPIRequestType,\n\tClientRequestType\n} from \"./types\"\n\nimport type {\n\tAllChannelReceiverOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods} from \"./channel\";\nimport {\n\tChannelReceiver\n} from \"./channel\"\n\nexport type SimulatorAPIOptions = {\n\tactiveSliceAPI: boolean\n\tsliceZoneSizeAPI: boolean\n}\n\nexport const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> &\n\tSimulatorAPIOptions = {\n\trequestIDPrefix: \"api-\",\n\tactiveSliceAPI: false,\n\tsliceZoneSizeAPI: false,\n}\n\nexport class SimulatorAPI\n\textends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>\n\timplements TransactionsMethods<APITransactions>\n{\n\tconstructor(\n\t\trequestHandlers: Omit<\n\t\t\tTransactionsHandlers<ClientTransactions>,\n\t\t\tClientRequestType.Ping\n\t\t> &\n\t\t\tPartial<\n\t\t\t\tPick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>\n\t\t\t>,\n\t\toptions?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug ||\n\t\t\t/[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\t{\n\t\t\t\t[ClientRequestType.Ping]: (_req, res) => {\n\t\t\t\t\treturn res.success(\"pong\")\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorAPIDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append API to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.api ||= []\n\t\t\twindow.prismic.sliceSimulator.api.push(this)\n\t\t}\n\t}\n\n\t[APIRequestType.SetActiveSlice]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetActiveSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetActiveSlice, data)\n\t};\n\n\t[APIRequestType.SetSliceZoneSize]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetSliceZoneSize]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(\n\t\t\tAPIRequestType.SetSliceZoneSize,\n\t\t\tdata,\n\t\t)\n\t}\n}\n"],"mappings":";;;;AAsBA,MAAa,6BACU;CACtB,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;AAED,IAAa,eAAb,cACS,gBAET;CACC,YACC,iBAOA,SACC;EAED,MAAM,2DACL,QAAS,UACT,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAEnE,QACC;IACE,kBAAkB,QAAQ,MAAM,QAAQ;AACxC,WAAO,IAAI,QAAQ,OAAO;;GAE3B,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;;AACV,sBAAO,8BAAY,EAAE;AACrB,6BAAO,SAAQ,oDAAmB,EAAE;AACpC,mCAAO,QAAQ,gBAAe,oCAAQ,EAAE;AACxC,UAAO,QAAQ,eAAe,IAAI,KAAK,KAAK;;;CAI9C,CAAC,eAAe,kBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,eAAe,gBAAgB,KAAK;;CAG5E,CAAC,eAAe,oBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBACjB,eAAe,kBACf,KACA"}
1
+ {"version":3,"file":"SimulatorAPI.js","names":[],"sources":["../src/SimulatorAPI.ts"],"sourcesContent":["import type {\n\tAllChannelReceiverOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelReceiver } from \"./channel\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport type SimulatorAPIOptions = {\n\tactiveSliceAPI: boolean\n\tsliceZoneSizeAPI: boolean\n}\n\nexport const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> & SimulatorAPIOptions =\n\t{\n\t\trequestIDPrefix: \"api-\",\n\t\tactiveSliceAPI: false,\n\t\tsliceZoneSizeAPI: false,\n\t}\n\nexport class SimulatorAPI\n\textends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>\n\timplements TransactionsMethods<APITransactions>\n{\n\tconstructor(\n\t\trequestHandlers: Omit<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping> &\n\t\t\tPartial<Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>>,\n\t\toptions?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\t{\n\t\t\t\t[ClientRequestType.Ping]: (_req, res) => {\n\t\t\t\t\treturn res.success(\"pong\")\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorAPIDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append API to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.api ||= []\n\t\t\twindow.prismic.sliceSimulator.api.push(this)\n\t\t}\n\t}\n\n\t[APIRequestType.SetActiveSlice]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetActiveSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetActiveSlice, data)\n\t};\n\n\t[APIRequestType.SetSliceZoneSize]: TransactionMethod<\n\t\tAPITransactions[APIRequestType.SetSliceZoneSize]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(APIRequestType.SetSliceZoneSize, data)\n\t}\n}\n"],"mappings":";;;AAeA,MAAa,6BACZ;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;AAEF,IAAa,eAAb,cACS,gBAET;CACC,YACC,iBAEA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC;IACE,kBAAkB,QAAQ,MAAM,QAAQ;AACxC,WAAO,IAAI,QAAQ,OAAO;;GAE3B,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,QAAQ,EAAE;AACxC,UAAO,QAAQ,eAAe,IAAI,KAAK,KAAK;;;CAI9C,CAAC,eAAe,kBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,eAAe,gBAAgB,KAAK;;CAG5E,CAAC,eAAe,oBAEZ,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,eAAe,kBAAkB,KAAK"}
@@ -1,11 +1,10 @@
1
- const require_types = require('./types.cjs');
2
- const require_ChannelEmitter = require('./channel/ChannelEmitter.cjs');
3
-
1
+ const require_ChannelEmitter = require("./channel/ChannelEmitter.cjs");
2
+ const require_types = require("./types.cjs");
4
3
  //#region src/SimulatorClient.ts
5
4
  const simulatorClientDefaultOptions = { requestIDPrefix: "client-" };
6
5
  var SimulatorClient = class extends require_ChannelEmitter.ChannelEmitter {
7
6
  constructor(target, requestHandlers, options) {
8
- const debug = (options === null || options === void 0 ? void 0 : options.debug) || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
7
+ const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
9
8
  super(target, {
10
9
  [require_types.APIRequestType.SetActiveSlice]: (_req, res) => {
11
10
  return res.success();
@@ -20,10 +19,9 @@ var SimulatorClient = class extends require_ChannelEmitter.ChannelEmitter {
20
19
  debug
21
20
  });
22
21
  if (debug) {
23
- var _window, _window$prismic, _window$prismic$slice;
24
- (_window = window).prismic || (_window.prismic = {});
25
- (_window$prismic = window.prismic).sliceSimulator || (_window$prismic.sliceSimulator = {});
26
- (_window$prismic$slice = window.prismic.sliceSimulator).client || (_window$prismic$slice.client = []);
22
+ window.prismic ||= {};
23
+ window.prismic.sliceSimulator ||= {};
24
+ window.prismic.sliceSimulator.client ||= [];
27
25
  window.prismic.sliceSimulator.client.push(this);
28
26
  }
29
27
  }
@@ -37,8 +35,8 @@ var SimulatorClient = class extends require_ChannelEmitter.ChannelEmitter {
37
35
  return await this.postFormattedRequest(require_types.ClientRequestType.ScrollToSlice, data);
38
36
  };
39
37
  };
40
-
41
38
  //#endregion
42
39
  exports.SimulatorClient = SimulatorClient;
43
40
  exports.simulatorClientDefaultOptions = simulatorClientDefaultOptions;
41
+
44
42
  //# sourceMappingURL=SimulatorClient.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimulatorClient.cjs","names":["ChannelEmitter","APIRequestType","ClientRequestType"],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\tAPITransactions,\n\tClientTransactions} from \"./types\";\nimport {\n\tAPIRequestType,\n\tClientRequestType\n} from \"./types\"\n\nimport type { SimulatorAPIOptions } from \"./SimulatorAPI\"\nimport type {\n\tAllChannelEmitterOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods} from \"./channel\";\nimport {\n\tChannelEmitter\n} from \"./channel\"\n\nexport const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> =\n\t{\n\t\trequestIDPrefix: \"client-\",\n\t}\n\nexport class SimulatorClient\n\textends ChannelEmitter<\n\t\tAPITransactions,\n\t\tPartial<AllChannelEmitterOptions>,\n\t\tSimulatorAPIOptions\n\t>\n\timplements TransactionsMethods<ClientTransactions>\n{\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers?: Partial<TransactionsHandlers<APITransactions>>,\n\t\toptions?: Partial<AllChannelEmitterOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug ||\n\t\t\t/[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\t[APIRequestType.SetActiveSlice]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t[APIRequestType.SetSliceZoneSize]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorClientDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append client to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.client ||= []\n\t\t\twindow.prismic.sliceSimulator.client.push(this)\n\t\t}\n\t}\n\n\t[ClientRequestType.Ping]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.Ping]\n\t> = async () => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.Ping)\n\t};\n\n\t[ClientRequestType.SetSliceZone]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.SetSliceZone]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.SetSliceZone, data)\n\t};\n\n\t[ClientRequestType.ScrollToSlice]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.ScrollToSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(\n\t\t\tClientRequestType.ScrollToSlice,\n\t\t\tdata,\n\t\t)\n\t}\n}\n"],"mappings":";;;;AAkBA,MAAa,gCACZ,EACC,iBAAiB,WACjB;AAEF,IAAa,kBAAb,cACSA,sCAMT;CACC,YACC,QACA,iBACA,SACC;EAED,MAAM,2DACL,QAAS,UACT,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAEnE,QACC,QACA;IACEC,6BAAe,kBAAkB,MAAM,QAAQ;AAC/C,WAAO,IAAI,SAAS;;IAEpBA,6BAAe,oBAAoB,MAAM,QAAQ;AACjD,WAAO,IAAI,SAAS;;GAErB,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;;AACV,sBAAO,8BAAY,EAAE;AACrB,6BAAO,SAAQ,oDAAmB,EAAE;AACpC,mCAAO,QAAQ,gBAAe,0CAAW,EAAE;AAC3C,UAAO,QAAQ,eAAe,OAAO,KAAK,KAAK;;;CAIjD,CAACC,gCAAkB,QAEf,YAAY;AACf,SAAO,MAAM,KAAK,qBAAqBA,gCAAkB,KAAK;;CAG/D,CAACA,gCAAkB,gBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,gCAAkB,cAAc,KAAK;;CAG7E,CAACA,gCAAkB,iBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBACjBA,gCAAkB,eAClB,KACA"}
1
+ {"version":3,"file":"SimulatorClient.cjs","names":["ChannelEmitter","APIRequestType","ClientRequestType"],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\tAllChannelEmitterOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelEmitter } from \"./channel\"\nimport type { SimulatorAPIOptions } from \"./SimulatorAPI\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> = {\n\trequestIDPrefix: \"client-\",\n}\n\nexport class SimulatorClient\n\textends ChannelEmitter<APITransactions, Partial<AllChannelEmitterOptions>, SimulatorAPIOptions>\n\timplements TransactionsMethods<ClientTransactions>\n{\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers?: Partial<TransactionsHandlers<APITransactions>>,\n\t\toptions?: Partial<AllChannelEmitterOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\t[APIRequestType.SetActiveSlice]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t[APIRequestType.SetSliceZoneSize]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorClientDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append client to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.client ||= []\n\t\t\twindow.prismic.sliceSimulator.client.push(this)\n\t\t}\n\t}\n\n\t[ClientRequestType.Ping]: TransactionMethod<ClientTransactions[ClientRequestType.Ping]> =\n\t\tasync () => {\n\t\t\treturn await this.postFormattedRequest(ClientRequestType.Ping)\n\t\t};\n\n\t[ClientRequestType.SetSliceZone]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.SetSliceZone]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.SetSliceZone, data)\n\t};\n\n\t[ClientRequestType.ScrollToSlice]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.ScrollToSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data)\n\t}\n}\n"],"mappings":";;;AAWA,MAAa,gCAAmE,EAC/E,iBAAiB,WACjB;AAED,IAAa,kBAAb,cACSA,uBAAAA,eAET;CACC,YACC,QACA,iBACA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC,QACA;IACEC,cAAAA,eAAe,kBAAkB,MAAM,QAAQ;AAC/C,WAAO,IAAI,SAAS;;IAEpBA,cAAAA,eAAe,oBAAoB,MAAM,QAAQ;AACjD,WAAO,IAAI,SAAS;;GAErB,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,WAAW,EAAE;AAC3C,UAAO,QAAQ,eAAe,OAAO,KAAK,KAAK;;;CAIjD,CAACC,cAAAA,kBAAkB,QAClB,YAAY;AACX,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,kBAAkB,KAAK;;CAGhE,CAACA,cAAAA,kBAAkB,gBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,kBAAkB,cAAc,KAAK;;CAG7E,CAACA,cAAAA,kBAAkB,iBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqBA,cAAAA,kBAAkB,eAAe,KAAK"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulatorClient.d.cts","names":[],"sources":["../src/SimulatorClient.ts"],"mappings":";;;;;;cAWa,6BAAA,EAA+B,OAAA,CAAQ,wBAAA;AAAA,cAIvC,eAAA,SACJ,cAAA,CAAe,eAAA,EAAiB,OAAA,CAAQ,wBAAA,GAA2B,mBAAA,aAChE,mBAAA,CAAoB,kBAAA;cAG9B,MAAA,EAAQ,iBAAA,EACR,eAAA,GAAkB,OAAA,CAAQ,oBAAA,CAAqB,eAAA,IAC/C,OAAA,GAAU,OAAA,CAAQ,wBAAA;EAAA,CAiClB,iBAAA,CAAkB,IAAA,GAAO,iBAAA,CAAkB,kBAAA,CAAmB,iBAAA,CAAkB,IAAA;EAAA,CAKhF,iBAAA,CAAkB,YAAA,GAAe,iBAAA,CACjC,kBAAA,CAAmB,iBAAA,CAAkB,YAAA;EAAA,CAKrC,iBAAA,CAAkB,aAAA,GAAgB,iBAAA,CAClC,kBAAA,CAAmB,iBAAA,CAAkB,aAAA;AAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulatorClient.d.ts","names":[],"sources":["../src/SimulatorClient.ts"],"mappings":";;;;;;cAWa,6BAAA,EAA+B,OAAA,CAAQ,wBAAA;AAAA,cAIvC,eAAA,SACJ,cAAA,CAAe,eAAA,EAAiB,OAAA,CAAQ,wBAAA,GAA2B,mBAAA,aAChE,mBAAA,CAAoB,kBAAA;cAG9B,MAAA,EAAQ,iBAAA,EACR,eAAA,GAAkB,OAAA,CAAQ,oBAAA,CAAqB,eAAA,IAC/C,OAAA,GAAU,OAAA,CAAQ,wBAAA;EAAA,CAiClB,iBAAA,CAAkB,IAAA,GAAO,iBAAA,CAAkB,kBAAA,CAAmB,iBAAA,CAAkB,IAAA;EAAA,CAKhF,iBAAA,CAAkB,YAAA,GAAe,iBAAA,CACjC,kBAAA,CAAmB,iBAAA,CAAkB,YAAA;EAAA,CAKrC,iBAAA,CAAkB,aAAA,GAAgB,iBAAA,CAClC,kBAAA,CAAmB,iBAAA,CAAkB,aAAA;AAAA"}
@@ -1,11 +1,10 @@
1
- import { APIRequestType, ClientRequestType } from "./types.js";
2
1
  import { ChannelEmitter } from "./channel/ChannelEmitter.js";
3
-
2
+ import { APIRequestType, ClientRequestType } from "./types.js";
4
3
  //#region src/SimulatorClient.ts
5
4
  const simulatorClientDefaultOptions = { requestIDPrefix: "client-" };
6
5
  var SimulatorClient = class extends ChannelEmitter {
7
6
  constructor(target, requestHandlers, options) {
8
- const debug = (options === null || options === void 0 ? void 0 : options.debug) || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
7
+ const debug = options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
9
8
  super(target, {
10
9
  [APIRequestType.SetActiveSlice]: (_req, res) => {
11
10
  return res.success();
@@ -20,10 +19,9 @@ var SimulatorClient = class extends ChannelEmitter {
20
19
  debug
21
20
  });
22
21
  if (debug) {
23
- var _window, _window$prismic, _window$prismic$slice;
24
- (_window = window).prismic || (_window.prismic = {});
25
- (_window$prismic = window.prismic).sliceSimulator || (_window$prismic.sliceSimulator = {});
26
- (_window$prismic$slice = window.prismic.sliceSimulator).client || (_window$prismic$slice.client = []);
22
+ window.prismic ||= {};
23
+ window.prismic.sliceSimulator ||= {};
24
+ window.prismic.sliceSimulator.client ||= [];
27
25
  window.prismic.sliceSimulator.client.push(this);
28
26
  }
29
27
  }
@@ -37,7 +35,7 @@ var SimulatorClient = class extends ChannelEmitter {
37
35
  return await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data);
38
36
  };
39
37
  };
40
-
41
38
  //#endregion
42
39
  export { SimulatorClient, simulatorClientDefaultOptions };
40
+
43
41
  //# sourceMappingURL=SimulatorClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimulatorClient.js","names":[],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\tAPITransactions,\n\tClientTransactions} from \"./types\";\nimport {\n\tAPIRequestType,\n\tClientRequestType\n} from \"./types\"\n\nimport type { SimulatorAPIOptions } from \"./SimulatorAPI\"\nimport type {\n\tAllChannelEmitterOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods} from \"./channel\";\nimport {\n\tChannelEmitter\n} from \"./channel\"\n\nexport const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> =\n\t{\n\t\trequestIDPrefix: \"client-\",\n\t}\n\nexport class SimulatorClient\n\textends ChannelEmitter<\n\t\tAPITransactions,\n\t\tPartial<AllChannelEmitterOptions>,\n\t\tSimulatorAPIOptions\n\t>\n\timplements TransactionsMethods<ClientTransactions>\n{\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers?: Partial<TransactionsHandlers<APITransactions>>,\n\t\toptions?: Partial<AllChannelEmitterOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug ||\n\t\t\t/[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\t[APIRequestType.SetActiveSlice]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t[APIRequestType.SetSliceZoneSize]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorClientDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append client to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.client ||= []\n\t\t\twindow.prismic.sliceSimulator.client.push(this)\n\t\t}\n\t}\n\n\t[ClientRequestType.Ping]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.Ping]\n\t> = async () => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.Ping)\n\t};\n\n\t[ClientRequestType.SetSliceZone]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.SetSliceZone]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.SetSliceZone, data)\n\t};\n\n\t[ClientRequestType.ScrollToSlice]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.ScrollToSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(\n\t\t\tClientRequestType.ScrollToSlice,\n\t\t\tdata,\n\t\t)\n\t}\n}\n"],"mappings":";;;;AAkBA,MAAa,gCACZ,EACC,iBAAiB,WACjB;AAEF,IAAa,kBAAb,cACS,eAMT;CACC,YACC,QACA,iBACA,SACC;EAED,MAAM,2DACL,QAAS,UACT,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAEnE,QACC,QACA;IACE,eAAe,kBAAkB,MAAM,QAAQ;AAC/C,WAAO,IAAI,SAAS;;IAEpB,eAAe,oBAAoB,MAAM,QAAQ;AACjD,WAAO,IAAI,SAAS;;GAErB,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;;AACV,sBAAO,8BAAY,EAAE;AACrB,6BAAO,SAAQ,oDAAmB,EAAE;AACpC,mCAAO,QAAQ,gBAAe,0CAAW,EAAE;AAC3C,UAAO,QAAQ,eAAe,OAAO,KAAK,KAAK;;;CAIjD,CAAC,kBAAkB,QAEf,YAAY;AACf,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,KAAK;;CAG/D,CAAC,kBAAkB,gBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,cAAc,KAAK;;CAG7E,CAAC,kBAAkB,iBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBACjB,kBAAkB,eAClB,KACA"}
1
+ {"version":3,"file":"SimulatorClient.js","names":[],"sources":["../src/SimulatorClient.ts"],"sourcesContent":["import type {\n\tAllChannelEmitterOptions,\n\tTransactionMethod,\n\tTransactionsHandlers,\n\tTransactionsMethods,\n} from \"./channel\"\nimport { ChannelEmitter } from \"./channel\"\nimport type { SimulatorAPIOptions } from \"./SimulatorAPI\"\nimport type { APITransactions, ClientTransactions } from \"./types\"\nimport { APIRequestType, ClientRequestType } from \"./types\"\n\nexport const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> = {\n\trequestIDPrefix: \"client-\",\n}\n\nexport class SimulatorClient\n\textends ChannelEmitter<APITransactions, Partial<AllChannelEmitterOptions>, SimulatorAPIOptions>\n\timplements TransactionsMethods<ClientTransactions>\n{\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers?: Partial<TransactionsHandlers<APITransactions>>,\n\t\toptions?: Partial<AllChannelEmitterOptions>,\n\t) {\n\t\t// True if `options.debug` is true or `debug=true` is among query parameters\n\t\tconst debug =\n\t\t\toptions?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))\n\n\t\tsuper(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\t[APIRequestType.SetActiveSlice]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t[APIRequestType.SetSliceZoneSize]: (_req, res) => {\n\t\t\t\t\treturn res.success()\n\t\t\t\t},\n\t\t\t\t...requestHandlers,\n\t\t\t},\n\t\t\t{\n\t\t\t\t...simulatorClientDefaultOptions,\n\t\t\t\t...options,\n\t\t\t\tdebug,\n\t\t\t},\n\t\t)\n\n\t\t// Append client to window object\n\t\tif (debug) {\n\t\t\twindow.prismic ||= {}\n\t\t\twindow.prismic.sliceSimulator ||= {}\n\t\t\twindow.prismic.sliceSimulator.client ||= []\n\t\t\twindow.prismic.sliceSimulator.client.push(this)\n\t\t}\n\t}\n\n\t[ClientRequestType.Ping]: TransactionMethod<ClientTransactions[ClientRequestType.Ping]> =\n\t\tasync () => {\n\t\t\treturn await this.postFormattedRequest(ClientRequestType.Ping)\n\t\t};\n\n\t[ClientRequestType.SetSliceZone]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.SetSliceZone]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.SetSliceZone, data)\n\t};\n\n\t[ClientRequestType.ScrollToSlice]: TransactionMethod<\n\t\tClientTransactions[ClientRequestType.ScrollToSlice]\n\t> = async (data) => {\n\t\treturn await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data)\n\t}\n}\n"],"mappings":";;;AAWA,MAAa,gCAAmE,EAC/E,iBAAiB,WACjB;AAED,IAAa,kBAAb,cACS,eAET;CACC,YACC,QACA,iBACA,SACC;EAED,MAAM,QACL,SAAS,SAAS,kBAAkB,KAAK,mBAAmB,OAAO,SAAS,OAAO,CAAC;AAErF,QACC,QACA;IACE,eAAe,kBAAkB,MAAM,QAAQ;AAC/C,WAAO,IAAI,SAAS;;IAEpB,eAAe,oBAAoB,MAAM,QAAQ;AACjD,WAAO,IAAI,SAAS;;GAErB,GAAG;GACH,EACD;GACC,GAAG;GACH,GAAG;GACH;GACA,CACD;AAGD,MAAI,OAAO;AACV,UAAO,YAAY,EAAE;AACrB,UAAO,QAAQ,mBAAmB,EAAE;AACpC,UAAO,QAAQ,eAAe,WAAW,EAAE;AAC3C,UAAO,QAAQ,eAAe,OAAO,KAAK,KAAK;;;CAIjD,CAAC,kBAAkB,QAClB,YAAY;AACX,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,KAAK;;CAGhE,CAAC,kBAAkB,gBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,cAAc,KAAK;;CAG7E,CAAC,kBAAkB,iBAEf,OAAO,SAAS;AACnB,SAAO,MAAM,KAAK,qBAAqB,kBAAkB,eAAe,KAAK"}
@@ -1,8 +1,7 @@
1
- const require_errors = require('./errors.cjs');
2
- const require_messages = require('./messages.cjs');
3
- const require_ChannelNetwork = require('./ChannelNetwork.cjs');
4
- const require_types = require('./types.cjs');
5
-
1
+ const require_errors = require("./errors.cjs");
2
+ const require_messages = require("./messages.cjs");
3
+ const require_ChannelNetwork = require("./ChannelNetwork.cjs");
4
+ const require_types = require("./types.cjs");
6
5
  //#region src/channel/ChannelEmitter.ts
7
6
  const channelEmitterDefaultOptions = {
8
7
  connectTimeout: 2e4,
@@ -40,9 +39,7 @@ var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
40
39
  * Initiates connection to receiver
41
40
  *
42
41
  * @param receiverOptions - Options to configure the receiver with
43
- * @param newOrigin - Indicates to the emitter that we're connecting to a new
44
- * origin
45
- *
42
+ * @param newOrigin - Indicates to the emitter that we're connecting to a new origin
46
43
  * @returns Success connect message
47
44
  */
48
45
  connect(receiverOptions = {}, newOrigin = false) {
@@ -58,11 +55,11 @@ var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
58
55
  clearTimeout(receiverReadyTimeout);
59
56
  this.channel = new MessageChannel();
60
57
  const request = this.createRequestMessage(require_types.InternalEmitterRequestType.Connect, receiverOptions);
61
- const response = await this.postRequest(request, (request$1) => {
62
- this._target.contentWindow.postMessage(request$1, "*", [this.channel.port2]);
58
+ const response = await this.postRequest(request, (request) => {
59
+ this._target.contentWindow.postMessage(request, "*", [this.channel.port2]);
63
60
  });
64
- this.postResponse(require_messages.createSuccessResponseMessage(this._receiverReady, void 0), (response$1) => {
65
- this._target.contentWindow.postMessage(response$1, "*");
61
+ this.postResponse(require_messages.createSuccessResponseMessage(this._receiverReady, void 0), (response) => {
62
+ this._target.contentWindow.postMessage(response, "*");
66
63
  });
67
64
  this._connected = true;
68
65
  resolve(response);
@@ -109,7 +106,7 @@ var ChannelEmitter = class extends require_ChannelNetwork.ChannelNetwork {
109
106
  return this.postRequest(this.createRequestMessage(type, data), void 0, options);
110
107
  }
111
108
  };
112
-
113
109
  //#endregion
114
110
  exports.ChannelEmitter = ChannelEmitter;
111
+
115
112
  //# sourceMappingURL=ChannelEmitter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelEmitter.cjs","names":["ChannelNetwork","ChannelNotSetError","ConnectionTimeoutError","InternalEmitterRequestType","request","createSuccessResponseMessage","response","validateMessage","isRequestMessage","InternalReceiverRequestType","createErrorResponseMessage","NotReadyError"],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction} from \"./types\";\nimport {\n\tInternalEmitterRequestType,\n\tInternalReceiverRequestType\n} from \"./types\"\n\nimport {\n\tChannelNotSetError,\n\tConnectionTimeoutError,\n\tNotReadyError,\n} from \"./errors\"\n\nimport type {\n\tChannelNetworkOptions,\n\tPostRequestOptions} from \"./ChannelNetwork\";\nimport {\n\tChannelNetwork\n} from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions &\n\tPartial<ChannelNetworkOptions> = {\n\tconnectTimeout: 20000,\n\trequestIDPrefix: \"emitter-\",\n}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions &\n\tChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<\n\t\tstring,\n\t\tnever\n\t>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<\n\tTReceiverTransactions,\n\tChannelEmitterOptions & TOptions\n> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new\n\t * origin\n\t *\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [\n\t\t\t\t\t\t\t\tthis.channel.port2,\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(\n\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t\tevent.origin,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\n\t\t\t\t\"Emitter is not connected, use `ChannelEmitter.connect()` first\",\n\t\t\t)\n\t\t}\n\n\t\treturn this.postRequest(\n\t\t\tthis.createRequestMessage(type, data),\n\t\t\tundefined,\n\t\t\toptions,\n\t\t)\n\t}\n}\n"],"mappings":";;;;;;AAqCA,MAAa,+BACqB;CACjC,gBAAgB;CAChB,iBAAiB;CACjB;AAKD,IAAsB,iBAAtB,cAOUA,sCAGR;CACD,AAAQ;CACR,AAAQ,WAAkC;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAIC,mCAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,AAAQ,iBAAiB;CACzB,AAAQ,yBAAuD;CAC/D,AAAQ,aAAa;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;;;CAYH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAIC,uCAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpBC,yCAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,cAAY;AAGvB,WAAK,QAAQ,cAAe,YAAYC,WAAS,KAAK,CACrD,KAAK,QAAQ,MACb,CAAC;OACD;AAGF,UAAK,aACJC,8CAA6B,KAAK,gBAAgB,OAAU,GAC3D,eAAa;AAGb,WAAK,QAAQ,cAAe,YAAYC,YAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAUC,iCAAgB,MAAM,KAAK;AAE3C,OAAIC,kCAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAKC,0CAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJC,4CAA2B,QAAQ,WAAW,OAAU,GACvD,aAAa;AACZ,OAAC,MAAM,OAAuB,YAC9B,UACA,MAAM,OACN;QAEF;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,AAAU,qBAIT,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAIC,6BACT,iEACA;AAGF,SAAO,KAAK,YACX,KAAK,qBAAqB,MAAM,KAAK,EACrC,QACA,QACA"}
1
+ {"version":3,"file":"ChannelEmitter.cjs","names":["ChannelNetwork","ChannelNotSetError","ConnectionTimeoutError","InternalEmitterRequestType","createSuccessResponseMessage","validateMessage","isRequestMessage","InternalReceiverRequestType","createErrorResponseMessage","NotReadyError"],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type { ChannelNetworkOptions, PostRequestOptions } from \"./ChannelNetwork\"\nimport { ChannelNetwork } from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from \"./errors\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\nimport type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\nimport { InternalEmitterRequestType, InternalReceiverRequestType } from \"./types\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions & Partial<ChannelNetworkOptions> =\n\t{\n\t\tconnectTimeout: 20000,\n\t\trequestIDPrefix: \"emitter-\",\n\t}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new origin\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [this.channel.port2])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(response, event.origin)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\"Emitter is not connected, use `ChannelEmitter.connect()` first\")\n\t\t}\n\n\t\treturn this.postRequest(this.createRequestMessage(type, data), undefined, options)\n\t}\n}\n"],"mappings":";;;;;AAyBA,MAAa,+BACZ;CACC,gBAAgB;CAChB,iBAAiB;CACjB;AAIF,IAAsB,iBAAtB,cAIUA,uBAAAA,eAAwE;CACjF;CACA,WAA0C;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAIC,eAAAA,oBAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,iBAAyB;CACzB,yBAA+D;CAC/D,aAAqB;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;CAUH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAIC,eAAAA,wBAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpBC,cAAAA,2BAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,YAAY;AAGvB,WAAK,QAAQ,cAAe,YAAY,SAAS,KAAK,CAAC,KAAK,QAAQ,MAAM,CAAC;OAC1E;AAGF,UAAK,aACJC,iBAAAA,6BAA6B,KAAK,gBAAgB,KAAA,EAAU,GAC3D,aAAa;AAGb,WAAK,QAAQ,cAAe,YAAY,UAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAUC,iBAAAA,gBAAgB,MAAM,KAAK;AAE3C,OAAIC,iBAAAA,iBAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAKC,cAAAA,4BAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJC,iBAAAA,2BAA2B,QAAQ,WAAW,KAAA,EAAU,GACvD,aAAa;AACX,aAAM,OAAuB,YAAY,UAAU,MAAM,OAAO;QAEnE;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,qBAIC,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAIC,eAAAA,cAAc,iEAAiE;AAG1F,SAAO,KAAK,YAAY,KAAK,qBAAqB,MAAM,KAAK,EAAE,KAAA,GAAW,QAAQ"}
@@ -21,9 +21,7 @@ declare abstract class ChannelEmitter<TReceiverTransactions extends Record<strin
21
21
  * Initiates connection to receiver
22
22
  *
23
23
  * @param receiverOptions - Options to configure the receiver with
24
- * @param newOrigin - Indicates to the emitter that we're connecting to a new
25
- * origin
26
- *
24
+ * @param newOrigin - Indicates to the emitter that we're connecting to a new origin
27
25
  * @returns Success connect message
28
26
  */
29
27
  connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelEmitter.d.cts","names":[],"sources":["../../src/channel/ChannelEmitter.ts"],"mappings":";;;;;KAqBY,qBAAA;EACX,cAAA;AAAA;AAAA,KASW,wBAAA,GAA2B,qBAAA,GAAwB,qBAAA;AAAA,uBAEzC,cAAA,+BACS,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCAClD,MAAA,oBAA0B,MAAA,4CAClB,MAAA,oBAA0B,MAAA,2BAC1C,cAAA,CAAe,qBAAA,EAAuB,qBAAA,GAAwB,QAAA;EAAA,QAC/D,OAAA;EAAA,QACA,QAAA;EAAA,cACM,OAAA,CAAA,GAAW,cAAA;EAAA,cAOX,OAAA,CAAQ,OAAA,EAAS,cAAA;EAAA,QAUvB,cAAA;EAAA,QACA,sBAAA;EAAA,QACA,UAAA;EAAA,IACG,SAAA,CAAA;cAKV,MAAA,EAAQ,iBAAA,EACR,eAAA,EAAiB,oBAAA,CAAqB,qBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,wBAAA,IAA4B,QAAA;EAjChB;;;;;;;EAmD9B,OAAA,CACC,eAAA,GAAiB,2BAAA,CAChB,yBAAA,GAA4B,gBAAA,iCAE7B,SAAA,aACE,OAAA,CAAQ,sBAAA;EArD4D;EAsIvE,UAAA,CAAA;EA5H+B;EAAA,QAkIjB,gBAAA;EAAA,UAmDJ,oBAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,IAAA,EAAM,QAAA,UACN,IAAA,GAAO,QAAA,UACP,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;AAAA"}
@@ -21,9 +21,7 @@ declare abstract class ChannelEmitter<TReceiverTransactions extends Record<strin
21
21
  * Initiates connection to receiver
22
22
  *
23
23
  * @param receiverOptions - Options to configure the receiver with
24
- * @param newOrigin - Indicates to the emitter that we're connecting to a new
25
- * origin
26
- *
24
+ * @param newOrigin - Indicates to the emitter that we're connecting to a new origin
27
25
  * @returns Success connect message
28
26
  */
29
27
  connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelEmitter.d.ts","names":[],"sources":["../../src/channel/ChannelEmitter.ts"],"mappings":";;;;;KAqBY,qBAAA;EACX,cAAA;AAAA;AAAA,KASW,wBAAA,GAA2B,qBAAA,GAAwB,qBAAA;AAAA,uBAEzC,cAAA,+BACS,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCAClD,MAAA,oBAA0B,MAAA,4CAClB,MAAA,oBAA0B,MAAA,2BAC1C,cAAA,CAAe,qBAAA,EAAuB,qBAAA,GAAwB,QAAA;EAAA,QAC/D,OAAA;EAAA,QACA,QAAA;EAAA,cACM,OAAA,CAAA,GAAW,cAAA;EAAA,cAOX,OAAA,CAAQ,OAAA,EAAS,cAAA;EAAA,QAUvB,cAAA;EAAA,QACA,sBAAA;EAAA,QACA,UAAA;EAAA,IACG,SAAA,CAAA;cAKV,MAAA,EAAQ,iBAAA,EACR,eAAA,EAAiB,oBAAA,CAAqB,qBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,wBAAA,IAA4B,QAAA;EAjChB;;;;;;;EAmD9B,OAAA,CACC,eAAA,GAAiB,2BAAA,CAChB,yBAAA,GAA4B,gBAAA,iCAE7B,SAAA,aACE,OAAA,CAAQ,sBAAA;EArD4D;EAsIvE,UAAA,CAAA;EA5H+B;EAAA,QAkIjB,gBAAA;EAAA,UAmDJ,oBAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,IAAA,EAAM,QAAA,UACN,IAAA,GAAO,QAAA,UACP,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;AAAA"}
@@ -2,7 +2,6 @@ import { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from "./err
2
2
  import { createErrorResponseMessage, createSuccessResponseMessage, isRequestMessage, validateMessage } from "./messages.js";
3
3
  import { ChannelNetwork } from "./ChannelNetwork.js";
4
4
  import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types.js";
5
-
6
5
  //#region src/channel/ChannelEmitter.ts
7
6
  const channelEmitterDefaultOptions = {
8
7
  connectTimeout: 2e4,
@@ -40,9 +39,7 @@ var ChannelEmitter = class extends ChannelNetwork {
40
39
  * Initiates connection to receiver
41
40
  *
42
41
  * @param receiverOptions - Options to configure the receiver with
43
- * @param newOrigin - Indicates to the emitter that we're connecting to a new
44
- * origin
45
- *
42
+ * @param newOrigin - Indicates to the emitter that we're connecting to a new origin
46
43
  * @returns Success connect message
47
44
  */
48
45
  connect(receiverOptions = {}, newOrigin = false) {
@@ -58,11 +55,11 @@ var ChannelEmitter = class extends ChannelNetwork {
58
55
  clearTimeout(receiverReadyTimeout);
59
56
  this.channel = new MessageChannel();
60
57
  const request = this.createRequestMessage(InternalEmitterRequestType.Connect, receiverOptions);
61
- const response = await this.postRequest(request, (request$1) => {
62
- this._target.contentWindow.postMessage(request$1, "*", [this.channel.port2]);
58
+ const response = await this.postRequest(request, (request) => {
59
+ this._target.contentWindow.postMessage(request, "*", [this.channel.port2]);
63
60
  });
64
- this.postResponse(createSuccessResponseMessage(this._receiverReady, void 0), (response$1) => {
65
- this._target.contentWindow.postMessage(response$1, "*");
61
+ this.postResponse(createSuccessResponseMessage(this._receiverReady, void 0), (response) => {
62
+ this._target.contentWindow.postMessage(response, "*");
66
63
  });
67
64
  this._connected = true;
68
65
  resolve(response);
@@ -109,7 +106,7 @@ var ChannelEmitter = class extends ChannelNetwork {
109
106
  return this.postRequest(this.createRequestMessage(type, data), void 0, options);
110
107
  }
111
108
  };
112
-
113
109
  //#endregion
114
110
  export { ChannelEmitter };
111
+
115
112
  //# sourceMappingURL=ChannelEmitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelEmitter.js","names":["request","response"],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction} from \"./types\";\nimport {\n\tInternalEmitterRequestType,\n\tInternalReceiverRequestType\n} from \"./types\"\n\nimport {\n\tChannelNotSetError,\n\tConnectionTimeoutError,\n\tNotReadyError,\n} from \"./errors\"\n\nimport type {\n\tChannelNetworkOptions,\n\tPostRequestOptions} from \"./ChannelNetwork\";\nimport {\n\tChannelNetwork\n} from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions &\n\tPartial<ChannelNetworkOptions> = {\n\tconnectTimeout: 20000,\n\trequestIDPrefix: \"emitter-\",\n}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions &\n\tChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<\n\t\tstring,\n\t\tnever\n\t>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<\n\tTReceiverTransactions,\n\tChannelEmitterOptions & TOptions\n> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new\n\t * origin\n\t *\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [\n\t\t\t\t\t\t\t\tthis.channel.port2,\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(\n\t\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\t\tevent.origin,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\n\t\t\t\t\"Emitter is not connected, use `ChannelEmitter.connect()` first\",\n\t\t\t)\n\t\t}\n\n\t\treturn this.postRequest(\n\t\t\tthis.createRequestMessage(type, data),\n\t\t\tundefined,\n\t\t\toptions,\n\t\t)\n\t}\n}\n"],"mappings":";;;;;;AAqCA,MAAa,+BACqB;CACjC,gBAAgB;CAChB,iBAAiB;CACjB;AAKD,IAAsB,iBAAtB,cAOU,eAGR;CACD,AAAQ;CACR,AAAQ,WAAkC;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAI,oBAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,AAAQ,iBAAiB;CACzB,AAAQ,yBAAuD;CAC/D,AAAQ,aAAa;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;;;CAYH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAI,wBAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpB,2BAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,cAAY;AAGvB,WAAK,QAAQ,cAAe,YAAYA,WAAS,KAAK,CACrD,KAAK,QAAQ,MACb,CAAC;OACD;AAGF,UAAK,aACJ,6BAA6B,KAAK,gBAAgB,OAAU,GAC3D,eAAa;AAGb,WAAK,QAAQ,cAAe,YAAYC,YAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAU,gBAAgB,MAAM,KAAK;AAE3C,OAAI,iBAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAK,4BAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJ,2BAA2B,QAAQ,WAAW,OAAU,GACvD,aAAa;AACZ,OAAC,MAAM,OAAuB,YAC9B,UACA,MAAM,OACN;QAEF;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,AAAU,qBAIT,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAI,cACT,iEACA;AAGF,SAAO,KAAK,YACX,KAAK,qBAAqB,MAAM,KAAK,EACrC,QACA,QACA"}
1
+ {"version":3,"file":"ChannelEmitter.js","names":[],"sources":["../../src/channel/ChannelEmitter.ts"],"sourcesContent":["import type { ChannelNetworkOptions, PostRequestOptions } from \"./ChannelNetwork\"\nimport { ChannelNetwork } from \"./ChannelNetwork\"\nimport type { AllChannelReceiverOptions } from \"./ChannelReceiver\"\nimport { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from \"./errors\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tvalidateMessage,\n} from \"./messages\"\nimport type {\n\tExtractSuccessResponseMessage,\n\tInternalEmitterTransactions,\n\tSuccessResponseMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\nimport { InternalEmitterRequestType, InternalReceiverRequestType } from \"./types\"\n\nexport type ChannelEmitterOptions = {\n\tconnectTimeout: number\n}\n\nexport const channelEmitterDefaultOptions: ChannelEmitterOptions & Partial<ChannelNetworkOptions> =\n\t{\n\t\tconnectTimeout: 20000,\n\t\trequestIDPrefix: \"emitter-\",\n\t}\n\nexport type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions\n\nexport abstract class ChannelEmitter<\n\tTReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {\n\tprivate _target: HTMLIFrameElement\n\tprivate _channel: MessageChannel | null = null\n\tprotected get channel(): MessageChannel {\n\t\tif (!this._channel) {\n\t\t\tthrow new ChannelNotSetError()\n\t\t}\n\n\t\treturn this._channel\n\t}\n\tprotected set channel(channel: MessageChannel | null) {\n\t\tthis._channel = channel\n\n\t\t// Update port automatically\n\t\tif (this._channel) {\n\t\t\tthis.port = this._channel.port1\n\t\t} else {\n\t\t\tthis.port = null\n\t\t}\n\t}\n\tprivate _receiverReady = \"\"\n\tprivate _receiverReadyCallback: (() => Promise<void>) | null = null\n\tprivate _connected = false\n\tpublic get connected(): boolean {\n\t\treturn this._connected\n\t}\n\n\tconstructor(\n\t\ttarget: HTMLIFrameElement,\n\t\trequestHandlers: TransactionsHandlers<TReceiverTransactions>,\n\t\toptions: Partial<AllChannelEmitterOptions> & TOptions,\n\t) {\n\t\tsuper(requestHandlers, { ...channelEmitterDefaultOptions, ...options })\n\n\t\tthis._target = target\n\n\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\tthis._onPublicMessage(event)\n\t\t})\n\t}\n\n\t/**\n\t * Initiates connection to receiver\n\t *\n\t * @param receiverOptions - Options to configure the receiver with\n\t * @param newOrigin - Indicates to the emitter that we're connecting to a new origin\n\t * @returns Success connect message\n\t */\n\tconnect(\n\t\treceiverOptions: InternalEmitterTransactions<\n\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t>[\"connect\"][\"request\"][\"data\"] = {},\n\t\tnewOrigin = false,\n\t): Promise<SuccessResponseMessage> {\n\t\t// Disconnect first\n\t\tthis.disconnect()\n\t\t// If changing origin we'll need to wait for receiver to be ready again\n\t\tif (newOrigin) {\n\t\t\tthis._receiverReady = \"\"\n\t\t}\n\n\t\t// Handshake promise\n\t\treturn new Promise<SuccessResponseMessage>((resolve, reject) => {\n\t\t\t// Wait for target to be loaded\n\t\t\tthis._target.addEventListener(\n\t\t\t\t\"load\",\n\t\t\t\t() => {\n\t\t\t\t\t// Throw if target doesn't allow access to content window\n\t\t\t\t\tif (!this._target.contentWindow) {\n\t\t\t\t\t\treturn reject(new Error(\"Target window is not available\"))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receiverReadyTimeout = setTimeout(() => {\n\t\t\t\t\t\treject(new ConnectionTimeoutError())\n\t\t\t\t\t}, this.options.connectTimeout)\n\n\t\t\t\t\t// Connect to target once ready\n\t\t\t\t\tconst receiverReadyCallback = async (): Promise<void> => {\n\t\t\t\t\t\t// Clear receiver ready timeout\n\t\t\t\t\t\tclearTimeout(receiverReadyTimeout)\n\n\t\t\t\t\t\t// Create new message channel (set up port automatically)\n\t\t\t\t\t\t// This is done here to prevent transferable objects neutering\n\t\t\t\t\t\t// when calling `connect()` multiple times\n\t\t\t\t\t\tthis.channel = new MessageChannel()\n\n\t\t\t\t\t\t// Conclude handshake by sending message channel port to target\n\t\t\t\t\t\tconst request = this.createRequestMessage(\n\t\t\t\t\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t\t\t\t\treceiverOptions,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst response = await this.postRequest<\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"request\"],\n\t\t\t\t\t\t\tInternalEmitterTransactions<\n\t\t\t\t\t\t\t\tAllChannelReceiverOptions & TReceiverOptions\n\t\t\t\t\t\t\t>[\"connect\"][\"response\"]\n\t\t\t\t\t\t>(request, (request) => {\n\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(request, \"*\", [this.channel.port2])\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Finish by aknowledging ready\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateSuccessResponseMessage(this._receiverReady, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t// Target content window is checked in previous statement\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tthis._target.contentWindow!.postMessage(response, \"*\")\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// If post request succeed, we're connected\n\t\t\t\t\t\tthis._connected = true\n\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._receiverReady) {\n\t\t\t\t\t\t// If receiver is already ready, send port immediately\n\t\t\t\t\t\treceiverReadyCallback()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else wait for receiver to be ready\n\t\t\t\t\t\tthis._receiverReadyCallback = receiverReadyCallback\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t)\n\t\t})\n\t}\n\n\t/** Destroys current connection to receiver if any */\n\tdisconnect(): void {\n\t\tthis._connected = false\n\t\tthis.channel = null\n\t}\n\n\t/** Handles public messages */\n\tprivate async _onPublicMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\t// Return is event is not from target\n\t\tif (event.source !== this._target.contentWindow) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.debug(event.data)\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase InternalReceiverRequestType.Ready:\n\t\t\t\t\t\tthis._receiverReady = message.requestID\n\n\t\t\t\t\t\t// If emitter is waiting for receiver to be ready\n\t\t\t\t\t\tif (this._receiverReadyCallback) {\n\t\t\t\t\t\t\t// We don't await the promise directly as we need to clear the callback first\n\t\t\t\t\t\t\tconst receiverReadyCallbackPromise = this._receiverReadyCallback()\n\n\t\t\t\t\t\t\tthis._receiverReadyCallback = null\n\n\t\t\t\t\t\t\tawait receiverReadyCallbackPromise\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined),\n\t\t\t\t\t\t\t(response) => {\n\t\t\t\t\t\t\t\t;(event.source as WindowProxy).postMessage(response, event.origin)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No response messages are expected on public channel\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\t// Ignore unknown messages\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postFormattedRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\ttype: TRequest[\"type\"],\n\t\tdata?: TRequest[\"data\"],\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (!this._connected) {\n\t\t\tthrow new NotReadyError(\"Emitter is not connected, use `ChannelEmitter.connect()` first\")\n\t\t}\n\n\t\treturn this.postRequest(this.createRequestMessage(type, data), undefined, options)\n\t}\n}\n"],"mappings":";;;;;AAyBA,MAAa,+BACZ;CACC,gBAAgB;CAChB,iBAAiB;CACjB;AAIF,IAAsB,iBAAtB,cAIU,eAAwE;CACjF;CACA,WAA0C;CAC1C,IAAc,UAA0B;AACvC,MAAI,CAAC,KAAK,SACT,OAAM,IAAI,oBAAoB;AAG/B,SAAO,KAAK;;CAEb,IAAc,QAAQ,SAAgC;AACrD,OAAK,WAAW;AAGhB,MAAI,KAAK,SACR,MAAK,OAAO,KAAK,SAAS;MAE1B,MAAK,OAAO;;CAGd,iBAAyB;CACzB,yBAA+D;CAC/D,aAAqB;CACrB,IAAW,YAAqB;AAC/B,SAAO,KAAK;;CAGb,YACC,QACA,iBACA,SACC;AACD,QAAM,iBAAiB;GAAE,GAAG;GAA8B,GAAG;GAAS,CAAC;AAEvE,OAAK,UAAU;AAEf,SAAO,iBAAiB,YAAY,UAAU;AAC7C,QAAK,iBAAiB,MAAM;IAC3B;;;;;;;;;CAUH,QACC,kBAEkC,EAAE,EACpC,YAAY,OACsB;AAElC,OAAK,YAAY;AAEjB,MAAI,UACH,MAAK,iBAAiB;AAIvB,SAAO,IAAI,SAAiC,SAAS,WAAW;AAE/D,QAAK,QAAQ,iBACZ,cACM;AAEL,QAAI,CAAC,KAAK,QAAQ,cACjB,QAAO,uBAAO,IAAI,MAAM,iCAAiC,CAAC;IAG3D,MAAM,uBAAuB,iBAAiB;AAC7C,YAAO,IAAI,wBAAwB,CAAC;OAClC,KAAK,QAAQ,eAAe;IAG/B,MAAM,wBAAwB,YAA2B;AAExD,kBAAa,qBAAqB;AAKlC,UAAK,UAAU,IAAI,gBAAgB;KAGnC,MAAM,UAAU,KAAK,qBACpB,2BAA2B,SAC3B,gBACA;KACD,MAAM,WAAW,MAAM,KAAK,YAO1B,UAAU,YAAY;AAGvB,WAAK,QAAQ,cAAe,YAAY,SAAS,KAAK,CAAC,KAAK,QAAQ,MAAM,CAAC;OAC1E;AAGF,UAAK,aACJ,6BAA6B,KAAK,gBAAgB,KAAA,EAAU,GAC3D,aAAa;AAGb,WAAK,QAAQ,cAAe,YAAY,UAAU,IAAI;OAEvD;AAGD,UAAK,aAAa;AAElB,aAAQ,SAAS;;AAGlB,QAAI,KAAK,eAER,wBAAuB;QAGvB,MAAK,yBAAyB;MAGhC,EAAE,MAAM,MAAM,CACd;IACA;;;CAIH,aAAmB;AAClB,OAAK,aAAa;AAClB,OAAK,UAAU;;;CAIhB,MAAc,iBAAiB,OAA6C;AAE3E,MAAI,MAAM,WAAW,KAAK,QAAQ,cACjC;AAGD,MAAI;GACH,MAAM,UAAU,gBAAgB,MAAM,KAAK;AAE3C,OAAI,iBAAiB,QAAQ,EAAE;AAC9B,QAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,YAAQ,QAAQ,MAAhB;KACC,KAAK,4BAA4B;AAChC,WAAK,iBAAiB,QAAQ;AAG9B,UAAI,KAAK,wBAAwB;OAEhC,MAAM,+BAA+B,KAAK,wBAAwB;AAElE,YAAK,yBAAyB;AAE9B,aAAM;;AAEP;KAED;AACC,WAAK,aACJ,2BAA2B,QAAQ,WAAW,KAAA,EAAU,GACvD,aAAa;AACX,aAAM,OAAuB,YAAY,UAAU,MAAM,OAAO;QAEnE;AACD;;;WAKK,OAAO;AACf,OAAI,iBAAiB,WAAW,OAG/B,OAAM;;;CAKT,qBAIC,MACA,MACA,UAA8B,EAAE,EACoB;AACpD,MAAI,CAAC,KAAK,WACT,OAAM,IAAI,cAAc,iEAAiE;AAG1F,SAAO,KAAK,YAAY,KAAK,qBAAqB,MAAM,KAAK,EAAE,KAAA,GAAW,QAAQ"}
@@ -1,6 +1,5 @@
1
- const require_errors = require('./errors.cjs');
2
- const require_messages = require('./messages.cjs');
3
-
1
+ const require_errors = require("./errors.cjs");
2
+ const require_messages = require("./messages.cjs");
4
3
  //#region src/channel/ChannelNetwork.ts
5
4
  const channelNetworkDefaultOptions = {
6
5
  debug: false,
@@ -56,7 +55,7 @@ var ChannelNetwork = class {
56
55
  else throw error;
57
56
  }
58
57
  }
59
- postRequest(request, postMessage = (request$1) => this.port.postMessage(request$1), options = {}) {
58
+ postRequest(request, postMessage = (request) => this.port.postMessage(request), options = {}) {
60
59
  if (this.options.debug) console.debug(request);
61
60
  if (this._pendingRequests.size >= this.options.maximumRequestConcurrency) throw new require_errors.TooManyConcurrentRequestsError(request);
62
61
  return new Promise((resolve, reject) => {
@@ -72,13 +71,13 @@ var ChannelNetwork = class {
72
71
  postMessage(request);
73
72
  });
74
73
  }
75
- postResponse(response, postMessage = (response$1) => this.port.postMessage(response$1)) {
74
+ postResponse(response, postMessage = (response) => this.port.postMessage(response)) {
76
75
  if (this.options.debug) console.debug(response);
77
76
  postMessage(response);
78
77
  return response;
79
78
  }
80
79
  };
81
-
82
80
  //#endregion
83
81
  exports.ChannelNetwork = ChannelNetwork;
82
+
84
83
  //# sourceMappingURL=ChannelNetwork.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelNetwork.cjs","names":["PortNotSetError","createRequestMessage","validateMessage","isRequestMessage","createErrorResponseMessage","createSuccessResponseMessage","request","TooManyConcurrentRequestsError","RequestTimeoutError","isSuccessResponseMessage","ResponseError","response"],"sources":["../../src/channel/ChannelNetwork.ts"],"sourcesContent":["import type {\n\tExtractErrorResponseMessage,\n\tExtractSuccessResponseMessage,\n\tRequestMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\n\nimport {\n\tPortNotSetError,\n\tRequestTimeoutError,\n\tResponseError,\n\tTooManyConcurrentRequestsError,\n} from \"./errors\"\n\nimport {\n\tcreateErrorResponseMessage,\n\tcreateRequestMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tisSuccessResponseMessage,\n\tvalidateMessage,\n} from \"./messages\"\n\nexport type PostRequestOptions = {\n\ttimeout?: number\n}\n\nexport type ChannelNetworkOptions = {\n\tdebug: boolean\n\tmaximumRequestConcurrency: number\n\tdefaultTimeout: number\n\trequestIDPrefix: string\n}\n\nexport const channelNetworkDefaultOptions: ChannelNetworkOptions = {\n\tdebug: false,\n\tmaximumRequestConcurrency: 20,\n\tdefaultTimeout: 5000,\n\trequestIDPrefix: \"channel-\",\n}\n\nexport abstract class ChannelNetwork<\n\tTPartnerTransactions extends Record<string, UnknownTransaction> = Record<\n\t\tstring,\n\t\tnever\n\t>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n> {\n\tpublic requestHandlers: TransactionsHandlers<TPartnerTransactions>\n\tpublic options: ChannelNetworkOptions & TOptions\n\n\tprivate _port: MessagePort | null = null\n\tprotected get port(): MessagePort {\n\t\tif (!this._port) {\n\t\t\tthrow new PortNotSetError()\n\t\t}\n\n\t\treturn this._port\n\t}\n\tprotected set port(port: MessagePort | null) {\n\t\t// Destroy old port\n\t\tif (this._port) {\n\t\t\tthis._port.onmessage = null\n\t\t}\n\n\t\tthis._port = port\n\t\tif (this._port) {\n\t\t\tthis._port.onmessage = this.onMessage.bind(this)\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tprivate _pendingRequests: Map<string, (response: any) => void> = new Map()\n\n\tconstructor(\n\t\trequestHandlers: TransactionsHandlers<TPartnerTransactions>,\n\t\toptions: Partial<ChannelNetworkOptions> & TOptions,\n\t) {\n\t\tthis.requestHandlers = requestHandlers\n\t\tthis.options = { ...channelNetworkDefaultOptions, ...options }\n\t}\n\n\tpublic createRequestMessage<TType extends string = string, TData = undefined>(\n\t\ttype: TType,\n\t\tdata: TData,\n\t): RequestMessage<TType, TData> {\n\t\treturn createRequestMessage(type, data, this.options.requestIDPrefix)\n\t}\n\n\tprotected async onMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(event.data)\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (!this.requestHandlers[message.type]) {\n\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, undefined, 501),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// TODO: Figure out why type cannot be inferred on its own anymore\n\t\t\t\t\t\tconst response = await this.requestHandlers[message.type](message, {\n\t\t\t\t\t\t\tsuccess: createSuccessResponseMessage.bind(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tmessage.requestID,\n\t\t\t\t\t\t\t) as Parameters<\n\t\t\t\t\t\t\t\t(typeof this.requestHandlers)[string]\n\t\t\t\t\t\t\t>[1][\"success\"],\n\t\t\t\t\t\t\terror: createErrorResponseMessage.bind(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tmessage.requestID,\n\t\t\t\t\t\t\t) as Parameters<\n\t\t\t\t\t\t\t\t(typeof this.requestHandlers)[string]\n\t\t\t\t\t\t\t>[1][\"error\"],\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tthis.postResponse(response)\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.postResponse(\n\t\t\t\t\t\t\tcreateErrorResponseMessage(message.requestID, error, 500),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!this._pendingRequests.has(message.requestID)) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Unknown request ID received in response: ${JSON.stringify(\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t)}`,\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\t// Pending requests are checked in previous statement\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tthis._pendingRequests.get(message.requestID)!(message)\n\t\t\t\t\tthis._pendingRequests.delete(message.requestID)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tconsole.warn(error.message)\n\t\t\t} else {\n\t\t\t\t// Should not be possible, but who knows :shrug:\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\trequest: TRequest,\n\t\tpostMessage = (request: TRequest): void => this.port.postMessage(request),\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(request)\n\t\t}\n\n\t\tif (this._pendingRequests.size >= this.options.maximumRequestConcurrency) {\n\t\t\tthrow new TooManyConcurrentRequestsError(request)\n\t\t}\n\n\t\treturn new Promise<ExtractSuccessResponseMessage<TResponse>>(\n\t\t\t(resolve, reject) => {\n\t\t\t\tconst requestTimeout = setTimeout(() => {\n\t\t\t\t\tif (this._pendingRequests.has(request.requestID)) {\n\t\t\t\t\t\tthis._pendingRequests.delete(request.requestID)\n\t\t\t\t\t}\n\t\t\t\t\treject(new RequestTimeoutError(request))\n\t\t\t\t}, options.timeout || this.options.defaultTimeout)\n\n\t\t\t\tthis._pendingRequests.set(\n\t\t\t\t\trequest.requestID,\n\t\t\t\t\t(response: TResponse): void => {\n\t\t\t\t\t\tclearTimeout(requestTimeout)\n\n\t\t\t\t\t\tif (isSuccessResponseMessage(response)) {\n\t\t\t\t\t\t\tresolve(response as ExtractSuccessResponseMessage<TResponse>)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(new ResponseError(response as ExtractErrorResponseMessage<TResponse>))\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t)\n\n\t\t\t\tpostMessage(request)\n\t\t\t},\n\t\t)\n\t}\n\n\tprotected postResponse<TResponse extends UnknownResponseMessage>(\n\t\tresponse: TResponse,\n\t\tpostMessage = (response: TResponse): void =>\n\t\t\tthis.port.postMessage(response),\n\t): TResponse {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(response)\n\t\t}\n\n\t\tpostMessage(response)\n\n\t\treturn response\n\t}\n}\n"],"mappings":";;;;AAqCA,MAAa,+BAAsD;CAClE,OAAO;CACP,2BAA2B;CAC3B,gBAAgB;CAChB,iBAAiB;CACjB;AAED,IAAsB,iBAAtB,MAME;CACD,AAAO;CACP,AAAO;CAEP,AAAQ,QAA4B;CACpC,IAAc,OAAoB;AACjC,MAAI,CAAC,KAAK,MACT,OAAM,IAAIA,gCAAiB;AAG5B,SAAO,KAAK;;CAEb,IAAc,KAAK,MAA0B;AAE5C,MAAI,KAAK,MACR,MAAK,MAAM,YAAY;AAGxB,OAAK,QAAQ;AACb,MAAI,KAAK,MACR,MAAK,MAAM,YAAY,KAAK,UAAU,KAAK,KAAK;;CAKlD,AAAQ,mCAAyD,IAAI,KAAK;CAE1E,YACC,iBACA,SACC;AACD,OAAK,kBAAkB;AACvB,OAAK,UAAU;GAAE,GAAG;GAA8B,GAAG;GAAS;;CAG/D,AAAO,qBACN,MACA,MAC+B;AAC/B,SAAOC,sCAAqB,MAAM,MAAM,KAAK,QAAQ,gBAAgB;;CAGtE,MAAgB,UAAU,OAA6C;AACtE,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,MAAI;GACH,MAAM,UAAUC,iCAAgB,MAAM,KAAK;AAE3C,OAAIC,kCAAiB,QAAQ,CAC5B,KAAI,CAAC,KAAK,gBAAgB,QAAQ,MACjC,MAAK,aACJC,4CAA2B,QAAQ,WAAW,QAAW,IAAI,CAC7D;OAED,KAAI;IAEH,MAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQ,MAAM,SAAS;KAClE,SAASC,8CAA6B,KACrC,MACA,QAAQ,UACR;KAGD,OAAOD,4CAA2B,KACjC,MACA,QAAQ,UACR;KAGD,CAAC;AAEF,SAAK,aAAa,SAAS;YACnB,OAAO;AACf,SAAK,aACJA,4CAA2B,QAAQ,WAAW,OAAO,IAAI,CACzD;;YAIC,CAAC,KAAK,iBAAiB,IAAI,QAAQ,UAAU,CAChD,SAAQ,MACP,4CAA4C,KAAK,UAChD,QACA,GACD;QACK;AAGN,SAAK,iBAAiB,IAAI,QAAQ,UAAU,CAAE,QAAQ;AACtD,SAAK,iBAAiB,OAAO,QAAQ,UAAU;;WAGzC,OAAO;AACf,OAAI,iBAAiB,UACpB,SAAQ,KAAK,MAAM,QAAQ;OAG3B,OAAM;;;CAKT,AAAU,YAIT,SACA,eAAe,cAA4B,KAAK,KAAK,YAAYE,UAAQ,EACzE,UAA8B,EAAE,EACoB;AACpD,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,QAAQ;AAGvB,MAAI,KAAK,iBAAiB,QAAQ,KAAK,QAAQ,0BAC9C,OAAM,IAAIC,8CAA+B,QAAQ;AAGlD,SAAO,IAAI,SACT,SAAS,WAAW;GACpB,MAAM,iBAAiB,iBAAiB;AACvC,QAAI,KAAK,iBAAiB,IAAI,QAAQ,UAAU,CAC/C,MAAK,iBAAiB,OAAO,QAAQ,UAAU;AAEhD,WAAO,IAAIC,mCAAoB,QAAQ,CAAC;MACtC,QAAQ,WAAW,KAAK,QAAQ,eAAe;AAElD,QAAK,iBAAiB,IACrB,QAAQ,YACP,aAA8B;AAC9B,iBAAa,eAAe;AAE5B,QAAIC,0CAAyB,SAAS,CACrC,SAAQ,SAAqD;QAE7D,QAAO,IAAIC,6BAAc,SAAmD,CAAC;KAG/E;AAED,eAAY,QAAQ;IAErB;;CAGF,AAAU,aACT,UACA,eAAe,eACd,KAAK,KAAK,YAAYC,WAAS,EACpB;AACZ,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,SAAS;AAGxB,cAAY,SAAS;AAErB,SAAO"}
1
+ {"version":3,"file":"ChannelNetwork.cjs","names":["PortNotSetError","createRequestMessage","validateMessage","isRequestMessage","createErrorResponseMessage","createSuccessResponseMessage","TooManyConcurrentRequestsError","RequestTimeoutError","isSuccessResponseMessage","ResponseError"],"sources":["../../src/channel/ChannelNetwork.ts"],"sourcesContent":["import {\n\tPortNotSetError,\n\tRequestTimeoutError,\n\tResponseError,\n\tTooManyConcurrentRequestsError,\n} from \"./errors\"\nimport {\n\tcreateErrorResponseMessage,\n\tcreateRequestMessage,\n\tcreateSuccessResponseMessage,\n\tisRequestMessage,\n\tisSuccessResponseMessage,\n\tvalidateMessage,\n} from \"./messages\"\nimport type {\n\tExtractErrorResponseMessage,\n\tExtractSuccessResponseMessage,\n\tRequestMessage,\n\tTransactionsHandlers,\n\tUnknownRequestMessage,\n\tUnknownResponseMessage,\n\tUnknownTransaction,\n} from \"./types\"\n\nexport type PostRequestOptions = {\n\ttimeout?: number\n}\n\nexport type ChannelNetworkOptions = {\n\tdebug: boolean\n\tmaximumRequestConcurrency: number\n\tdefaultTimeout: number\n\trequestIDPrefix: string\n}\n\nexport const channelNetworkDefaultOptions: ChannelNetworkOptions = {\n\tdebug: false,\n\tmaximumRequestConcurrency: 20,\n\tdefaultTimeout: 5000,\n\trequestIDPrefix: \"channel-\",\n}\n\nexport abstract class ChannelNetwork<\n\tTPartnerTransactions extends Record<string, UnknownTransaction> = Record<string, never>,\n\tTOptions extends Record<string, unknown> = Record<string, unknown>,\n> {\n\tpublic requestHandlers: TransactionsHandlers<TPartnerTransactions>\n\tpublic options: ChannelNetworkOptions & TOptions\n\n\tprivate _port: MessagePort | null = null\n\tprotected get port(): MessagePort {\n\t\tif (!this._port) {\n\t\t\tthrow new PortNotSetError()\n\t\t}\n\n\t\treturn this._port\n\t}\n\tprotected set port(port: MessagePort | null) {\n\t\t// Destroy old port\n\t\tif (this._port) {\n\t\t\tthis._port.onmessage = null\n\t\t}\n\n\t\tthis._port = port\n\t\tif (this._port) {\n\t\t\tthis._port.onmessage = this.onMessage.bind(this)\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tprivate _pendingRequests: Map<string, (response: any) => void> = new Map()\n\n\tconstructor(\n\t\trequestHandlers: TransactionsHandlers<TPartnerTransactions>,\n\t\toptions: Partial<ChannelNetworkOptions> & TOptions,\n\t) {\n\t\tthis.requestHandlers = requestHandlers\n\t\tthis.options = { ...channelNetworkDefaultOptions, ...options }\n\t}\n\n\tpublic createRequestMessage<TType extends string = string, TData = undefined>(\n\t\ttype: TType,\n\t\tdata: TData,\n\t): RequestMessage<TType, TData> {\n\t\treturn createRequestMessage(type, data, this.options.requestIDPrefix)\n\t}\n\n\tprotected async onMessage(event: MessageEvent<unknown>): Promise<void> {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(event.data)\n\t\t}\n\n\t\ttry {\n\t\t\tconst message = validateMessage(event.data)\n\n\t\t\tif (isRequestMessage(message)) {\n\t\t\t\tif (!this.requestHandlers[message.type]) {\n\t\t\t\t\tthis.postResponse(createErrorResponseMessage(message.requestID, undefined, 501))\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// TODO: Figure out why type cannot be inferred on its own anymore\n\t\t\t\t\t\tconst response = await this.requestHandlers[message.type](message, {\n\t\t\t\t\t\t\tsuccess: createSuccessResponseMessage.bind(this, message.requestID) as Parameters<\n\t\t\t\t\t\t\t\t(typeof this.requestHandlers)[string]\n\t\t\t\t\t\t\t>[1][\"success\"],\n\t\t\t\t\t\t\terror: createErrorResponseMessage.bind(this, message.requestID) as Parameters<\n\t\t\t\t\t\t\t\t(typeof this.requestHandlers)[string]\n\t\t\t\t\t\t\t>[1][\"error\"],\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tthis.postResponse(response)\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.postResponse(createErrorResponseMessage(message.requestID, error, 500))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!this._pendingRequests.has(message.requestID)) {\n\t\t\t\t\tconsole.error(`Unknown request ID received in response: ${JSON.stringify(message)}`)\n\t\t\t\t} else {\n\t\t\t\t\t// Pending requests are checked in previous statement\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tthis._pendingRequests.get(message.requestID)!(message)\n\t\t\t\t\tthis._pendingRequests.delete(message.requestID)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tconsole.warn(error.message)\n\t\t\t} else {\n\t\t\t\t// Should not be possible, but who knows :shrug:\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected postRequest<\n\t\tTRequest extends UnknownRequestMessage,\n\t\tTResponse extends UnknownResponseMessage,\n\t>(\n\t\trequest: TRequest,\n\t\tpostMessage = (request: TRequest): void => this.port.postMessage(request),\n\t\toptions: PostRequestOptions = {},\n\t): Promise<ExtractSuccessResponseMessage<TResponse>> {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(request)\n\t\t}\n\n\t\tif (this._pendingRequests.size >= this.options.maximumRequestConcurrency) {\n\t\t\tthrow new TooManyConcurrentRequestsError(request)\n\t\t}\n\n\t\treturn new Promise<ExtractSuccessResponseMessage<TResponse>>((resolve, reject) => {\n\t\t\tconst requestTimeout = setTimeout(() => {\n\t\t\t\tif (this._pendingRequests.has(request.requestID)) {\n\t\t\t\t\tthis._pendingRequests.delete(request.requestID)\n\t\t\t\t}\n\t\t\t\treject(new RequestTimeoutError(request))\n\t\t\t}, options.timeout || this.options.defaultTimeout)\n\n\t\t\tthis._pendingRequests.set(request.requestID, (response: TResponse): void => {\n\t\t\t\tclearTimeout(requestTimeout)\n\n\t\t\t\tif (isSuccessResponseMessage(response)) {\n\t\t\t\t\tresolve(response as ExtractSuccessResponseMessage<TResponse>)\n\t\t\t\t} else {\n\t\t\t\t\treject(new ResponseError(response as ExtractErrorResponseMessage<TResponse>))\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tpostMessage(request)\n\t\t})\n\t}\n\n\tprotected postResponse<TResponse extends UnknownResponseMessage>(\n\t\tresponse: TResponse,\n\t\tpostMessage = (response: TResponse): void => this.port.postMessage(response),\n\t): TResponse {\n\t\tif (this.options.debug) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(response)\n\t\t}\n\n\t\tpostMessage(response)\n\n\t\treturn response\n\t}\n}\n"],"mappings":";;;AAmCA,MAAa,+BAAsD;CAClE,OAAO;CACP,2BAA2B;CAC3B,gBAAgB;CAChB,iBAAiB;CACjB;AAED,IAAsB,iBAAtB,MAGE;CACD;CACA;CAEA,QAAoC;CACpC,IAAc,OAAoB;AACjC,MAAI,CAAC,KAAK,MACT,OAAM,IAAIA,eAAAA,iBAAiB;AAG5B,SAAO,KAAK;;CAEb,IAAc,KAAK,MAA0B;AAE5C,MAAI,KAAK,MACR,MAAK,MAAM,YAAY;AAGxB,OAAK,QAAQ;AACb,MAAI,KAAK,MACR,MAAK,MAAM,YAAY,KAAK,UAAU,KAAK,KAAK;;CAKlD,mCAAiE,IAAI,KAAK;CAE1E,YACC,iBACA,SACC;AACD,OAAK,kBAAkB;AACvB,OAAK,UAAU;GAAE,GAAG;GAA8B,GAAG;GAAS;;CAG/D,qBACC,MACA,MAC+B;AAC/B,SAAOC,iBAAAA,qBAAqB,MAAM,MAAM,KAAK,QAAQ,gBAAgB;;CAGtE,MAAgB,UAAU,OAA6C;AACtE,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,MAAM,KAAK;AAG1B,MAAI;GACH,MAAM,UAAUC,iBAAAA,gBAAgB,MAAM,KAAK;AAE3C,OAAIC,iBAAAA,iBAAiB,QAAQ,CAC5B,KAAI,CAAC,KAAK,gBAAgB,QAAQ,MACjC,MAAK,aAAaC,iBAAAA,2BAA2B,QAAQ,WAAW,KAAA,GAAW,IAAI,CAAC;OAEhF,KAAI;IAEH,MAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQ,MAAM,SAAS;KAClE,SAASC,iBAAAA,6BAA6B,KAAK,MAAM,QAAQ,UAAU;KAGnE,OAAOD,iBAAAA,2BAA2B,KAAK,MAAM,QAAQ,UAAU;KAG/D,CAAC;AAEF,SAAK,aAAa,SAAS;YACnB,OAAO;AACf,SAAK,aAAaA,iBAAAA,2BAA2B,QAAQ,WAAW,OAAO,IAAI,CAAC;;YAI1E,CAAC,KAAK,iBAAiB,IAAI,QAAQ,UAAU,CAChD,SAAQ,MAAM,4CAA4C,KAAK,UAAU,QAAQ,GAAG;QAC9E;AAGN,SAAK,iBAAiB,IAAI,QAAQ,UAAU,CAAE,QAAQ;AACtD,SAAK,iBAAiB,OAAO,QAAQ,UAAU;;WAGzC,OAAO;AACf,OAAI,iBAAiB,UACpB,SAAQ,KAAK,MAAM,QAAQ;OAG3B,OAAM;;;CAKT,YAIC,SACA,eAAe,YAA4B,KAAK,KAAK,YAAY,QAAQ,EACzE,UAA8B,EAAE,EACoB;AACpD,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,QAAQ;AAGvB,MAAI,KAAK,iBAAiB,QAAQ,KAAK,QAAQ,0BAC9C,OAAM,IAAIE,eAAAA,+BAA+B,QAAQ;AAGlD,SAAO,IAAI,SAAmD,SAAS,WAAW;GACjF,MAAM,iBAAiB,iBAAiB;AACvC,QAAI,KAAK,iBAAiB,IAAI,QAAQ,UAAU,CAC/C,MAAK,iBAAiB,OAAO,QAAQ,UAAU;AAEhD,WAAO,IAAIC,eAAAA,oBAAoB,QAAQ,CAAC;MACtC,QAAQ,WAAW,KAAK,QAAQ,eAAe;AAElD,QAAK,iBAAiB,IAAI,QAAQ,YAAY,aAA8B;AAC3E,iBAAa,eAAe;AAE5B,QAAIC,iBAAAA,yBAAyB,SAAS,CACrC,SAAQ,SAAqD;QAE7D,QAAO,IAAIC,eAAAA,cAAc,SAAmD,CAAC;KAE7E;AAEF,eAAY,QAAQ;IACnB;;CAGH,aACC,UACA,eAAe,aAA8B,KAAK,KAAK,YAAY,SAAS,EAChE;AACZ,MAAI,KAAK,QAAQ,MAEhB,SAAQ,MAAM,SAAS;AAGxB,cAAY,SAAS;AAErB,SAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelNetwork.d.cts","names":[],"sources":["../../src/channel/ChannelNetwork.ts"],"mappings":";;;KAwBY,kBAAA;EACX,OAAA;AAAA;AAAA,KAGW,qBAAA;EACX,KAAA;EACA,yBAAA;EACA,cAAA;EACA,eAAA;AAAA;AAAA,uBAUqB,cAAA,8BACQ,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCACjD,MAAA,oBAA0B,MAAA;EAEpC,eAAA,EAAiB,oBAAA,CAAqB,oBAAA;EACtC,OAAA,EAAS,qBAAA,GAAwB,QAAA;EAAA,QAEhC,KAAA;EAAA,cACM,IAAA,CAAA,GAAQ,WAAA;EAAA,cAOR,IAAA,CAAK,IAAA,EAAM,WAAA;EAAA,QAajB,gBAAA;cAGP,eAAA,EAAiB,oBAAA,CAAqB,oBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,qBAAA,IAAyB,QAAA;EAMpC,oBAAA,kDAAA,CACN,IAAA,EAAM,KAAA,EACN,IAAA,EAAM,KAAA,GACJ,cAAA,CAAe,KAAA,EAAO,KAAA;EAAA,UAIT,SAAA,CAAU,KAAA,EAAO,YAAA,YAAwB,OAAA;EAAA,UAiD/C,WAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,OAAA,EAAS,QAAA,EACT,WAAA,IAAe,OAAA,EAAS,QAAA,WACxB,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;EAAA,UAgC/B,YAAA,mBAA+B,sBAAA,CAAA,CACxC,QAAA,EAAU,SAAA,EACV,WAAA,IAAe,QAAA,EAAU,SAAA,YACvB,SAAA;AAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelNetwork.d.ts","names":[],"sources":["../../src/channel/ChannelNetwork.ts"],"mappings":";;;KAwBY,kBAAA;EACX,OAAA;AAAA;AAAA,KAGW,qBAAA;EACX,KAAA;EACA,yBAAA;EACA,cAAA;EACA,eAAA;AAAA;AAAA,uBAUqB,cAAA,8BACQ,MAAA,SAAe,kBAAA,IAAsB,MAAA,kCACjD,MAAA,oBAA0B,MAAA;EAEpC,eAAA,EAAiB,oBAAA,CAAqB,oBAAA;EACtC,OAAA,EAAS,qBAAA,GAAwB,QAAA;EAAA,QAEhC,KAAA;EAAA,cACM,IAAA,CAAA,GAAQ,WAAA;EAAA,cAOR,IAAA,CAAK,IAAA,EAAM,WAAA;EAAA,QAajB,gBAAA;cAGP,eAAA,EAAiB,oBAAA,CAAqB,oBAAA,GACtC,OAAA,EAAS,OAAA,CAAQ,qBAAA,IAAyB,QAAA;EAMpC,oBAAA,kDAAA,CACN,IAAA,EAAM,KAAA,EACN,IAAA,EAAM,KAAA,GACJ,cAAA,CAAe,KAAA,EAAO,KAAA;EAAA,UAIT,SAAA,CAAU,KAAA,EAAO,YAAA,YAAwB,OAAA;EAAA,UAiD/C,WAAA,kBACQ,qBAAA,oBACC,sBAAA,CAAA,CAElB,OAAA,EAAS,QAAA,EACT,WAAA,IAAe,OAAA,EAAS,QAAA,WACxB,OAAA,GAAS,kBAAA,GACP,OAAA,CAAQ,6BAAA,CAA8B,SAAA;EAAA,UAgC/B,YAAA,mBAA+B,sBAAA,CAAA,CACxC,QAAA,EAAU,SAAA,EACV,WAAA,IAAe,QAAA,EAAU,SAAA,YACvB,SAAA;AAAA"}