@highlight-run/rrweb 1.2.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/plugins/console-record.js +655 -0
  2. package/dist/plugins/console-record.min.js +1 -1
  3. package/dist/plugins/console-record.min.js.map +1 -1
  4. package/dist/plugins/console-replay.js +293 -0
  5. package/dist/plugins/console-replay.min.js +16 -0
  6. package/dist/plugins/console-replay.min.js.map +1 -0
  7. package/dist/plugins/sequential-id-record.js +33 -0
  8. package/dist/plugins/sequential-id-record.min.js +2 -0
  9. package/dist/plugins/sequential-id-record.min.js.map +1 -0
  10. package/dist/plugins/sequential-id-replay.js +37 -0
  11. package/dist/plugins/sequential-id-replay.min.js +2 -0
  12. package/dist/plugins/sequential-id-replay.min.js.map +1 -0
  13. package/dist/record/rrweb-record-pack.js +747 -0
  14. package/dist/record/rrweb-record-pack.min.js +16 -0
  15. package/dist/record/rrweb-record-pack.min.js.map +1 -0
  16. package/dist/record/rrweb-record.js +3318 -0
  17. package/dist/record/rrweb-record.min.js +16 -0
  18. package/dist/record/rrweb-record.min.js.map +1 -0
  19. package/dist/replay/rrweb-replay-unpack.js +4626 -0
  20. package/dist/replay/rrweb-replay-unpack.min.css +2 -0
  21. package/dist/replay/rrweb-replay-unpack.min.css.map +1 -0
  22. package/dist/replay/rrweb-replay-unpack.min.js +30 -0
  23. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -0
  24. package/dist/replay/rrweb-replay.js +4216 -0
  25. package/dist/replay/rrweb-replay.min.css +2 -0
  26. package/dist/replay/rrweb-replay.min.css.map +1 -0
  27. package/dist/replay/rrweb-replay.min.js +30 -0
  28. package/dist/replay/rrweb-replay.min.js.map +1 -0
  29. package/dist/rrweb-all.js +8708 -0
  30. package/dist/rrweb-all.min.css +2 -0
  31. package/dist/rrweb-all.min.css.map +1 -0
  32. package/dist/rrweb-all.min.js +30 -0
  33. package/dist/rrweb-all.min.js.map +1 -0
  34. package/dist/rrweb.js +7294 -0
  35. package/dist/rrweb.min.css +2 -0
  36. package/dist/rrweb.min.css.map +1 -0
  37. package/dist/rrweb.min.js +2 -2
  38. package/dist/rrweb.min.js.map +1 -1
  39. package/es/rrweb/ext/@xstate/fsm/es/index.js +17 -0
  40. package/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js +49 -0
  41. package/es/rrweb/ext/fflate/esm/browser.js +777 -0
  42. package/es/rrweb/ext/mitt/dist/mitt.es.js +63 -0
  43. package/es/rrweb/packages/rrweb/ext/tslib/tslib.es6.js +78 -0
  44. package/es/rrweb/packages/rrweb/src/entries/all.js +13 -0
  45. package/es/rrweb/packages/rrweb/src/index.js +12 -0
  46. package/es/rrweb/packages/rrweb/src/packer/base.js +3 -0
  47. package/es/rrweb/packages/rrweb/src/packer/pack.js +10 -0
  48. package/es/rrweb/packages/rrweb/src/packer/unpack.js +29 -0
  49. package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +179 -0
  50. package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +134 -0
  51. package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +141 -0
  52. package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +111 -0
  53. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +23 -0
  54. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +28 -0
  55. package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +32 -0
  56. package/es/rrweb/packages/rrweb/src/record/index.js +381 -0
  57. package/es/rrweb/packages/rrweb/src/record/mutation.js +532 -0
  58. package/es/rrweb/packages/rrweb/src/record/observer.js +665 -0
  59. package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +78 -0
  60. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +93 -0
  61. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +30 -0
  62. package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +116 -0
  63. package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +78 -0
  64. package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +45 -0
  65. package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +25 -0
  66. package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +35 -0
  67. package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +124 -0
  68. package/es/rrweb/packages/rrweb/src/replay/index.js +1864 -0
  69. package/es/rrweb/packages/rrweb/src/replay/machine.js +321 -0
  70. package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +221 -0
  71. package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +8 -0
  72. package/es/rrweb/packages/rrweb/src/replay/timer.js +96 -0
  73. package/es/rrweb/packages/rrweb/src/replay/virtual-styles.js +121 -0
  74. package/es/rrweb/packages/rrweb/src/types.js +75 -0
  75. package/es/rrweb/packages/rrweb/src/utils.js +509 -0
  76. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1697 -0
  77. package/lib/plugins/console-record.js +650 -0
  78. package/lib/plugins/console-replay.js +288 -0
  79. package/lib/plugins/sequential-id-record.js +28 -0
  80. package/lib/plugins/sequential-id-replay.js +32 -0
  81. package/lib/record/rrweb-record-pack.js +742 -0
  82. package/lib/record/rrweb-record.js +3315 -0
  83. package/lib/replay/rrweb-replay-unpack.js +4621 -0
  84. package/lib/replay/rrweb-replay.js +4211 -0
  85. package/lib/rrweb-all.js +8703 -0
  86. package/lib/rrweb.js +7289 -0
  87. package/package.json +41 -43
  88. package/typings/entries/all.d.ts +6 -0
  89. package/{dist → typings}/entries/record-pack.d.ts +0 -0
  90. package/{dist → typings}/entries/replay-unpack.d.ts +0 -0
  91. package/{dist → typings}/index.d.ts +1 -2
  92. package/{dist → typings}/packer/base.d.ts +0 -0
  93. package/{dist → typings}/packer/index.d.ts +0 -0
  94. package/{dist → typings}/packer/pack.d.ts +0 -0
  95. package/{dist → typings}/packer/unpack.d.ts +0 -0
  96. package/{dist → typings}/plugins/console/record/error-stack-parser.d.ts +0 -0
  97. package/{dist → typings}/plugins/console/record/index.d.ts +3 -2
  98. package/{dist → typings}/plugins/console/record/stringify.d.ts +0 -0
  99. package/{dist → typings}/plugins/console/replay/index.d.ts +2 -2
  100. package/{dist → typings}/plugins/sequential-id/record/index.d.ts +0 -0
  101. package/{dist → typings}/plugins/sequential-id/replay/index.d.ts +0 -0
  102. package/{dist → typings}/record/iframe-manager.d.ts +1 -1
  103. package/{dist → typings}/record/index.d.ts +0 -0
  104. package/{dist → typings}/record/mutation.d.ts +5 -8
  105. package/typings/record/observer.d.ts +7 -0
  106. package/{dist → typings}/record/observers/canvas/2d.d.ts +0 -0
  107. package/{dist → typings}/record/observers/canvas/canvas-manager.d.ts +0 -0
  108. package/{dist → typings}/record/observers/canvas/canvas.d.ts +0 -0
  109. package/{dist → typings}/record/observers/canvas/serialize-args.d.ts +1 -1
  110. package/{dist → typings}/record/observers/canvas/webgl.d.ts +0 -0
  111. package/typings/record/observers/canvas/webgl2.d.ts +2 -0
  112. package/typings/record/shadow-dom-manager.d.ts +21 -0
  113. package/{dist → typings}/replay/canvas/2d.d.ts +0 -0
  114. package/{dist → typings}/replay/canvas/index.d.ts +0 -0
  115. package/{dist → typings}/replay/canvas/webgl.d.ts +0 -0
  116. package/{dist → typings}/replay/index.d.ts +1 -0
  117. package/{dist → typings}/replay/machine.d.ts +0 -0
  118. package/{dist → typings}/replay/smoothscroll.d.ts +0 -0
  119. package/{dist → typings}/replay/styles/inject-style.d.ts +0 -0
  120. package/{dist → typings}/replay/timer.d.ts +0 -0
  121. package/{dist → typings}/replay/virtual-styles.d.ts +1 -1
  122. package/{dist → typings}/rrdom/index.d.ts +0 -0
  123. package/{dist → typings}/rrdom/tree-node.d.ts +0 -0
  124. package/{dist → typings}/types.d.ts +7 -8
  125. package/{dist → typings}/utils.d.ts +3 -4
  126. package/CHANGELOG.md +0 -26
  127. package/README.md +0 -124
  128. package/README.zh_CN.md +0 -122
  129. package/dist/entries/all.d.ts +0 -4
  130. package/dist/index.css +0 -82
  131. package/dist/index.css.map +0 -1
  132. package/dist/index.js +0 -3
  133. package/dist/index.js.LICENSE.txt +0 -14
  134. package/dist/index.js.map +0 -1
  135. package/dist/plugins/entries/all.d.ts +0 -4
  136. package/dist/plugins/entries/record-pack.d.ts +0 -2
  137. package/dist/plugins/entries/replay-unpack.d.ts +0 -2
  138. package/dist/plugins/index.d.ts +0 -9
  139. package/dist/plugins/packer/base.d.ts +0 -7
  140. package/dist/plugins/packer/index.d.ts +0 -2
  141. package/dist/plugins/packer/pack.d.ts +0 -2
  142. package/dist/plugins/packer/unpack.d.ts +0 -2
  143. package/dist/plugins/plugins/console/record/error-stack-parser.d.ts +0 -37
  144. package/dist/plugins/plugins/console/record/index.d.ts +0 -41
  145. package/dist/plugins/plugins/console/record/stringify.d.ts +0 -2
  146. package/dist/plugins/plugins/console/replay/index.d.ts +0 -9
  147. package/dist/plugins/plugins/sequential-id/record/index.d.ts +0 -6
  148. package/dist/plugins/plugins/sequential-id/replay/index.d.ts +0 -7
  149. package/dist/plugins/record/iframe-manager.d.ts +0 -13
  150. package/dist/plugins/record/index.d.ts +0 -9
  151. package/dist/plugins/record/mutation.d.ts +0 -45
  152. package/dist/plugins/record/observer.d.ts +0 -11
  153. package/dist/plugins/record/observers/canvas/2d.d.ts +0 -2
  154. package/dist/plugins/record/observers/canvas/canvas-manager.d.ts +0 -32
  155. package/dist/plugins/record/observers/canvas/canvas.d.ts +0 -2
  156. package/dist/plugins/record/observers/canvas/serialize-args.d.ts +0 -6
  157. package/dist/plugins/record/observers/canvas/webgl.d.ts +0 -2
  158. package/dist/plugins/record/shadow-dom-manager.d.ts +0 -34
  159. package/dist/plugins/replay/canvas/2d.d.ts +0 -9
  160. package/dist/plugins/replay/canvas/index.d.ts +0 -9
  161. package/dist/plugins/replay/canvas/webgl.d.ts +0 -11
  162. package/dist/plugins/replay/index.d.ts +0 -82
  163. package/dist/plugins/replay/machine.d.ts +0 -85
  164. package/dist/plugins/replay/smoothscroll.d.ts +0 -1
  165. package/dist/plugins/replay/styles/inject-style.d.ts +0 -2
  166. package/dist/plugins/replay/timer.d.ts +0 -19
  167. package/dist/plugins/replay/virtual-styles.d.ts +0 -43
  168. package/dist/plugins/rrdom/index.d.ts +0 -1
  169. package/dist/plugins/rrdom/tree-node.d.ts +0 -20
  170. package/dist/plugins/snapshot/css.d.ts +0 -92
  171. package/dist/plugins/snapshot/index.d.ts +0 -5
  172. package/dist/plugins/snapshot/rebuild.d.ts +0 -19
  173. package/dist/plugins/snapshot/snapshot.d.ts +0 -49
  174. package/dist/plugins/snapshot/types.d.ts +0 -99
  175. package/dist/plugins/snapshot/utils.d.ts +0 -11
  176. package/dist/plugins/types.d.ts +0 -509
  177. package/dist/plugins/utils.d.ts +0 -71
  178. package/dist/record/observer.d.ts +0 -11
  179. package/dist/record/shadow-dom-manager.d.ts +0 -34
  180. package/dist/snapshot/css.d.ts +0 -92
  181. package/dist/snapshot/index.d.ts +0 -5
  182. package/dist/snapshot/rebuild.d.ts +0 -19
  183. package/dist/snapshot/snapshot.d.ts +0 -49
  184. package/dist/snapshot/types.d.ts +0 -99
  185. package/dist/snapshot/utils.d.ts +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rrweb-replay-unpack.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../../rrweb-snapshot/es/rrweb-snapshot.js","../../../../node_modules/mitt/dist/mitt.es.js","../../../src/types.ts","../../../src/replay/smoothscroll.ts","../../../src/replay/timer.ts","../../../../node_modules/@xstate/fsm/es/index.js","../../../src/replay/machine.ts","../../../src/utils.ts","../../../src/replay/styles/inject-style.ts","../../../src/replay/virtual-styles.ts","../../../../node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../../../src/replay/canvas/webgl.ts","../../../src/replay/index.ts","../../../src/replay/canvas/index.ts","../../../src/replay/canvas/2d.ts","../../../../node_modules/fflate/esm/browser.js","../../../src/packer/unpack.ts","../../../src/packer/base.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","var NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\n return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n var _a;\n var host = (_a = n) === null || _a === void 0 ? void 0 : _a.host;\n return Boolean(host && host.shadowRoot && host.shadowRoot === n);\n}\nfunction maskInputValue(_a) {\n var maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\n var text = value || '';\n if (maskInputOptions[tagName.toLowerCase()] ||\n maskInputOptions[type]) {\n if (maskInputFn) {\n text = maskInputFn(text);\n }\n else {\n text = '*'.repeat(text.length);\n }\n }\n return text;\n}\nvar ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n var ctx = canvas.getContext('2d');\n if (!ctx)\n return true;\n var chunkSize = 50;\n for (var x = 0; x < canvas.width; x += chunkSize) {\n for (var y = 0; y < canvas.height; y += chunkSize) {\n var getImageData = ctx.getImageData;\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n var pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some(function (pixel) { return pixel !== 0; }))\n return false;\n }\n }\n return true;\n}\nfunction obfuscateText(text) {\n text = text.replace(/[^ -~]+/g, '');\n text =\n (text === null || text === void 0 ? void 0 : text.split(' ').map(function (word) { return Math.random().toString(20).substr(2, word.length); }).join(' ')) || '';\n return text;\n}\n\nvar _id = 1;\nvar tagNameRegex = new RegExp('[^a-z0-9-_:]');\nvar IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return 'form';\n }\n var processedTagName = element.tagName.toLowerCase().trim();\n if (tagNameRegex.test(processedTagName)) {\n return 'div';\n }\n return processedTagName;\n}\nfunction getCssRulesString(s) {\n try {\n var rules = s.rules || s.cssRules;\n return rules ? Array.from(rules).map(getCssRuleString).join('') : null;\n }\n catch (error) {\n return null;\n }\n}\nfunction getCssRuleString(rule) {\n var cssStringified = rule.cssText;\n if (isCSSImportRule(rule)) {\n try {\n cssStringified = getCssRulesString(rule.styleSheet) || cssStringified;\n }\n catch (_a) {\n }\n }\n return cssStringified;\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction stringifyStyleSheet(sheet) {\n return sheet.cssRules\n ? Array.from(sheet.cssRules)\n .map(function (rule) { return rule.cssText || ''; })\n .join('')\n : '';\n}\nfunction extractOrigin(url) {\n var origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n }\n else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\nvar canvasService;\nvar canvasCtx;\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nvar RELATIVE_PATH = /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/|#).*/;\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\n var filePath = path1 || path2 || path3;\n var maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (!RELATIVE_PATH.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (DATA_URI.test(filePath)) {\n return \"url(\" + maybeQuote + filePath + maybeQuote + \")\";\n }\n if (filePath[0] === '/') {\n return \"url(\" + maybeQuote + (extractOrigin(href) + filePath) + maybeQuote + \")\";\n }\n var stack = href.split('/');\n var parts = filePath.split('/');\n stack.pop();\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\n var part = parts_1[_i];\n if (part === '.') {\n continue;\n }\n else if (part === '..') {\n stack.pop();\n }\n else {\n stack.push(part);\n }\n }\n return \"url(\" + maybeQuote + stack.join('/') + maybeQuote + \")\";\n });\n}\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === '') {\n return attributeValue;\n }\n var pos = 0;\n function collectCharacters(regEx) {\n var chars;\n var match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars = match[0];\n pos += chars.length;\n return chars;\n }\n return '';\n }\n var output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n var url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === ',') {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n }\n else {\n var descriptorsStr = '';\n url = absoluteToDoc(doc, url);\n var inParens = false;\n while (true) {\n var c = attributeValue.charAt(pos);\n if (c === '') {\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (!inParens) {\n if (c === ',') {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (c === '(') {\n inParens = true;\n }\n }\n else {\n if (c === ')') {\n inParens = false;\n }\n }\n descriptorsStr += c;\n pos += 1;\n }\n }\n }\n return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n var a = doc.createElement('a');\n a.href = attributeValue;\n return a.href;\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n var a = document.createElement('a');\n a.href = '';\n return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value) {\n if (name === 'src' || (name === 'href' && value)) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'xlink:href' && value && value[0] !== '#') {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'background' &&\n value &&\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'srcset' && value) {\n return getAbsoluteSrcsetString(doc, value);\n }\n else if (name === 'style' && value) {\n return absoluteToStylesheet(value, getHref());\n }\n else if (tagName === 'object' && name === 'data' && value) {\n return absoluteToDoc(doc, value);\n }\n else {\n return value;\n }\n}\nfunction _isBlockedElement(element, blockClass, blockSelector) {\n if (typeof blockClass === 'string') {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n }\n else {\n for (var eIndex = 0; eIndex < element.classList.length; eIndex++) {\n var className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n return false;\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\n if (!node) {\n return false;\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n if (typeof maskTextClass === 'string') {\n if (node.classList.contains(maskTextClass)) {\n return true;\n }\n }\n else {\n for (var eIndex = 0; eIndex < node.classList.length; eIndex++) {\n var className = node.classList[eIndex];\n if (maskTextClass.test(className)) {\n return true;\n }\n }\n }\n if (maskTextSelector) {\n if (node.matches(maskTextSelector)) {\n return true;\n }\n }\n return needMaskingText(node.parentNode, maskTextClass, maskTextSelector);\n }\n if (node.nodeType === node.TEXT_NODE) {\n return needMaskingText(node.parentNode, maskTextClass, maskTextSelector);\n }\n return needMaskingText(node.parentNode, maskTextClass, maskTextSelector);\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n var win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n var fired = false;\n var readyState;\n try {\n readyState = win.document.readyState;\n }\n catch (error) {\n return;\n }\n if (readyState !== 'complete') {\n var timer_1 = setTimeout(function () {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', function () {\n clearTimeout(timer_1);\n fired = true;\n listener();\n });\n return;\n }\n var blankUrl = 'about:blank';\n if (win.location.href !== blankUrl ||\n iframeEl.src === blankUrl ||\n iframeEl.src === '') {\n setTimeout(listener, 0);\n return;\n }\n iframeEl.addEventListener('load', listener);\n}\nfunction serializeNode(n, options) {\n var _a;\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, inlineStylesheet = options.inlineStylesheet, _b = options.maskInputOptions, maskInputOptions = _b === void 0 ? {} : _b, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _c = options.dataURLOptions, dataURLOptions = _c === void 0 ? {} : _c, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, enableStrictPrivacy = options.enableStrictPrivacy;\n var rootId;\n if (doc.__sn) {\n var docId = doc.__sn.id;\n rootId = docId === 1 ? undefined : docId;\n }\n switch (n.nodeType) {\n case n.DOCUMENT_NODE:\n if (n.compatMode !== 'CSS1Compat') {\n return {\n type: NodeType.Document,\n childNodes: [],\n compatMode: n.compatMode,\n rootId: rootId\n };\n }\n else {\n return {\n type: NodeType.Document,\n childNodes: [],\n rootId: rootId\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType.DocumentType,\n name: n.name,\n publicId: n.publicId,\n systemId: n.systemId,\n rootId: rootId\n };\n case n.ELEMENT_NODE:\n var needBlock = _isBlockedElement(n, blockClass, blockSelector);\n var tagName = getValidTagName(n);\n var attributes_1 = {};\n for (var _i = 0, _d = Array.from(n.attributes); _i < _d.length; _i++) {\n var _e = _d[_i], name_1 = _e.name, value = _e.value;\n attributes_1[name_1] = transformAttribute(doc, tagName, name_1, value);\n }\n if (tagName === 'link' && inlineStylesheet) {\n var stylesheet = Array.from(doc.styleSheets).find(function (s) {\n return s.href === n.href;\n });\n var cssText = null;\n if (stylesheet) {\n cssText = getCssRulesString(stylesheet);\n }\n if (cssText) {\n delete attributes_1.rel;\n delete attributes_1.href;\n attributes_1._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === 'style' &&\n n.sheet &&\n !(n.innerText ||\n n.textContent ||\n '').trim().length) {\n var cssText = getCssRulesString(n.sheet);\n if (cssText) {\n attributes_1._cssText = absoluteToStylesheet(cssText, getHref());\n }\n }\n if (tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select') {\n var value = n.value;\n if (attributes_1.type !== 'radio' &&\n attributes_1.type !== 'checkbox' &&\n attributes_1.type !== 'submit' &&\n attributes_1.type !== 'button' &&\n value) {\n attributes_1.value = maskInputValue({\n type: attributes_1.type,\n tagName: tagName,\n value: value,\n maskInputOptions: maskInputOptions,\n maskInputFn: maskInputFn\n });\n }\n else if (n.checked) {\n attributes_1.checked = n.checked;\n }\n }\n if (tagName === 'option') {\n if (n.selected && !maskInputOptions['select']) {\n attributes_1.selected = true;\n }\n else {\n delete attributes_1.selected;\n }\n }\n if (tagName === 'canvas' && recordCanvas) {\n if (n.__context === '2d') {\n if (!is2DCanvasBlank(n)) {\n attributes_1.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n }\n else if (!('__context' in n)) {\n var canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n var blankCanvas = document.createElement('canvas');\n blankCanvas.width = n.width;\n blankCanvas.height = n.height;\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes_1.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === 'img' && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement('canvas');\n canvasCtx = canvasService.getContext('2d');\n }\n var image_1 = n;\n var oldValue_1 = image_1.crossOrigin;\n image_1.crossOrigin = 'anonymous';\n var recordInlineImage = function () {\n try {\n canvasService.width = image_1.naturalWidth;\n canvasService.height = image_1.naturalHeight;\n canvasCtx.drawImage(image_1, 0, 0);\n attributes_1.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n catch (err) {\n console.warn(\"Cannot inline img src=\" + image_1.currentSrc + \"! Error: \" + err);\n }\n oldValue_1\n ? (attributes_1.crossOrigin = oldValue_1)\n : delete attributes_1.crossOrigin;\n };\n if (image_1.complete && image_1.naturalWidth !== 0)\n recordInlineImage();\n else\n image_1.onload = recordInlineImage;\n }\n if (tagName === 'audio' || tagName === 'video') {\n attributes_1.rr_mediaState = n.paused\n ? 'paused'\n : 'played';\n attributes_1.rr_mediaCurrentTime = n.currentTime;\n }\n if (n.scrollLeft) {\n attributes_1.rr_scrollLeft = n.scrollLeft;\n }\n if (n.scrollTop) {\n attributes_1.rr_scrollTop = n.scrollTop;\n }\n if (needBlock || (tagName === 'img' && enableStrictPrivacy)) {\n var _f = n.getBoundingClientRect(), width = _f.width, height = _f.height;\n attributes_1 = {\n \"class\": attributes_1[\"class\"],\n rr_width: width + \"px\",\n rr_height: height + \"px\"\n };\n needBlock = true;\n }\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes_1.src)) {\n if (!n.contentDocument) {\n attributes_1.rr_src = attributes_1.src;\n }\n delete attributes_1.src;\n }\n return {\n type: NodeType.Element,\n tagName: tagName,\n attributes: attributes_1,\n childNodes: [],\n isSVG: isSVGElement(n) || undefined,\n needBlock: needBlock,\n rootId: rootId\n };\n case n.TEXT_NODE:\n var parentTagName = n.parentNode && n.parentNode.tagName;\n var textContent = n.textContent;\n var isStyle = parentTagName === 'STYLE' ? true : undefined;\n var isScript = parentTagName === 'SCRIPT' ? true : undefined;\n var textContentHandled = false;\n if (isStyle && textContent) {\n try {\n if (n.nextSibling || n.previousSibling) {\n }\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\n textContent = stringifyStyleSheet(n.parentNode.sheet);\n }\n }\n catch (err) {\n console.warn(\"Cannot get CSS styles from text's parentNode. Error: \" + err, n);\n }\n textContent = absoluteToStylesheet(textContent, getHref());\n textContentHandled = true;\n }\n if (isScript) {\n textContent = 'SCRIPT_PLACEHOLDER';\n textContentHandled = true;\n }\n else if (parentTagName === 'NOSCRIPT') {\n textContent = '';\n textContentHandled = true;\n }\n if (!isStyle &&\n !isScript &&\n needMaskingText(n, maskTextClass, maskTextSelector) &&\n textContent) {\n textContent = maskTextFn\n ? maskTextFn(textContent)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (enableStrictPrivacy && !textContentHandled && parentTagName) {\n var IGNORE_TAG_NAMES = new Set([\n 'HEAD',\n 'TITLE',\n 'STYLE',\n 'SCRIPT',\n 'HTML',\n 'BODY',\n 'NOSCRIPT',\n ]);\n if (!IGNORE_TAG_NAMES.has(parentTagName) && textContent) {\n textContent = obfuscateText(textContent);\n }\n }\n return {\n type: NodeType.Text,\n textContent: textContent || '',\n isStyle: isStyle,\n rootId: rootId\n };\n case n.CDATA_SECTION_NODE:\n return {\n type: NodeType.CDATA,\n textContent: '',\n rootId: rootId\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType.Comment,\n textContent: n.textContent || '',\n rootId: rootId\n };\n default:\n return false;\n }\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === undefined) {\n return '';\n }\n else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\n return true;\n }\n else if (sn.type === NodeType.Element) {\n if (slimDOMOptions.script &&\n (sn.tagName === 'script' ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'preload' &&\n sn.attributes.as === 'script') ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n sn.attributes.href.endsWith('.js')))) {\n return true;\n }\n else if (slimDOMOptions.headFavicon &&\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n (sn.tagName === 'meta' &&\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n lowerIfExists(sn.attributes.name) === 'application-name' ||\n lowerIfExists(sn.attributes.rel) === 'icon' ||\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n return true;\n }\n else if (sn.tagName === 'meta') {\n if (slimDOMOptions.headMetaDescKeywords &&\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n }\n else if (slimDOMOptions.headMetaSocial &&\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\n return true;\n }\n else if (slimDOMOptions.headMetaRobots &&\n (lowerIfExists(sn.attributes.name) === 'robots' ||\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\n return true;\n }\n else if (slimDOMOptions.headMetaHttpEquiv &&\n sn.attributes['http-equiv'] !== undefined) {\n return true;\n }\n else if (slimDOMOptions.headMetaAuthorship &&\n (lowerIfExists(sn.attributes.name) === 'author' ||\n lowerIfExists(sn.attributes.name) === 'generator' ||\n lowerIfExists(sn.attributes.name) === 'framework' ||\n lowerIfExists(sn.attributes.name) === 'publisher' ||\n lowerIfExists(sn.attributes.name) === 'progid' ||\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n }\n else if (slimDOMOptions.headMetaVerification &&\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n lowerIfExists(sn.attributes.name) === 'verification' ||\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n, options) {\n var doc = options.doc, map = options.map, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.inlineStylesheet, inlineStylesheet = _b === void 0 ? true : _b, _c = options.maskInputOptions, maskInputOptions = _c === void 0 ? {} : _c, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _d = options.dataURLOptions, dataURLOptions = _d === void 0 ? {} : _d, _e = options.inlineImages, inlineImages = _e === void 0 ? false : _e, _f = options.recordCanvas, recordCanvas = _f === void 0 ? false : _f, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _g = options.iframeLoadTimeout, iframeLoadTimeout = _g === void 0 ? 5000 : _g, _h = options.keepIframeSrcFn, keepIframeSrcFn = _h === void 0 ? function () { return false; } : _h, enableStrictPrivacy = options.enableStrictPrivacy;\n var _j = options.preserveWhiteSpace, preserveWhiteSpace = _j === void 0 ? true : _j;\n var _serializedNode = serializeNode(n, {\n doc: doc,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n keepIframeSrcFn: keepIframeSrcFn,\n enableStrictPrivacy: enableStrictPrivacy\n });\n if (!_serializedNode) {\n console.warn(n, 'not serialized');\n return null;\n }\n var id;\n if ('__sn' in n) {\n id = n.__sn.id;\n }\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n (!preserveWhiteSpace &&\n _serializedNode.type === NodeType.Text &&\n !_serializedNode.isStyle &&\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n id = IGNORED_NODE;\n }\n else {\n id = genId();\n }\n var serializedNode = Object.assign(_serializedNode, { id: id });\n n.__sn = serializedNode;\n if (id === IGNORED_NODE) {\n return null;\n }\n map[id] = n;\n if (onSerialize) {\n onSerialize(n);\n }\n var recordChild = !skipChild;\n if (serializedNode.type === NodeType.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n if (serializedNode.needBlock && serializedNode.tagName === 'img') {\n var clone = n.cloneNode();\n clone.src = '';\n map[id] = clone;\n }\n delete serializedNode.needBlock;\n if (n.shadowRoot)\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType.Document ||\n serializedNode.type === NodeType.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n _serializedNode.type === NodeType.Element &&\n _serializedNode.tagName === 'head') {\n preserveWhiteSpace = false;\n }\n var bypassOptions = {\n doc: doc,\n map: map,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: skipChild,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n enableStrictPrivacy: enableStrictPrivacy\n };\n for (var _i = 0, _k = Array.from(n.childNodes); _i < _k.length; _i++) {\n var childN = _k[_i];\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n if (isElement(n) && n.shadowRoot) {\n for (var _l = 0, _m = Array.from(n.shadowRoot.childNodes); _l < _m.length; _l++) {\n var childN = _m[_l];\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedChildNode.isShadow = true;\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n.parentNode && isShadowRoot(n.parentNode)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, function () {\n var iframeDoc = n.contentDocument;\n if (iframeDoc && onIframeLoad) {\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n map: map,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n enableStrictPrivacy: enableStrictPrivacy\n });\n if (serializedIframeNode) {\n onIframeLoad(n, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n, options) {\n var _a = options || {}, _b = _a.blockClass, blockClass = _b === void 0 ? 'highlight-block' : _b, _c = _a.blockSelector, blockSelector = _c === void 0 ? null : _c, _d = _a.maskTextClass, maskTextClass = _d === void 0 ? 'highlight-mask' : _d, _e = _a.maskTextSelector, maskTextSelector = _e === void 0 ? null : _e, _f = _a.inlineStylesheet, inlineStylesheet = _f === void 0 ? true : _f, _g = _a.inlineImages, inlineImages = _g === void 0 ? false : _g, _h = _a.recordCanvas, recordCanvas = _h === void 0 ? false : _h, _j = _a.maskAllInputs, maskAllInputs = _j === void 0 ? false : _j, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _k = _a.slimDOM, slimDOM = _k === void 0 ? false : _k, dataURLOptions = _a.dataURLOptions, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, _l = _a.keepIframeSrcFn, keepIframeSrcFn = _l === void 0 ? function () { return false; } : _l, _m = _a.enableStrictPrivacy, enableStrictPrivacy = _m === void 0 ? false : _m;\n var idNodeMap = {};\n var maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n password: true\n }\n : maskAllInputs === false\n ? {\n password: true\n }\n : maskAllInputs;\n var slimDOMOptions = slimDOM === true || slimDOM === 'all'\n ?\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === 'all',\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true\n }\n : slimDOM === false\n ? {}\n : slimDOM;\n return [\n serializeNodeWithId(n, {\n doc: n,\n map: idNodeMap,\n blockClass: blockClass,\n blockSelector: blockSelector,\n maskTextClass: maskTextClass,\n maskTextSelector: maskTextSelector,\n skipChild: false,\n inlineStylesheet: inlineStylesheet,\n maskInputOptions: maskInputOptions,\n maskTextFn: maskTextFn,\n maskInputFn: maskInputFn,\n slimDOMOptions: slimDOMOptions,\n dataURLOptions: dataURLOptions,\n inlineImages: inlineImages,\n recordCanvas: recordCanvas,\n preserveWhiteSpace: preserveWhiteSpace,\n onSerialize: onSerialize,\n onIframeLoad: onIframeLoad,\n iframeLoadTimeout: iframeLoadTimeout,\n keepIframeSrcFn: keepIframeSrcFn,\n enableStrictPrivacy: enableStrictPrivacy\n }),\n idNodeMap,\n ];\n}\nfunction visitSnapshot(node, onVisit) {\n function walk(current) {\n onVisit(current);\n if (current.type === NodeType.Document ||\n current.type === NodeType.Element) {\n current.childNodes.forEach(walk);\n }\n }\n walk(node);\n}\nfunction cleanupSnapshot() {\n _id = 1;\n}\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\nfunction parse(css, options) {\n if (options === void 0) { options = {}; }\n var lineno = 1;\n var column = 1;\n function updatePosition(str) {\n var lines = str.match(/\\n/g);\n if (lines) {\n lineno += lines.length;\n }\n var i = str.lastIndexOf('\\n');\n column = i === -1 ? column + str.length : str.length - i;\n }\n function position() {\n var start = { line: lineno, column: column };\n return function (node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n var Position = (function () {\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n return Position;\n }());\n Position.prototype.content = css;\n var errorsList = [];\n function error(msg) {\n var err = new Error(options.source + ':' + lineno + ':' + column + ': ' + msg);\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = css;\n if (options.silent) {\n errorsList.push(err);\n }\n else {\n throw err;\n }\n }\n function stylesheet() {\n var rulesList = rules();\n return {\n type: 'stylesheet',\n stylesheet: {\n source: options.source,\n rules: rulesList,\n parsingErrors: errorsList\n }\n };\n }\n function open() {\n return match(/^{\\s*/);\n }\n function close() {\n return match(/^}/);\n }\n function rules() {\n var node;\n var rules = [];\n whitespace();\n comments(rules);\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\n if (node !== false) {\n rules.push(node);\n comments(rules);\n }\n }\n return rules;\n }\n function match(re) {\n var m = re.exec(css);\n if (!m) {\n return;\n }\n var str = m[0];\n updatePosition(str);\n css = css.slice(str.length);\n return m;\n }\n function whitespace() {\n match(/^\\s*/);\n }\n function comments(rules) {\n if (rules === void 0) { rules = []; }\n var c;\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n c = comment();\n }\n return rules;\n }\n function comment() {\n var pos = position();\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\n return;\n }\n var i = 2;\n while ('' !== css.charAt(i) &&\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\n ++i;\n }\n i += 2;\n if ('' === css.charAt(i - 1)) {\n return error('End of comment missing');\n }\n var str = css.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n css = css.slice(i);\n column += 2;\n return pos({\n type: 'comment',\n comment: str\n });\n }\n function selector() {\n var m = match(/^([^{]+)/);\n if (!m) {\n return;\n }\n return trim(m[0])\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\n return m.replace(/,/g, '\\u200C');\n })\n .split(/\\s*(?![^(]*\\)),\\s*/)\n .map(function (s) {\n return s.replace(/\\u200C/g, ',');\n });\n }\n function declaration() {\n var pos = position();\n var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n if (!propMatch) {\n return;\n }\n var prop = trim(propMatch[0]);\n if (!match(/^:\\s*/)) {\n return error(\"property missing ':'\");\n }\n var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n var ret = pos({\n type: 'declaration',\n property: prop.replace(commentre, ''),\n value: val ? trim(val[0]).replace(commentre, '') : ''\n });\n match(/^[;\\s]*/);\n return ret;\n }\n function declarations() {\n var decls = [];\n if (!open()) {\n return error(\"missing '{'\");\n }\n comments(decls);\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n decl = declaration();\n }\n if (!close()) {\n return error(\"missing '}'\");\n }\n return decls;\n }\n function keyframe() {\n var m;\n var vals = [];\n var pos = position();\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\n vals.push(m[1]);\n match(/^,\\s*/);\n }\n if (!vals.length) {\n return;\n }\n return pos({\n type: 'keyframe',\n values: vals,\n declarations: declarations()\n });\n }\n function atkeyframes() {\n var pos = position();\n var m = match(/^@([-\\w]+)?keyframes\\s*/);\n if (!m) {\n return;\n }\n var vendor = m[1];\n m = match(/^([-\\w]+)\\s*/);\n if (!m) {\n return error('@keyframes missing name');\n }\n var name = m[1];\n if (!open()) {\n return error(\"@keyframes missing '{'\");\n }\n var frame;\n var frames = comments();\n while ((frame = keyframe())) {\n frames.push(frame);\n frames = frames.concat(comments());\n }\n if (!close()) {\n return error(\"@keyframes missing '}'\");\n }\n return pos({\n type: 'keyframes',\n name: name,\n vendor: vendor,\n keyframes: frames\n });\n }\n function atsupports() {\n var pos = position();\n var m = match(/^@supports *([^{]+)/);\n if (!m) {\n return;\n }\n var supports = trim(m[1]);\n if (!open()) {\n return error(\"@supports missing '{'\");\n }\n var style = comments().concat(rules());\n if (!close()) {\n return error(\"@supports missing '}'\");\n }\n return pos({\n type: 'supports',\n supports: supports,\n rules: style\n });\n }\n function athost() {\n var pos = position();\n var m = match(/^@host\\s*/);\n if (!m) {\n return;\n }\n if (!open()) {\n return error(\"@host missing '{'\");\n }\n var style = comments().concat(rules());\n if (!close()) {\n return error(\"@host missing '}'\");\n }\n return pos({\n type: 'host',\n rules: style\n });\n }\n function atmedia() {\n var pos = position();\n var m = match(/^@media *([^{]+)/);\n if (!m) {\n return;\n }\n var media = trim(m[1]);\n if (!open()) {\n return error(\"@media missing '{'\");\n }\n var style = comments().concat(rules());\n if (!close()) {\n return error(\"@media missing '}'\");\n }\n return pos({\n type: 'media',\n media: media,\n rules: style\n });\n }\n function atcustommedia() {\n var pos = position();\n var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n if (!m) {\n return;\n }\n return pos({\n type: 'custom-media',\n name: trim(m[1]),\n media: trim(m[2])\n });\n }\n function atpage() {\n var pos = position();\n var m = match(/^@page */);\n if (!m) {\n return;\n }\n var sel = selector() || [];\n if (!open()) {\n return error(\"@page missing '{'\");\n }\n var decls = comments();\n var decl;\n while ((decl = declaration())) {\n decls.push(decl);\n decls = decls.concat(comments());\n }\n if (!close()) {\n return error(\"@page missing '}'\");\n }\n return pos({\n type: 'page',\n selectors: sel,\n declarations: decls\n });\n }\n function atdocument() {\n var pos = position();\n var m = match(/^@([-\\w]+)?document *([^{]+)/);\n if (!m) {\n return;\n }\n var vendor = trim(m[1]);\n var doc = trim(m[2]);\n if (!open()) {\n return error(\"@document missing '{'\");\n }\n var style = comments().concat(rules());\n if (!close()) {\n return error(\"@document missing '}'\");\n }\n return pos({\n type: 'document',\n document: doc,\n vendor: vendor,\n rules: style\n });\n }\n function atfontface() {\n var pos = position();\n var m = match(/^@font-face\\s*/);\n if (!m) {\n return;\n }\n if (!open()) {\n return error(\"@font-face missing '{'\");\n }\n var decls = comments();\n var decl;\n while ((decl = declaration())) {\n decls.push(decl);\n decls = decls.concat(comments());\n }\n if (!close()) {\n return error(\"@font-face missing '}'\");\n }\n return pos({\n type: 'font-face',\n declarations: decls\n });\n }\n var atimport = _compileAtrule('import');\n var atcharset = _compileAtrule('charset');\n var atnamespace = _compileAtrule('namespace');\n function _compileAtrule(name) {\n var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\n return function () {\n var pos = position();\n var m = match(re);\n if (!m) {\n return;\n }\n var ret = { type: name };\n ret[name] = m[1].trim();\n return pos(ret);\n };\n }\n function atrule() {\n if (css[0] !== '@') {\n return;\n }\n return (atkeyframes() ||\n atmedia() ||\n atcustommedia() ||\n atsupports() ||\n atimport() ||\n atcharset() ||\n atnamespace() ||\n atdocument() ||\n atpage() ||\n athost() ||\n atfontface());\n }\n function rule() {\n var pos = position();\n var sel = selector();\n if (!sel) {\n return error('selector missing');\n }\n comments();\n return pos({\n type: 'rule',\n selectors: sel,\n declarations: declarations()\n });\n }\n return addParent(stylesheet());\n}\nfunction trim(str) {\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\n}\nfunction addParent(obj, parent) {\n var isNode = obj && typeof obj.type === 'string';\n var childParent = isNode ? obj : parent;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var k = _a[_i];\n var value = obj[k];\n if (Array.isArray(value)) {\n value.forEach(function (v) {\n addParent(v, childParent);\n });\n }\n else if (value && typeof value === 'object') {\n addParent(value, childParent);\n }\n }\n if (isNode) {\n Object.defineProperty(obj, 'parent', {\n configurable: true,\n writable: true,\n enumerable: false,\n value: parent || null\n });\n }\n return obj;\n}\n\nvar tagMap = {\n script: 'noscript',\n altglyph: 'altGlyph',\n altglyphdef: 'altGlyphDef',\n altglyphitem: 'altGlyphItem',\n animatecolor: 'animateColor',\n animatemotion: 'animateMotion',\n animatetransform: 'animateTransform',\n clippath: 'clipPath',\n feblend: 'feBlend',\n fecolormatrix: 'feColorMatrix',\n fecomponenttransfer: 'feComponentTransfer',\n fecomposite: 'feComposite',\n feconvolvematrix: 'feConvolveMatrix',\n fediffuselighting: 'feDiffuseLighting',\n fedisplacementmap: 'feDisplacementMap',\n fedistantlight: 'feDistantLight',\n fedropshadow: 'feDropShadow',\n feflood: 'feFlood',\n fefunca: 'feFuncA',\n fefuncb: 'feFuncB',\n fefuncg: 'feFuncG',\n fefuncr: 'feFuncR',\n fegaussianblur: 'feGaussianBlur',\n feimage: 'feImage',\n femerge: 'feMerge',\n femergenode: 'feMergeNode',\n femorphology: 'feMorphology',\n feoffset: 'feOffset',\n fepointlight: 'fePointLight',\n fespecularlighting: 'feSpecularLighting',\n fespotlight: 'feSpotLight',\n fetile: 'feTile',\n feturbulence: 'feTurbulence',\n foreignobject: 'foreignObject',\n glyphref: 'glyphRef',\n lineargradient: 'linearGradient',\n radialgradient: 'radialGradient'\n};\nfunction getTagName(n) {\n var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\n if (tagName === 'link' && n.attributes._cssText) {\n tagName = 'style';\n }\n return tagName;\n}\nfunction escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\nfunction addHoverClass(cssText, cache) {\n var _a;\n if (!((_a = window.HIG_CONFIGURATION) === null || _a === void 0 ? void 0 : _a.enableOnHoverClass)) {\n return cssText;\n }\n var cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\n if (cachedStyle)\n return cachedStyle;\n var ast = parse(cssText, {\n silent: true\n });\n if (!ast.stylesheet) {\n return cssText;\n }\n var selectors = [];\n ast.stylesheet.rules.forEach(function (rule) {\n if ('selectors' in rule) {\n (rule.selectors || []).forEach(function (selector) {\n if (HOVER_SELECTOR.test(selector)) {\n selectors.push(selector);\n }\n });\n }\n });\n if (selectors.length === 0) {\n return cssText;\n }\n var selectorMatcher = new RegExp(selectors\n .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\n .sort(function (a, b) { return b.length - a.length; })\n .map(function (selector) {\n return escapeRegExp(selector);\n })\n .join('|'), 'g');\n var result = cssText.replace(selectorMatcher, function (selector) {\n var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\n return selector + \", \" + newSelector;\n });\n cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\n return result;\n}\nfunction createCache() {\n var stylesWithHoverClass = new Map();\n return {\n stylesWithHoverClass: stylesWithHoverClass\n };\n}\nfunction buildNode(n, options) {\n var doc = options.doc, hackCss = options.hackCss, cache = options.cache;\n switch (n.type) {\n case NodeType.Document:\n return doc.implementation.createDocument(null, '', null);\n case NodeType.DocumentType:\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\n case NodeType.Element:\n var tagName = getTagName(n);\n var node_1;\n if (n.isSVG) {\n node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\n }\n else {\n node_1 = doc.createElement(tagName);\n }\n var _loop_1 = function (name_1) {\n if (!n.attributes.hasOwnProperty(name_1)) {\n return \"continue\";\n }\n var value = n.attributes[name_1];\n if (tagName === 'option' && name_1 === 'selected' && value === false) {\n return \"continue\";\n }\n value =\n typeof value === 'boolean' || typeof value === 'number' ? '' : value;\n if (!name_1.startsWith('rr_')) {\n var isTextarea = tagName === 'textarea' && name_1 === 'value';\n var isRemoteOrDynamicCss = tagName === 'style' && name_1 === '_cssText';\n if (isRemoteOrDynamicCss && hackCss) {\n value = addHoverClass(value, cache);\n if (typeof value === 'string') {\n var regex = /url\\(\\\"https:\\/\\/\\S*(.eot|.woff2|.ttf|.woff)\\S*\\\"\\)/gm;\n var m = void 0;\n var fontUrls_1 = [];\n var PROXY_URL_1 = 'https://replay-cors-proxy.highlightrun.workers.dev';\n while ((m = regex.exec(value)) !== null) {\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n m.forEach(function (match, groupIndex) {\n if (groupIndex === 0) {\n var url = match.slice(5, match.length - 2);\n fontUrls_1.push({\n originalUrl: url,\n proxyUrl: url.replace(url, PROXY_URL_1 + \"?url=\" + url)\n });\n }\n });\n }\n fontUrls_1.forEach(function (urlPair) {\n value = value.replace(urlPair.originalUrl, urlPair.proxyUrl);\n });\n }\n }\n if (isTextarea || isRemoteOrDynamicCss) {\n var child = doc.createTextNode(value);\n for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.nodeType === node_1.TEXT_NODE) {\n node_1.removeChild(c);\n }\n }\n node_1.appendChild(child);\n return \"continue\";\n }\n try {\n if (n.isSVG && name_1 === 'xlink:href') {\n node_1.setAttributeNS('http://www.w3.org/1999/xlink', name_1, value);\n }\n else if (name_1 === 'onload' ||\n name_1 === 'onclick' ||\n name_1.substring(0, 7) === 'onmouse') {\n node_1.setAttribute('_' + name_1, value);\n }\n else if (tagName === 'meta' &&\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\n name_1 === 'content') {\n node_1.setAttribute('csp-content', value);\n return \"continue\";\n }\n else if (tagName === 'link' &&\n n.attributes.rel === 'preload' &&\n n.attributes.as === 'script') {\n }\n else if (tagName === 'link' &&\n n.attributes.rel === 'prefetch' &&\n typeof n.attributes.href === 'string' &&\n n.attributes.href.endsWith('.js')) {\n }\n else if (tagName === 'img' &&\n n.attributes.srcset &&\n n.attributes.rr_dataURL) {\n node_1.setAttribute('rrweb-original-srcset', n.attributes.srcset);\n }\n else {\n node_1.setAttribute(name_1, value);\n }\n }\n catch (error) {\n }\n }\n else {\n if (tagName === 'canvas' && name_1 === 'rr_dataURL') {\n var image_1 = document.createElement('img');\n image_1.src = value;\n image_1.onload = function () {\n var ctx = node_1.getContext('2d');\n if (ctx) {\n ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\n }\n };\n }\n else if (tagName === 'img' && name_1 === 'rr_dataURL') {\n var image = node_1;\n if (!image.currentSrc.startsWith('data:')) {\n image.setAttribute('rrweb-original-src', n.attributes.src);\n image.src = value;\n }\n }\n if (name_1 === 'rr_width') {\n node_1.style.width = value;\n }\n else if (name_1 === 'rr_height') {\n node_1.style.height = value;\n }\n else if (name_1 === 'rr_mediaCurrentTime') {\n node_1.currentTime = n.attributes\n .rr_mediaCurrentTime;\n }\n else if (name_1 === 'rr_mediaState') {\n switch (value) {\n case 'played':\n node_1\n .play()[\"catch\"](function (e) { return console.warn('media playback error', e); });\n break;\n case 'paused':\n node_1.pause();\n break;\n }\n }\n }\n };\n for (var name_1 in n.attributes) {\n _loop_1(name_1);\n }\n if (n.isShadowHost) {\n if (!node_1.shadowRoot) {\n node_1.attachShadow({ mode: 'open' });\n }\n else {\n while (node_1.shadowRoot.firstChild) {\n node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\n }\n }\n }\n return node_1;\n case NodeType.Text:\n return doc.createTextNode(n.isStyle && hackCss\n ? addHoverClass(n.textContent, cache)\n : n.textContent);\n case NodeType.CDATA:\n return doc.createCDATASection(n.textContent);\n case NodeType.Comment:\n return doc.createComment(n.textContent);\n default:\n return null;\n }\n}\nfunction buildNodeWithSN(n, options) {\n var doc = options.doc, map = options.map, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend, cache = options.cache;\n var node = buildNode(n, { doc: doc, hackCss: hackCss, cache: cache });\n if (!node) {\n return null;\n }\n if (n.rootId) {\n console.assert(map[n.rootId] === doc, 'Target document should has the same root id.');\n }\n if (n.type === NodeType.Document) {\n doc.close();\n doc.open();\n if (n.compatMode === 'BackCompat' &&\n n.childNodes &&\n n.childNodes[0].type !== NodeType.DocumentType) {\n if (n.childNodes[0].type === NodeType.Element &&\n 'xmlns' in n.childNodes[0].attributes &&\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\n }\n else {\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\n }\n }\n node = doc;\n }\n node.__sn = n;\n map[n.id] = node;\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\n !skipChild) {\n for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\n var childN = _c[_i];\n var childNode = buildNodeWithSN(childN, {\n doc: doc,\n map: map,\n skipChild: false,\n hackCss: hackCss,\n afterAppend: afterAppend,\n cache: cache\n });\n if (!childNode) {\n console.warn('Failed to rebuild', childN);\n continue;\n }\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\n node.shadowRoot.appendChild(childNode);\n }\n else {\n node.appendChild(childNode);\n }\n if (afterAppend) {\n afterAppend(childNode);\n }\n }\n }\n return node;\n}\nfunction visit(idNodeMap, onVisit) {\n function walk(node) {\n onVisit(node);\n }\n for (var key in idNodeMap) {\n if (idNodeMap[key]) {\n walk(idNodeMap[key]);\n }\n }\n}\nfunction handleScroll(node) {\n var n = node.__sn;\n if (n.type !== NodeType.Element) {\n return;\n }\n var el = node;\n for (var name_2 in n.attributes) {\n if (!(n.attributes.hasOwnProperty(name_2) && name_2.startsWith('rr_'))) {\n continue;\n }\n var value = n.attributes[name_2];\n if (name_2 === 'rr_scrollLeft') {\n el.scrollLeft = value;\n }\n if (name_2 === 'rr_scrollTop') {\n el.scrollTop = value;\n }\n }\n}\nfunction rebuild(n, options) {\n var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend, cache = options.cache;\n var idNodeMap = {};\n var node = buildNodeWithSN(n, {\n doc: doc,\n map: idNodeMap,\n skipChild: false,\n hackCss: hackCss,\n afterAppend: afterAppend,\n cache: cache\n });\n visit(idNodeMap, function (visitedNode) {\n if (onVisit) {\n onVisit(visitedNode);\n }\n handleScroll(visitedNode);\n });\n return [node, idNodeMap];\n}\n\nexport { IGNORED_NODE, NodeType, addHoverClass, buildNodeWithSN, cleanupSnapshot, createCache, is2DCanvasBlank, isElement, isShadowRoot, maskInputValue, needMaskingText, obfuscateText, rebuild, serializeNodeWithId, snapshot, transformAttribute, visitSnapshot };\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","import {\n serializedNodeWithId,\n idNodeMap,\n INode,\n MaskInputOptions,\n SlimDOMOptions,\n MaskInputFn,\n MaskTextFn,\n} from '@highlight-run/rrweb-snapshot';\nimport { PackFn, UnpackFn } from './packer/base';\nimport { IframeManager } from './record/iframe-manager';\nimport { ShadowDomManager } from './record/shadow-dom-manager';\nimport type { Replayer } from './replay';\nimport { CanvasManager } from './record/observers/canvas/canvas-manager';\n\nexport enum EventType {\n DomContentLoaded,\n Load,\n FullSnapshot,\n IncrementalSnapshot,\n Meta,\n Custom,\n Plugin,\n}\n\nexport type SessionInterval = {\n startTime: number;\n endTime: number;\n duration: number;\n active: boolean;\n};\n\nexport type domContentLoadedEvent = {\n type: EventType.DomContentLoaded;\n data: {};\n};\n\nexport type loadedEvent = {\n type: EventType.Load;\n data: {};\n};\n\nexport type fullSnapshotEvent = {\n type: EventType.FullSnapshot;\n data: {\n node: serializedNodeWithId;\n initialOffset: {\n top: number;\n left: number;\n };\n };\n};\n\nexport type incrementalSnapshotEvent = {\n type: EventType.IncrementalSnapshot;\n data: incrementalData;\n};\n\nexport type metaEvent = {\n type: EventType.Meta;\n data: {\n href: string;\n width: number;\n height: number;\n };\n};\n\nexport type customEvent<T = unknown> = {\n type: EventType.Custom;\n data: {\n tag: string;\n payload: T;\n };\n};\n\nexport type pluginEvent<T = unknown> = {\n type: EventType.Plugin;\n data: {\n plugin: string;\n payload: T;\n };\n};\n\nexport type styleSheetEvent = {};\n\nexport enum IncrementalSource {\n Mutation,\n MouseMove,\n MouseInteraction,\n Scroll,\n ViewportResize,\n Input,\n TouchMove,\n MediaInteraction,\n StyleSheetRule,\n CanvasMutation,\n Font,\n Log,\n Drag,\n StyleDeclaration,\n}\n\nexport type mutationData = {\n source: IncrementalSource.Mutation;\n} & mutationCallbackParam;\n\nexport type mousemoveData = {\n source:\n | IncrementalSource.MouseMove\n | IncrementalSource.TouchMove\n | IncrementalSource.Drag;\n positions: mousePosition[];\n};\n\nexport type mouseInteractionData = {\n source: IncrementalSource.MouseInteraction;\n} & mouseInteractionParam;\n\nexport type scrollData = {\n source: IncrementalSource.Scroll;\n} & scrollPosition;\n\nexport type viewportResizeData = {\n source: IncrementalSource.ViewportResize;\n} & viewportResizeDimension;\n\nexport type inputData = {\n source: IncrementalSource.Input;\n id: number;\n} & inputValue;\n\nexport type mediaInteractionData = {\n source: IncrementalSource.MediaInteraction;\n} & mediaInteractionParam;\n\nexport type styleSheetRuleData = {\n source: IncrementalSource.StyleSheetRule;\n} & styleSheetRuleParam;\n\nexport type styleDeclarationData = {\n source: IncrementalSource.StyleDeclaration;\n} & styleDeclarationParam;\n\nexport type canvasMutationData = {\n source: IncrementalSource.CanvasMutation;\n} & canvasMutationParam;\n\nexport type fontData = {\n source: IncrementalSource.Font;\n} & fontParam;\n\nexport type incrementalData =\n | mutationData\n | mousemoveData\n | mouseInteractionData\n | scrollData\n | viewportResizeData\n | inputData\n | mediaInteractionData\n | styleSheetRuleData\n | canvasMutationData\n | fontData\n | styleDeclarationData;\n\nexport type event =\n | domContentLoadedEvent\n | loadedEvent\n | fullSnapshotEvent\n | incrementalSnapshotEvent\n | metaEvent\n | customEvent\n | pluginEvent;\n\nexport type eventWithTime = event & {\n timestamp: number;\n delay?: number;\n};\n\nexport type blockClass = string | RegExp;\n\nexport type maskTextClass = string | RegExp;\n\nexport type SamplingStrategy = Partial<{\n /**\n * false means not to record mouse/touch move events\n * number is the throttle threshold of recording mouse/touch move\n */\n mousemove: boolean | number;\n /**\n * number is the throttle threshold of mouse/touch move callback\n */\n mousemoveCallback: number;\n /**\n * false means not to record mouse interaction events\n * can also specify record some kinds of mouse interactions\n */\n mouseInteraction: boolean | Record<string, boolean | undefined>;\n /**\n * number is the throttle threshold of recording scroll\n */\n scroll: number;\n /**\n * number is the throttle threshold of recording media interactions\n */\n media: number;\n /**\n * 'all' will record all the input events\n * 'last' will only record the last input value while input a sequence of chars\n */\n input: 'all' | 'last';\n}>;\n\nexport type RecordPlugin<TOptions = unknown> = {\n name: string;\n observer?: (cb: Function, win: IWindow, options: TOptions) => listenerHandler;\n eventProcessor?: <TExtend>(event: eventWithTime) => eventWithTime & TExtend;\n options: TOptions;\n};\n\nexport type recordOptions<T> = {\n emit?: (e: T, isCheckout?: boolean) => void;\n checkoutEveryNth?: number;\n checkoutEveryNms?: number;\n blockClass?: blockClass;\n blockSelector?: string;\n ignoreClass?: string;\n maskTextClass?: maskTextClass;\n maskTextSelector?: string;\n maskAllInputs?: boolean;\n maskInputOptions?: MaskInputOptions;\n maskInputFn?: MaskInputFn;\n maskTextFn?: MaskTextFn;\n slimDOMOptions?: SlimDOMOptions | 'all' | true;\n inlineStylesheet?: boolean;\n hooks?: hooksParam;\n packFn?: PackFn;\n sampling?: SamplingStrategy;\n recordCanvas?: boolean;\n userTriggeredOnInput?: boolean;\n collectFonts?: boolean;\n inlineImages?: boolean;\n plugins?: RecordPlugin[];\n // departed, please use sampling options\n mousemoveWait?: number;\n keepIframeSrcFn?: KeepIframeSrcFn;\n /**\n * Enabling this will disable recording of text data on the page. This is useful if you do not want to record personally identifiable information.\n * Text will be randomized. Instead of seeing \"Hello World\" in a recording, you will see \"1fds1 j59a0\".\n */\n enableStrictPrivacy?: boolean;\n};\n\nexport type observerParam = {\n mutationCb: mutationCallBack;\n mousemoveCb: mousemoveCallBack;\n mouseInteractionCb: mouseInteractionCallBack;\n scrollCb: scrollCallback;\n viewportResizeCb: viewportResizeCallback;\n inputCb: inputCallback;\n mediaInteractionCb: mediaInteractionCallback;\n blockClass: blockClass;\n blockSelector: string | null;\n ignoreClass: string;\n maskTextClass: maskTextClass;\n maskTextSelector: string | null;\n maskInputOptions: MaskInputOptions;\n maskInputFn?: MaskInputFn;\n maskTextFn?: MaskTextFn;\n inlineStylesheet: boolean;\n styleSheetRuleCb: styleSheetRuleCallback;\n styleDeclarationCb: styleDeclarationCallback;\n canvasMutationCb: canvasMutationCallback;\n fontCb: fontCallback;\n sampling: SamplingStrategy;\n recordCanvas: boolean;\n inlineImages: boolean;\n userTriggeredOnInput: boolean;\n collectFonts: boolean;\n slimDOMOptions: SlimDOMOptions;\n doc: Document;\n mirror: Mirror;\n iframeManager: IframeManager;\n shadowDomManager: ShadowDomManager;\n canvasManager: CanvasManager;\n enableStrictPrivacy: boolean,\n plugins: Array<{\n observer: Function;\n callback: Function;\n options: unknown;\n }>;\n};\n\nexport type MutationBufferParam = Pick<\n observerParam,\n | 'mutationCb'\n | 'blockClass'\n | 'blockSelector'\n | 'maskTextClass'\n | 'maskTextSelector'\n | 'inlineStylesheet'\n | 'maskInputOptions'\n | 'maskTextFn'\n | 'maskInputFn'\n | 'recordCanvas'\n | 'inlineImages'\n | 'slimDOMOptions'\n | 'doc'\n | 'mirror'\n | 'iframeManager'\n | 'shadowDomManager'\n | 'canvasManager'\n | 'enableStrictPrivacy'\n>;\n\nexport type hooksParam = {\n mutation?: mutationCallBack;\n mousemove?: mousemoveCallBack;\n mouseInteraction?: mouseInteractionCallBack;\n scroll?: scrollCallback;\n viewportResize?: viewportResizeCallback;\n input?: inputCallback;\n mediaInteaction?: mediaInteractionCallback;\n styleSheetRule?: styleSheetRuleCallback;\n styleDeclaration?: styleDeclarationCallback;\n canvasMutation?: canvasMutationCallback;\n font?: fontCallback;\n};\n\n// https://dom.spec.whatwg.org/#interface-mutationrecord\nexport type mutationRecord = {\n type: string;\n target: Node;\n oldValue: string | null;\n addedNodes: NodeList;\n removedNodes: NodeList;\n attributeName: string | null;\n};\n\nexport type textCursor = {\n node: Node;\n value: string | null;\n};\nexport type textMutation = {\n id: number;\n value: string | null;\n};\n\nexport type styleAttributeValue = {\n [key: string]: styleValueWithPriority | string | false;\n};\n\nexport type styleValueWithPriority = [string, string];\n\nexport type attributeCursor = {\n node: Node;\n attributes: {\n [key: string]: string | styleAttributeValue | null;\n };\n};\nexport type attributeMutation = {\n id: number;\n attributes: {\n [key: string]: string | styleAttributeValue | null;\n };\n};\n\nexport type removedNodeMutation = {\n parentId: number;\n id: number;\n isShadow?: boolean;\n};\n\nexport type addedNodeMutation = {\n parentId: number;\n // Newly recorded mutations will not have previousId any more, just for compatibility\n previousId?: number | null;\n nextId: number | null;\n node: serializedNodeWithId;\n};\n\nexport type mutationCallbackParam = {\n texts: textMutation[];\n attributes: attributeMutation[];\n removes: removedNodeMutation[];\n adds: addedNodeMutation[];\n isAttachIframe?: true;\n};\n\nexport type mutationCallBack = (m: mutationCallbackParam) => void;\n\nexport type mousemoveCallBack = (\n p: mousePosition[],\n source:\n | IncrementalSource.MouseMove\n | IncrementalSource.TouchMove\n | IncrementalSource.Drag,\n) => void;\n\nexport type mousePosition = {\n x: number;\n y: number;\n id: number;\n timeOffset: number;\n};\n\nexport type mouseMovePos = {\n x: number;\n y: number;\n id: number;\n debugData: incrementalData;\n};\n\nexport enum MouseInteractions {\n MouseUp,\n MouseDown,\n Click,\n ContextMenu,\n DblClick,\n Focus,\n Blur,\n TouchStart,\n TouchMove_Departed, // we will start a separate observer for touch move event\n TouchEnd,\n TouchCancel,\n}\n\nexport enum CanvasContext {\n '2D',\n WebGL,\n WebGL2,\n}\n\nexport type SerializedWebGlArg =\n | {\n rr_type: 'ArrayBuffer';\n base64: string; // base64\n }\n | {\n rr_type: string;\n src: string; // url of image\n }\n | {\n rr_type: string;\n args: SerializedWebGlArg[];\n }\n | {\n rr_type: string;\n index: number;\n }\n | string\n | number\n | boolean\n | null\n | SerializedWebGlArg[];\n\ntype mouseInteractionParam = {\n type: MouseInteractions;\n id: number;\n x: number;\n y: number;\n};\n\nexport type mouseInteractionCallBack = (d: mouseInteractionParam) => void;\n\nexport type scrollPosition = {\n id: number;\n x: number;\n y: number;\n};\n\nexport type scrollCallback = (p: scrollPosition) => void;\n\nexport type styleSheetAddRule = {\n rule: string;\n index?: number | number[];\n};\n\nexport type styleSheetDeleteRule = {\n index: number | number[];\n};\n\nexport type styleSheetRuleParam = {\n id: number;\n removes?: styleSheetDeleteRule[];\n adds?: styleSheetAddRule[];\n};\n\nexport type styleSheetRuleCallback = (s: styleSheetRuleParam) => void;\n\nexport type styleDeclarationParam = {\n id: number;\n index: number[];\n set?: {\n property: string;\n value: string | null;\n priority: string | undefined;\n };\n remove?: {\n property: string;\n };\n};\n\nexport type styleDeclarationCallback = (s: styleDeclarationParam) => void;\n\nexport type canvasMutationCommand = {\n property: string;\n args: Array<unknown>;\n setter?: true;\n};\n\nexport type canvasMutationParam =\n | {\n id: number;\n type: CanvasContext;\n commands: canvasMutationCommand[];\n }\n | ({\n id: number;\n type: CanvasContext;\n } & canvasMutationCommand);\n\nexport type canvasMutationWithType = {\n type: CanvasContext;\n} & canvasMutationCommand;\n\nexport type canvasMutationCallback = (p: canvasMutationParam) => void;\n\nexport type canvasManagerMutationCallback = (\n target: HTMLCanvasElement,\n p: canvasMutationWithType,\n) => void;\n\nexport type fontParam = {\n family: string;\n fontSource: string;\n buffer: boolean;\n descriptors?: FontFaceDescriptors;\n};\n\nexport type fontCallback = (p: fontParam) => void;\n\nexport type viewportResizeDimension = {\n width: number;\n height: number;\n};\n\nexport type viewportResizeCallback = (d: viewportResizeDimension) => void;\n\nexport type inputValue = {\n text: string;\n isChecked: boolean;\n\n // `userTriggered` indicates if this event was triggered directly by user (userTriggered: true)\n // or was triggered indirectly (userTriggered: false)\n // Example of `userTriggered` in action:\n // User clicks on radio element (userTriggered: true) which triggers the other radio element to change (userTriggered: false)\n userTriggered?: boolean;\n};\n\nexport type inputCallback = (v: inputValue & { id: number }) => void;\n\nexport const enum MediaInteractions {\n Play,\n Pause,\n Seeked,\n VolumeChange,\n}\n\nexport type mediaInteractionParam = {\n type: MediaInteractions;\n id: number;\n currentTime?: number;\n volume?: number;\n muted?: boolean;\n};\n\nexport type mediaInteractionCallback = (p: mediaInteractionParam) => void;\n\nexport type DocumentDimension = {\n x: number;\n y: number;\n // scale value relative to its parent iframe\n relativeScale: number;\n // scale value relative to the root iframe\n absoluteScale: number;\n};\n\nexport type Mirror = {\n map: idNodeMap;\n getId: (n: INode) => number;\n getNode: (id: number) => INode | null;\n removeNodeFromMap: (n: INode) => void;\n has: (id: number) => boolean;\n reset: () => void;\n};\n\nexport type throttleOptions = {\n leading?: boolean;\n trailing?: boolean;\n};\n\nexport type listenerHandler = () => void;\nexport type hookResetter = () => void;\n\nexport type ReplayPlugin = {\n handler: (\n event: eventWithTime,\n isSync: boolean,\n context: { replayer: Replayer },\n ) => void;\n};\nexport type playerConfig = {\n speed: number;\n maxSpeed: number;\n root: Element;\n loadTimeout: number;\n skipInactive: boolean;\n showWarning: boolean;\n showDebug: boolean;\n blockClass: string;\n liveMode: boolean;\n insertStyleRules: string[];\n triggerFocus: boolean;\n UNSAFE_replayCanvas: boolean;\n pauseAnimation?: boolean;\n mouseTail:\n | boolean\n | {\n duration?: number;\n lineCap?: string;\n lineWidth?: number;\n strokeStyle?: string;\n };\n unpackFn?: UnpackFn;\n plugins?: ReplayPlugin[];\n inactiveThreshold: number;\n inactiveSkipTime: number;\n};\n\nexport type playerMetaData = {\n startTime: number;\n endTime: number;\n totalTime: number;\n};\n\nexport type missingNode = {\n node: Node;\n mutation: addedNodeMutation;\n};\nexport type missingNodeMap = {\n [id: number]: missingNode;\n};\n\nexport type actionWithDelay = {\n doAction: () => void;\n delay: number;\n};\n\nexport type Handler = (event?: unknown) => void;\n\nexport type Emitter = {\n on(type: string, handler: Handler): void;\n emit(type: string, event?: unknown): void;\n off(type: string, handler: Handler): void;\n};\n\nexport type Arguments<T> = T extends (...payload: infer U) => unknown\n ? U\n : unknown;\n\nexport enum ReplayerEvents {\n Start = 'start',\n Pause = 'pause',\n Resume = 'resume',\n Resize = 'resize',\n Finish = 'finish',\n FullsnapshotRebuilded = 'fullsnapshot-rebuilded',\n LoadStylesheetStart = 'load-stylesheet-start',\n LoadStylesheetEnd = 'load-stylesheet-end',\n SkipStart = 'skip-start',\n SkipEnd = 'skip-end',\n MouseInteraction = 'mouse-interaction',\n EventCast = 'event-cast',\n CustomEvent = 'custom-event',\n Flush = 'flush',\n StateChange = 'state-change',\n PlayBack = 'play-back',\n}\n\n// store the state that would be changed during the process(unmount from dom and mount again)\nexport type ElementState = {\n // [scrollLeft,scrollTop]\n scroll?: [number, number];\n};\n\nexport type KeepIframeSrcFn = (src: string) => boolean;\n\ndeclare global {\n interface Window {\n FontFace: typeof FontFace;\n }\n}\n\nexport type IWindow = Window & typeof globalThis;\n\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n","/**\n * A fork version of https://github.com/iamdustan/smoothscroll\n * Add support of customize target window and document\n */\n\n// @ts-nocheck\n// tslint:disable\nexport function polyfill(w: Window = window, d = document) {\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView,\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.',\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y,\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function () {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset,\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset,\n );\n };\n\n // w.scrollBy\n w.scrollBy = function () {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : 0,\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset),\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function () {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object'\n ? ~~arguments[0]\n : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined\n ? ~~arguments[1]\n : this.scrollTop,\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top,\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function () {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop,\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior,\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function () {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0],\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top,\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth',\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth',\n });\n }\n };\n}\n","import {\n actionWithDelay,\n eventWithTime,\n EventType,\n IncrementalSource,\n} from '../types';\n\nexport class Timer {\n public timeOffset: number = 0;\n public speed: number;\n\n private actions: actionWithDelay[];\n private raf: number | null = null;\n private liveMode: boolean;\n\n constructor(actions: actionWithDelay[] = [], speed: number) {\n this.actions = actions;\n this.speed = speed;\n }\n /**\n * Add an action after the timer starts.\n * @param action\n */\n public addAction(action: actionWithDelay) {\n const index = this.findActionIndex(action);\n this.actions.splice(index, 0, action);\n }\n /**\n * Add all actions before the timer starts\n * @param actions\n */\n public addActions(actions: actionWithDelay[]) {\n this.actions = this.actions.concat(actions);\n }\n\n public replaceActions(actions: actionWithDelay[]) {\n this.actions.length = 0;\n this.actions.splice(0, 0, ...actions);\n }\n\n public start() {\n this.timeOffset = 0;\n let lastTimestamp = performance.now();\n const { actions } = this;\n const self = this;\n function check() {\n const time = performance.now();\n self.timeOffset += (time - lastTimestamp) * self.speed;\n lastTimestamp = time;\n while (actions.length) {\n const action = actions[0];\n\n if (self.timeOffset >= action.delay) {\n actions.shift();\n action.doAction();\n } else {\n break;\n }\n }\n if (actions.length > 0 || self.liveMode) {\n self.raf = requestAnimationFrame(check);\n }\n }\n this.raf = requestAnimationFrame(check);\n }\n\n public clear() {\n if (this.raf) {\n cancelAnimationFrame(this.raf);\n this.raf = null;\n }\n this.actions.length = 0;\n }\n\n public setSpeed(speed: number) {\n this.speed = speed;\n }\n\n public toggleLiveMode(mode: boolean) {\n this.liveMode = mode;\n }\n\n public isActive() {\n return this.raf !== null;\n }\n\n private findActionIndex(action: actionWithDelay): number {\n let start = 0;\n let end = this.actions.length - 1;\n while (start <= end) {\n let mid = Math.floor((start + end) / 2);\n if (this.actions[mid].delay < action.delay) {\n start = mid + 1;\n } else if (this.actions[mid].delay > action.delay) {\n end = mid - 1;\n } else {\n // already an action with same delay (timestamp)\n // the plus one will splice the new one after the existing one\n return mid + 1;\n }\n }\n return start;\n }\n}\n\n// TODO: add speed to mouse move timestamp calculation\nexport function addDelay(event: eventWithTime, baselineTime: number): number {\n // Mouse move events was recorded in a throttle function,\n // so we need to find the real timestamp by traverse the time offsets.\n if (\n event.type === EventType.IncrementalSnapshot &&\n event.data.source === IncrementalSource.MouseMove\n ) {\n const firstOffset = event.data.positions[0].timeOffset;\n // timeOffset is a negative offset to event.timestamp\n const firstTimestamp = event.timestamp + firstOffset;\n event.delay = firstTimestamp - baselineTime;\n return firstTimestamp - baselineTime;\n }\n\n event.delay = event.timestamp - baselineTime;\n return event.delay;\n}\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,n){var e=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,o,i=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(e=i.return)&&e.call(i)}finally{if(o)throw o.error}}return a}var n;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\"}(n||(n={}));var e={type:\"xstate.init\"};function r(t){return void 0===t?[]:[].concat(t)}function o(t){return{type:\"xstate.assign\",assignment:t}}function i(t,n){return\"string\"==typeof(t=\"string\"==typeof t&&n&&n[t]?n[t]:t)?{type:t}:\"function\"==typeof t?{type:t.name,exec:t}:t}function a(t){return function(n){return t===n}}function u(t){return\"string\"==typeof t?{type:t}:t}function c(t,n){return{value:t,context:n,actions:[],changed:!1,matches:a(t)}}function f(t,n,e){var r=n,o=!1;return[t.filter((function(t){if(\"xstate.assign\"===t.type){o=!0;var n=Object.assign({},r);return\"function\"==typeof t.assignment?n=t.assignment(r,e):Object.keys(t.assignment).forEach((function(o){n[o]=\"function\"==typeof t.assignment[o]?t.assignment[o](r,e):t.assignment[o]})),r=n,!1}return!0})),r,o]}function s(n,o){void 0===o&&(o={});var s=t(f(r(n.states[n.initial].entry).map((function(t){return i(t,o.actions)})),n.context,e),2),l=s[0],v=s[1],y={config:n,_options:o,initialState:{value:n.initial,actions:l,context:v,matches:a(n.initial)},transition:function(e,o){var s,l,v=\"string\"==typeof e?{value:e,context:n.context}:e,p=v.value,g=v.context,d=u(o),x=n.states[p];if(x.on){var m=r(x.on[d.type]);try{for(var h=function(t){var n=\"function\"==typeof Symbol&&Symbol.iterator,e=n&&t[n],r=0;if(e)return e.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(m),b=h.next();!b.done;b=h.next()){var S=b.value;if(void 0===S)return c(p,g);var w=\"string\"==typeof S?{target:S}:S,j=w.target,E=w.actions,R=void 0===E?[]:E,N=w.cond,O=void 0===N?function(){return!0}:N,_=void 0===j,k=null!=j?j:p,T=n.states[k];if(O(g,d)){var q=t(f((_?r(R):[].concat(x.exit,R,T.entry).filter((function(t){return t}))).map((function(t){return i(t,y._options.actions)})),g,d),3),z=q[0],A=q[1],B=q[2],C=null!=j?j:p;return{value:C,context:A,actions:z,changed:j!==p||z.length>0||B,matches:a(C)}}}}catch(t){s={error:t}}finally{try{b&&!b.done&&(l=h.return)&&l.call(h)}finally{if(s)throw s.error}}}return c(p,g)}};return y}var l=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function v(t){var r=t.initialState,o=n.NotStarted,i=new Set,c={_machine:t,send:function(e){o===n.Running&&(r=t.transition(r,e),l(r,u(e)),i.forEach((function(t){return t(r)})))},subscribe:function(t){return i.add(t),t(r),{unsubscribe:function(){return i.delete(t)}}},start:function(i){if(i){var u=\"object\"==typeof i?i:{context:t.config.context,value:i};r={value:u.value,actions:[],context:u.context,matches:a(u.value)}}return o=n.Running,l(r,e),c},stop:function(){return o=n.Stopped,i.clear(),c},get state(){return r},get status(){return o}};return c}export{n as InterpreterStatus,o as assign,s as createMachine,v as interpret};\n","import { createMachine, interpret, assign, StateMachine } from '@xstate/fsm';\nimport {\n playerConfig,\n eventWithTime,\n actionWithDelay,\n ReplayerEvents,\n EventType,\n Emitter,\n IncrementalSource,\n} from '../types';\nimport { Timer, addDelay } from './timer';\n\nexport type PlayerContext = {\n events: eventWithTime[];\n timer: Timer;\n timeOffset: number;\n baselineTime: number;\n lastPlayedEvent: eventWithTime | null;\n};\nexport type PlayerEvent =\n | {\n type: 'PLAY';\n payload: {\n timeOffset: number;\n };\n }\n | {\n type: 'CAST_EVENT';\n payload: {\n event: eventWithTime;\n };\n }\n | { type: 'PAUSE' }\n | { type: 'TO_LIVE'; payload: { baselineTime?: number } }\n | {\n type: 'ADD_EVENT';\n payload: {\n event: eventWithTime;\n };\n }\n | {\n type: 'REPLACE_EVENTS';\n payload: { events: eventWithTime[]; };\n }\n | {\n type: 'END';\n };\nexport type PlayerState =\n | {\n value: 'playing';\n context: PlayerContext;\n }\n | {\n value: 'paused';\n context: PlayerContext;\n }\n | {\n value: 'live';\n context: PlayerContext;\n };\n\n/**\n * If the array have multiple meta and fullsnapshot events,\n * return the events from last meta to the end.\n */\nexport function discardPriorSnapshots(\n events: eventWithTime[],\n baselineTime: number,\n): eventWithTime[] {\n for (let idx = events.length - 1; idx >= 0; idx--) {\n const event = events[idx];\n if (event.type === EventType.Meta) {\n if (event.timestamp <= baselineTime) {\n return events.slice(idx);\n }\n }\n }\n return events;\n}\n\ntype PlayerAssets = {\n emitter: Emitter;\n applyEventsSynchronously(events: Array<eventWithTime>): void;\n getCastFn(event: eventWithTime, isSync: boolean): () => void;\n};\nexport function createPlayerService(\n context: PlayerContext,\n { getCastFn, applyEventsSynchronously, emitter }: PlayerAssets,\n) {\n const playerMachine = createMachine<PlayerContext, PlayerEvent, PlayerState>(\n {\n id: 'player',\n context,\n initial: 'paused',\n states: {\n playing: {\n on: {\n PAUSE: {\n target: 'paused',\n actions: ['pause'],\n },\n CAST_EVENT: {\n target: 'playing',\n actions: 'castEvent',\n },\n END: {\n target: 'paused',\n actions: ['resetLastPlayedEvent', 'pause'],\n },\n ADD_EVENT: {\n target: 'playing',\n actions: ['addEvent'],\n },\n REPLACE_EVENTS: {\n target: 'playing',\n actions: ['replaceEvents'],\n },\n },\n },\n paused: {\n on: {\n PLAY: {\n target: 'playing',\n actions: ['recordTimeOffset', 'play'],\n },\n CAST_EVENT: {\n target: 'paused',\n actions: 'castEvent',\n },\n TO_LIVE: {\n target: 'live',\n actions: ['startLive'],\n },\n ADD_EVENT: {\n target: 'paused',\n actions: ['addEvent'],\n },\n REPLACE_EVENTS: {\n target: 'paused',\n actions: ['replaceEvents'],\n },\n },\n },\n live: {\n on: {\n ADD_EVENT: {\n target: 'live',\n actions: ['addEvent'],\n },\n CAST_EVENT: {\n target: 'live',\n actions: ['castEvent'],\n },\n },\n },\n },\n },\n {\n actions: {\n castEvent: assign({\n lastPlayedEvent: (ctx, event) => {\n if (event.type === 'CAST_EVENT') {\n return event.payload.event;\n }\n return ctx.lastPlayedEvent;\n },\n }),\n recordTimeOffset: assign((ctx, event) => {\n let timeOffset = ctx.timeOffset;\n if ('payload' in event && 'timeOffset' in event.payload) {\n timeOffset = event.payload.timeOffset;\n }\n return {\n ...ctx,\n timeOffset,\n baselineTime: ctx.events[0].timestamp + timeOffset,\n };\n }),\n play(ctx) {\n const { timer, events, baselineTime, lastPlayedEvent } = ctx;\n timer.clear();\n\n for (const event of events) {\n // TODO: improve this API\n addDelay(event, baselineTime);\n }\n const neededEvents = discardPriorSnapshots(events, baselineTime);\n\n let lastPlayedTimestamp = lastPlayedEvent?.timestamp;\n if (\n lastPlayedEvent?.type === EventType.IncrementalSnapshot &&\n lastPlayedEvent.data.source === IncrementalSource.MouseMove\n ) {\n lastPlayedTimestamp =\n lastPlayedEvent.timestamp +\n lastPlayedEvent.data.positions[0]?.timeOffset;\n }\n if (baselineTime < (lastPlayedTimestamp || 0)) {\n emitter.emit(ReplayerEvents.PlayBack);\n }\n\n const syncEvents = new Array<eventWithTime>();\n const actions = new Array<actionWithDelay>();\n for (const event of neededEvents) {\n if (\n lastPlayedTimestamp &&\n lastPlayedTimestamp < baselineTime &&\n (event.timestamp <= lastPlayedTimestamp ||\n event === lastPlayedEvent)\n ) {\n continue;\n }\n if (event.timestamp < baselineTime) {\n syncEvents.push(event);\n } else {\n const castFn = getCastFn(event, false);\n actions.push({\n doAction: () => {\n castFn();\n },\n delay: event.delay!,\n });\n }\n }\n applyEventsSynchronously(syncEvents);\n emitter.emit(ReplayerEvents.Flush);\n timer.addActions(actions);\n timer.start();\n },\n pause(ctx) {\n ctx.timer.clear();\n },\n resetLastPlayedEvent: assign((ctx) => {\n return {\n ...ctx,\n lastPlayedEvent: null,\n };\n }),\n startLive: assign({\n baselineTime: (ctx, event) => {\n ctx.timer.toggleLiveMode(true);\n ctx.timer.start();\n if (event.type === 'TO_LIVE' && event.payload.baselineTime) {\n return event.payload.baselineTime;\n }\n return Date.now();\n },\n }),\n /* Highlight Code Start */\n replaceEvents: assign((ctx, machineEvent) => {\n const { events: curEvents, timer, baselineTime } = ctx;\n if (machineEvent.type === 'REPLACE_EVENTS') {\n const { events: newEvents } = machineEvent.payload;\n curEvents.length = 0;\n const actions: actionWithDelay[] = [];\n for (const event of newEvents) {\n addDelay(event, baselineTime);\n curEvents.push(event);\n if (event.timestamp >= timer.timeOffset + baselineTime) {\n const castFn = getCastFn(event, false);\n actions.push({\n doAction: () => {\n castFn();\n },\n delay: event.delay!,\n });\n }\n }\n\n if (timer.isActive()) {\n timer.replaceActions(actions);\n }\n }\n return { ...ctx, events: curEvents };\n }),\n /* Highlight Code End */\n addEvent: assign((ctx, machineEvent) => {\n const { baselineTime, timer, events } = ctx;\n if (machineEvent.type === 'ADD_EVENT') {\n const { event } = machineEvent.payload;\n addDelay(event, baselineTime);\n\n let end = events.length - 1;\n if (!events[end] || events[end].timestamp <= event.timestamp) {\n // fast track\n events.push(event);\n } else {\n let insertionIndex = -1;\n let start = 0;\n while (start <= end) {\n let mid = Math.floor((start + end) / 2);\n if (events[mid].timestamp <= event.timestamp) {\n start = mid + 1;\n } else {\n end = mid - 1;\n }\n }\n if (insertionIndex === -1) {\n insertionIndex = start;\n }\n events.splice(insertionIndex, 0, event);\n }\n\n const isSync = event.timestamp < baselineTime;\n const castFn = getCastFn(event, isSync);\n if (isSync) {\n castFn();\n } else if (timer.isActive()) {\n timer.addAction({\n doAction: () => {\n castFn();\n },\n delay: event.delay!,\n });\n }\n }\n return { ...ctx, events };\n }),\n },\n },\n );\n return interpret(playerMachine);\n}\n\nexport type SpeedContext = {\n normalSpeed: playerConfig['speed'];\n timer: Timer;\n};\n\nexport type SpeedEvent =\n | {\n type: 'FAST_FORWARD';\n payload: { speed: playerConfig['speed'] };\n }\n | {\n type: 'BACK_TO_NORMAL';\n }\n | {\n type: 'SET_SPEED';\n payload: { speed: playerConfig['speed'] };\n };\n\nexport type SpeedState =\n | {\n value: 'normal';\n context: SpeedContext;\n }\n | {\n value: 'skipping';\n context: SpeedContext;\n };\n\nexport function createSpeedService(context: SpeedContext) {\n const speedMachine = createMachine<SpeedContext, SpeedEvent, SpeedState>(\n {\n id: 'speed',\n context,\n initial: 'normal',\n states: {\n normal: {\n on: {\n FAST_FORWARD: {\n target: 'skipping',\n actions: ['recordSpeed', 'setSpeed'],\n },\n SET_SPEED: {\n target: 'normal',\n actions: ['setSpeed'],\n },\n },\n },\n skipping: {\n on: {\n BACK_TO_NORMAL: {\n target: 'normal',\n actions: ['restoreSpeed'],\n },\n SET_SPEED: {\n target: 'normal',\n actions: ['setSpeed'],\n },\n },\n },\n },\n },\n {\n actions: {\n setSpeed: (ctx, event) => {\n if ('payload' in event) {\n ctx.timer.setSpeed(event.payload.speed);\n }\n },\n recordSpeed: assign({\n normalSpeed: (ctx) => ctx.timer.speed,\n }),\n restoreSpeed: (ctx) => {\n ctx.timer.setSpeed(ctx.normalSpeed);\n },\n },\n },\n );\n\n return interpret(speedMachine);\n}\n\nexport type PlayerMachineState = StateMachine.State<\n PlayerContext,\n PlayerEvent,\n PlayerState\n>;\n\nexport type SpeedMachineState = StateMachine.State<\n SpeedContext,\n SpeedEvent,\n SpeedState\n>;\n","import {\n Mirror,\n throttleOptions,\n listenerHandler,\n hookResetter,\n blockClass,\n IncrementalSource,\n addedNodeMutation,\n removedNodeMutation,\n textMutation,\n attributeMutation,\n mutationData,\n scrollData,\n inputData,\n DocumentDimension,\n IWindow,\n} from './types';\nimport {\n INode,\n IGNORED_NODE,\n serializedNodeWithId,\n NodeType,\n isShadowRoot,\n} from '@highlight-run/rrweb-snapshot';\n\nexport function on(\n type: string,\n fn: EventListenerOrEventListenerObject,\n target: Document | IWindow = document,\n): listenerHandler {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\n\nexport function createMirror(): Mirror {\n return {\n map: {},\n getId(n) {\n // if n is not a serialized INode, use -1 as its id.\n if (!n || !n.__sn) {\n return -1;\n }\n return n.__sn.id;\n },\n getNode(id) {\n return this.map[id] || null;\n },\n // TODO: use a weakmap to get rid of manually memory management\n removeNodeFromMap(n) {\n const id = n.__sn && n.__sn.id;\n delete this.map[id];\n if (n.childNodes) {\n n.childNodes.forEach((child) =>\n this.removeNodeFromMap((child as Node) as INode),\n );\n }\n },\n has(id) {\n return this.map.hasOwnProperty(id);\n },\n reset() {\n this.map = {};\n },\n };\n}\n\n// https://github.com/rrweb-io/rrweb/pull/407\nconst DEPARTED_MIRROR_ACCESS_WARNING =\n 'Please stop import mirror directly. Instead of that,' +\n '\\r\\n' +\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n '\\r\\n' +\n 'or you can use record.mirror to access the mirror instance during recording.';\nexport let _mirror: Mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === 'map') {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\n\n// copy from underscore and modified\nexport function throttle<T>(\n func: (arg: T) => void,\n wait: number,\n options: throttleOptions = {},\n) {\n let timeout: ReturnType<typeof setTimeout> | null = null;\n let previous = 0;\n // tslint:disable-next-line: only-arrow-functions\n return function (arg: T) {\n let now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n let remaining = wait - (now - previous);\n let context = this;\n let args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\n\nexport function hookSetter<T>(\n target: T,\n key: string | number | symbol,\n d: PropertyDescriptor,\n isRevoked?: boolean,\n win = window,\n): hookResetter {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(\n target,\n key,\n isRevoked\n ? d\n : {\n set(value) {\n // put hooked setter into event loop to avoid of set latency\n setTimeout(() => {\n d.set!.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n },\n },\n );\n return () => hookSetter(target, key, original || {}, true);\n}\n\n// copy from https://github.com/getsentry/sentry-javascript/blob/b2109071975af8bf0316d3b5b38f519bdaf5dc15/packages/utils/src/object.ts\nexport function patch(\n // tslint:disable-next-line:no-any\n source: { [key: string]: any },\n name: string,\n // tslint:disable-next-line:no-any\n replacement: (...args: any[]) => any,\n): () => void {\n try {\n if (!(name in source)) {\n return () => {};\n }\n\n const original = source[name] as () => unknown;\n const wrapped = replacement(original);\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n // tslint:disable-next-line:strict-type-predicates\n if (typeof wrapped === 'function') {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original,\n },\n });\n }\n\n source[name] = wrapped;\n\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {};\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n}\n\nexport function getWindowHeight(): number {\n return (\n window.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight)\n );\n}\n\nexport function getWindowWidth(): number {\n return (\n window.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth)\n );\n}\n\n/**\n * Start of Highlight Code\n */\nexport const isCanvasNode = (node: Node | null): boolean => {\n try {\n if (node instanceof HTMLElement) {\n return node.tagName === 'CANVAS';\n }\n } catch {\n return false;\n }\n return false;\n};\n/**\n * End of Highlight Code\n */\n\nexport function isBlocked(node: Node | null, blockClass: blockClass): boolean {\n if (!node) {\n return false;\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n let needBlock = false;\n if (typeof blockClass === 'string') {\n if ((node as HTMLElement).closest !== undefined) {\n return (node as HTMLElement).closest('.' + blockClass) !== null;\n } else {\n needBlock = (node as HTMLElement).classList.contains(blockClass);\n }\n } else {\n (node as HTMLElement).classList.forEach((className) => {\n if (blockClass.test(className)) {\n needBlock = true;\n }\n });\n }\n return needBlock || isBlocked(node.parentNode, blockClass);\n }\n if (node.nodeType === node.TEXT_NODE) {\n // check parent node since text node do not have class name\n return isBlocked(node.parentNode, blockClass);\n }\n return isBlocked(node.parentNode, blockClass);\n}\n\nexport function isIgnored(n: Node | INode): boolean {\n if ('__sn' in n) {\n return (n as INode).__sn.id === IGNORED_NODE;\n }\n // The main part of the slimDOM check happens in\n // rrweb-snapshot::serializeNodeWithId\n return false;\n}\n\nexport function isAncestorRemoved(target: INode, mirror: Mirror): boolean {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror.getId(target);\n if (!mirror.has(id)) {\n return true;\n }\n if (\n target.parentNode &&\n target.parentNode.nodeType === target.DOCUMENT_NODE\n ) {\n return false;\n }\n // if the root is not document, it means the node is not in the DOM tree anymore\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved((target.parentNode as unknown) as INode, mirror);\n}\n\nexport function isTouchEvent(\n event: MouseEvent | TouchEvent,\n): event is TouchEvent {\n return Boolean((event as TouchEvent).changedTouches);\n}\n\nexport function polyfill(win = window) {\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = (Array.prototype\n .forEach as unknown) as NodeList['forEach'];\n }\n\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = (Array.prototype\n .forEach as unknown) as DOMTokenList['forEach'];\n }\n\n // https://github.com/Financial-Times/polyfill-service/pull/183\n if (!Node.prototype.contains) {\n Node.prototype.contains = function contains(node) {\n if (!(0 in arguments)) {\n throw new TypeError('1 argument is required');\n }\n\n do {\n if (this === node) {\n return true;\n }\n // tslint:disable-next-line: no-conditional-assignment\n } while ((node = node && node.parentNode));\n\n return false;\n };\n }\n}\n\nexport type TreeNode = {\n id: number;\n mutation: addedNodeMutation;\n parent?: TreeNode;\n children: Record<number, TreeNode>;\n texts: textMutation[];\n attributes: attributeMutation[];\n};\nexport class TreeIndex {\n public tree!: Record<number, TreeNode>;\n\n private removeNodeMutations!: removedNodeMutation[];\n private textMutations!: textMutation[];\n private attributeMutations!: attributeMutation[];\n private indexes!: Map<number, TreeNode>;\n private removeIdSet!: Set<number>;\n private scrollMap!: Map<number, scrollData>;\n private inputMap!: Map<number, inputData>;\n\n constructor() {\n this.reset();\n }\n\n public add(mutation: addedNodeMutation) {\n const parentTreeNode = this.indexes.get(mutation.parentId);\n const treeNode: TreeNode = {\n id: mutation.node.id,\n mutation,\n children: [],\n texts: [],\n attributes: [],\n };\n if (!parentTreeNode) {\n this.tree[treeNode.id] = treeNode;\n } else {\n treeNode.parent = parentTreeNode;\n parentTreeNode.children[treeNode.id] = treeNode;\n }\n this.indexes.set(treeNode.id, treeNode);\n }\n\n public remove(mutation: removedNodeMutation, mirror: Mirror) {\n const parentTreeNode = this.indexes.get(mutation.parentId);\n const treeNode = this.indexes.get(mutation.id);\n\n const deepRemoveFromMirror = (id: number) => {\n this.removeIdSet.add(id);\n const node = mirror.getNode(id);\n node?.childNodes.forEach((childNode) => {\n if ('__sn' in childNode) {\n deepRemoveFromMirror(((childNode as unknown) as INode).__sn.id);\n }\n });\n };\n const deepRemoveFromTreeIndex = (node: TreeNode) => {\n this.removeIdSet.add(node.id);\n Object.values(node.children).forEach((n) => deepRemoveFromTreeIndex(n));\n const _treeNode = this.indexes.get(node.id);\n if (_treeNode) {\n const _parentTreeNode = _treeNode.parent;\n if (_parentTreeNode) {\n delete _treeNode.parent;\n delete _parentTreeNode.children[_treeNode.id];\n this.indexes.delete(mutation.id);\n }\n }\n };\n\n if (!treeNode) {\n this.removeNodeMutations.push(mutation);\n deepRemoveFromMirror(mutation.id);\n } else if (!parentTreeNode) {\n delete this.tree[treeNode.id];\n this.indexes.delete(treeNode.id);\n deepRemoveFromTreeIndex(treeNode);\n } else {\n delete treeNode.parent;\n delete parentTreeNode.children[treeNode.id];\n this.indexes.delete(mutation.id);\n deepRemoveFromTreeIndex(treeNode);\n }\n }\n\n public text(mutation: textMutation) {\n const treeNode = this.indexes.get(mutation.id);\n if (treeNode) {\n treeNode.texts.push(mutation);\n } else {\n this.textMutations.push(mutation);\n }\n }\n\n public attribute(mutation: attributeMutation) {\n const treeNode = this.indexes.get(mutation.id);\n if (treeNode) {\n treeNode.attributes.push(mutation);\n } else {\n this.attributeMutations.push(mutation);\n }\n }\n\n public scroll(d: scrollData) {\n this.scrollMap.set(d.id, d);\n }\n\n public input(d: inputData) {\n this.inputMap.set(d.id, d);\n }\n\n public flush(): {\n mutationData: mutationData;\n scrollMap: TreeIndex['scrollMap'];\n inputMap: TreeIndex['inputMap'];\n } {\n const {\n tree,\n removeNodeMutations,\n textMutations,\n attributeMutations,\n } = this;\n\n const batchMutationData: mutationData = {\n source: IncrementalSource.Mutation,\n removes: removeNodeMutations,\n texts: textMutations,\n attributes: attributeMutations,\n adds: [],\n };\n\n const walk = (treeNode: TreeNode, removed: boolean) => {\n if (removed) {\n this.removeIdSet.add(treeNode.id);\n }\n batchMutationData.texts = batchMutationData.texts\n .concat(removed ? [] : treeNode.texts)\n .filter((m) => !this.removeIdSet.has(m.id));\n batchMutationData.attributes = batchMutationData.attributes\n .concat(removed ? [] : treeNode.attributes)\n .filter((m) => !this.removeIdSet.has(m.id));\n if (\n !this.removeIdSet.has(treeNode.id) &&\n !this.removeIdSet.has(treeNode.mutation.parentId) &&\n !removed\n ) {\n batchMutationData.adds.push(treeNode.mutation);\n if (treeNode.children) {\n Object.values(treeNode.children).forEach((n) => walk(n, false));\n }\n } else {\n Object.values(treeNode.children).forEach((n) => walk(n, true));\n }\n };\n\n Object.values(tree).forEach((n) => walk(n, false));\n\n for (const id of this.scrollMap.keys()) {\n if (this.removeIdSet.has(id)) {\n this.scrollMap.delete(id);\n }\n }\n for (const id of this.inputMap.keys()) {\n if (this.removeIdSet.has(id)) {\n this.inputMap.delete(id);\n }\n }\n\n const scrollMap = new Map(this.scrollMap);\n const inputMap = new Map(this.inputMap);\n\n this.reset();\n\n return {\n mutationData: batchMutationData,\n scrollMap,\n inputMap,\n };\n }\n\n private reset() {\n this.tree = [];\n this.indexes = new Map();\n this.removeNodeMutations = [];\n this.textMutations = [];\n this.attributeMutations = [];\n this.removeIdSet = new Set();\n this.scrollMap = new Map();\n this.inputMap = new Map();\n }\n\n public idRemoved(id: number): boolean {\n return this.removeIdSet.has(id);\n }\n}\n\ntype ResolveTree = {\n value: addedNodeMutation;\n children: ResolveTree[];\n parent: ResolveTree | null;\n};\n\nexport function queueToResolveTrees(queue: addedNodeMutation[]): ResolveTree[] {\n const queueNodeMap: Record<number, ResolveTree> = {};\n const putIntoMap = (\n m: addedNodeMutation,\n parent: ResolveTree | null,\n ): ResolveTree => {\n const nodeInTree: ResolveTree = {\n value: m,\n parent,\n children: [],\n };\n queueNodeMap[m.node.id] = nodeInTree;\n return nodeInTree;\n };\n\n const queueNodeTrees: ResolveTree[] = [];\n for (const mutation of queue) {\n const { nextId, parentId } = mutation;\n if (nextId && nextId in queueNodeMap) {\n const nextInTree = queueNodeMap[nextId];\n if (nextInTree.parent) {\n const idx = nextInTree.parent.children.indexOf(nextInTree);\n nextInTree.parent.children.splice(\n idx,\n 0,\n putIntoMap(mutation, nextInTree.parent),\n );\n } else {\n const idx = queueNodeTrees.indexOf(nextInTree);\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n }\n continue;\n }\n if (parentId in queueNodeMap) {\n const parentInTree = queueNodeMap[parentId];\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\n continue;\n }\n queueNodeTrees.push(putIntoMap(mutation, null));\n }\n\n return queueNodeTrees;\n}\n\nexport function iterateResolveTree(\n tree: ResolveTree,\n cb: (mutation: addedNodeMutation) => unknown,\n) {\n cb(tree.value);\n /**\n * The resolve tree was designed to reflect the DOM layout,\n * but we need append next sibling first, so we do a reverse\n * loop here.\n */\n for (let i = tree.children.length - 1; i >= 0; i--) {\n iterateResolveTree(tree.children[i], cb);\n }\n}\n\ntype HTMLIFrameINode = HTMLIFrameElement & {\n __sn: serializedNodeWithId;\n};\nexport type AppendedIframe = {\n mutationInQueue: addedNodeMutation;\n builtNode: HTMLIFrameINode;\n};\n\nexport function isIframeINode(\n node: INode | ShadowRoot,\n): node is HTMLIFrameINode {\n if ('__sn' in node) {\n return (\n node.__sn.type === NodeType.Element && node.__sn.tagName === 'iframe'\n );\n }\n // node can be document fragment when using the virtual parent feature\n return false;\n}\n\nexport function getBaseDimension(\n node: Node,\n rootIframe: Node,\n): DocumentDimension {\n const frameElement = node.ownerDocument?.defaultView?.frameElement;\n if (!frameElement || frameElement === rootIframe) {\n return {\n x: 0,\n y: 0,\n relativeScale: 1,\n absoluteScale: 1,\n };\n }\n\n const frameDimension = frameElement.getBoundingClientRect();\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n // the iframe element may have a scale transform\n const relativeScale = frameDimension.height / frameElement.clientHeight;\n return {\n x:\n frameDimension.x * frameBaseDimension.relativeScale +\n frameBaseDimension.x,\n y:\n frameDimension.y * frameBaseDimension.relativeScale +\n frameBaseDimension.y,\n relativeScale,\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\n };\n}\n\nexport function hasShadowRoot<T extends Node>(\n n: T,\n): n is T & { shadowRoot: ShadowRoot } {\n return Boolean(((n as unknown) as Element)?.shadowRoot);\n}\n","const rules: (blockClass: string) => string[] = (blockClass: string) => [\n `.${blockClass} { background: currentColor }`,\n 'noscript { display: none !important; }',\n `.${blockClass} { background: currentColor; border-radius: 5px; }`,\n `.${blockClass}:hover::after {content: 'Redacted'; color: white; background: black; text-align: center; width: 100%; display: block;}`,\n];\n\nexport default rules;\n","import { INode } from '@highlight-run/rrweb-snapshot';\n\nexport enum StyleRuleType {\n Insert,\n Remove,\n Snapshot,\n SetProperty,\n RemoveProperty,\n}\n\ntype InsertRule = {\n cssText: string;\n type: StyleRuleType.Insert;\n index?: number | number[];\n};\ntype RemoveRule = {\n type: StyleRuleType.Remove;\n index: number | number[];\n};\ntype SnapshotRule = {\n type: StyleRuleType.Snapshot;\n cssTexts: string[];\n};\ntype SetPropertyRule = {\n type: StyleRuleType.SetProperty;\n index: number[];\n property: string;\n value: string | null;\n priority: string | undefined;\n};\ntype RemovePropertyRule = {\n type: StyleRuleType.RemoveProperty;\n index: number[];\n property: string;\n};\n\nexport type VirtualStyleRules = Array<\n InsertRule | RemoveRule | SnapshotRule | SetPropertyRule | RemovePropertyRule\n>;\nexport type VirtualStyleRulesMap = Map<INode, VirtualStyleRules>;\n\nexport function getNestedRule(\n rules: CSSRuleList,\n position: number[],\n): CSSGroupingRule {\n const rule = rules[position[0]] as CSSGroupingRule;\n if (position.length === 1) {\n return rule;\n } else {\n return getNestedRule(\n ((rule as CSSGroupingRule).cssRules[position[1]] as CSSGroupingRule)\n .cssRules,\n position.slice(2),\n );\n }\n}\n\nexport function getPositionsAndIndex(nestedIndex: number[]) {\n const positions = [...nestedIndex];\n const index = positions.pop();\n return { positions, index };\n}\n\nexport function applyVirtualStyleRulesToNode(\n storedRules: VirtualStyleRules,\n styleNode: HTMLStyleElement,\n) {\n const { sheet } = styleNode;\n if (!sheet) {\n // styleNode without sheet means the DOM has been removed\n // so the rules no longer need to be applied\n return;\n }\n\n storedRules.forEach((rule) => {\n if (rule.type === StyleRuleType.Insert) {\n try {\n if (Array.isArray(rule.index)) {\n const { positions, index } = getPositionsAndIndex(rule.index);\n const nestedRule = getNestedRule(sheet.cssRules, positions);\n nestedRule.insertRule(rule.cssText, index);\n } else {\n sheet.insertRule(rule.cssText, rule.index);\n }\n } catch (e) {\n /**\n * sometimes we may capture rules with browser prefix\n * insert rule with prefixs in other browsers may cause Error\n */\n }\n } else if (rule.type === StyleRuleType.Remove) {\n try {\n if (Array.isArray(rule.index)) {\n const { positions, index } = getPositionsAndIndex(rule.index);\n const nestedRule = getNestedRule(sheet.cssRules, positions);\n nestedRule.deleteRule(index || 0);\n } else {\n sheet.deleteRule(rule.index);\n }\n } catch (e) {\n /**\n * accessing styleSheet rules may cause SecurityError\n * for specific access control settings\n */\n }\n } else if (rule.type === StyleRuleType.Snapshot) {\n restoreSnapshotOfStyleRulesToNode(rule.cssTexts, styleNode);\n } else if (rule.type === StyleRuleType.SetProperty) {\n const nativeRule = (getNestedRule(\n sheet.cssRules,\n rule.index,\n ) as unknown) as CSSStyleRule;\n nativeRule.style.setProperty(rule.property, rule.value, rule.priority);\n } else if (rule.type === StyleRuleType.RemoveProperty) {\n const nativeRule = (getNestedRule(\n sheet.cssRules,\n rule.index,\n ) as unknown) as CSSStyleRule;\n nativeRule.style.removeProperty(rule.property);\n }\n });\n}\n\nfunction restoreSnapshotOfStyleRulesToNode(\n cssTexts: string[],\n styleNode: HTMLStyleElement,\n) {\n try {\n const existingRules = Array.from(styleNode.sheet?.cssRules || []).map(\n (rule) => rule.cssText,\n );\n const existingRulesReversed = Object.entries(existingRules).reverse();\n let lastMatch = existingRules.length;\n existingRulesReversed.forEach(([index, rule]) => {\n const indexOf = cssTexts.indexOf(rule);\n if (indexOf === -1 || indexOf > lastMatch) {\n try {\n styleNode.sheet?.deleteRule(Number(index));\n } catch (e) {\n /**\n * accessing styleSheet rules may cause SecurityError\n * for specific access control settings\n */\n }\n }\n lastMatch = indexOf;\n });\n cssTexts.forEach((cssText, index) => {\n try {\n if (styleNode.sheet?.cssRules[index]?.cssText !== cssText) {\n styleNode.sheet?.insertRule(cssText, index);\n }\n } catch (e) {\n /**\n * sometimes we may capture rules with browser prefix\n * insert rule with prefixs in other browsers may cause Error\n */\n }\n });\n } catch (e) {\n /**\n * accessing styleSheet rules may cause SecurityError\n * for specific access control settings\n */\n }\n}\n\nexport function storeCSSRules(\n parentElement: HTMLStyleElement,\n virtualStyleRulesMap: VirtualStyleRulesMap,\n) {\n try {\n const cssTexts = Array.from(\n (parentElement as HTMLStyleElement).sheet?.cssRules || [],\n ).map((rule) => rule.cssText);\n virtualStyleRulesMap.set((parentElement as unknown) as INode, [\n {\n type: StyleRuleType.Snapshot,\n cssTexts,\n },\n ]);\n } catch (e) {\n /**\n * accessing styleSheet rules may cause SecurityError\n * for specific access control settings\n */\n }\n}\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { decode } from 'base64-arraybuffer';\nimport { Replayer } from '../';\nimport {\n CanvasContext,\n canvasMutationCommand,\n SerializedWebGlArg,\n} from '../../types';\n\n// TODO: add ability to wipe this list\ntype GLVarMap = Map<string, any[]>;\nconst webGLVarMap: Map<\n WebGLRenderingContext | WebGL2RenderingContext,\n GLVarMap\n> = new Map();\nexport function variableListFor(\n ctx: WebGLRenderingContext | WebGL2RenderingContext,\n ctor: string,\n) {\n let contextMap = webGLVarMap.get(ctx);\n if (!contextMap) {\n contextMap = new Map();\n webGLVarMap.set(ctx, contextMap);\n }\n if (!contextMap.has(ctor)) {\n contextMap.set(ctor, []);\n }\n return contextMap.get(ctor) as any[];\n}\n\nfunction getContext(\n target: HTMLCanvasElement,\n type: CanvasContext,\n): WebGLRenderingContext | WebGL2RenderingContext | null {\n // Note to whomever is going to implement support for `contextAttributes`:\n // if `preserveDrawingBuffer` is set to true,\n // you might have to do `ctx.flush()` before every webgl canvas event\n try {\n if (type === CanvasContext.WebGL) {\n return (\n target.getContext('webgl')! || target.getContext('experimental-webgl')\n );\n }\n return target.getContext('webgl2')!;\n } catch (e) {\n return null;\n }\n}\n\nconst WebGLVariableConstructorsNames = [\n 'WebGLActiveInfo',\n 'WebGLBuffer',\n 'WebGLFramebuffer',\n 'WebGLProgram',\n 'WebGLRenderbuffer',\n 'WebGLShader',\n 'WebGLShaderPrecisionFormat',\n 'WebGLTexture',\n 'WebGLUniformLocation',\n 'WebGLVertexArrayObject',\n];\n\nfunction saveToWebGLVarMap(\n ctx: WebGLRenderingContext | WebGL2RenderingContext,\n result: any,\n) {\n if (!result?.constructor) return; // probably null or undefined\n\n const { name } = result.constructor;\n if (!WebGLVariableConstructorsNames.includes(name)) return; // not a WebGL variable\n\n const variables = variableListFor(ctx, name);\n if (!variables.includes(result)) variables.push(result);\n}\n\nexport function deserializeArg(\n imageMap: Replayer['imageMap'],\n ctx: WebGLRenderingContext | WebGL2RenderingContext,\n): (arg: SerializedWebGlArg) => any {\n return (arg: SerializedWebGlArg): any => {\n if (arg && typeof arg === 'object' && 'rr_type' in arg) {\n if ('index' in arg) {\n const { rr_type: name, index } = arg;\n return variableListFor(ctx, name)[index];\n } else if ('args' in arg) {\n const { rr_type: name, args } = arg;\n const ctor = window[name as keyof Window];\n\n return new ctor(...args.map(deserializeArg(imageMap, ctx)));\n } else if ('base64' in arg) {\n return decode(arg.base64);\n } else if ('src' in arg) {\n const image = imageMap.get(arg.src);\n if (image) {\n return image;\n } else {\n const image = new Image();\n image.src = arg.src;\n imageMap.set(arg.src, image);\n return image;\n }\n }\n } else if (Array.isArray(arg)) {\n return arg.map(deserializeArg(imageMap, ctx));\n }\n return arg;\n };\n}\n\nexport default function webglMutation({\n mutation,\n target,\n type,\n imageMap,\n errorHandler,\n}: {\n mutation: canvasMutationCommand;\n target: HTMLCanvasElement;\n type: CanvasContext;\n imageMap: Replayer['imageMap'];\n errorHandler: Replayer['warnCanvasMutationFailed'];\n}): void {\n try {\n const ctx = getContext(target, type);\n if (!ctx) return;\n\n // NOTE: if `preserveDrawingBuffer` is set to true,\n // we must flush the buffers on every new canvas event\n // if (mutation.newFrame) ctx.flush();\n\n if (mutation.setter) {\n // skip some read-only type checks\n // tslint:disable-next-line:no-any\n (ctx as any)[mutation.property] = mutation.args[0];\n return;\n }\n const original = ctx[\n mutation.property as Exclude<keyof typeof ctx, 'canvas'>\n ] as Function;\n\n const args = mutation.args.map(deserializeArg(imageMap, ctx));\n const result = original.apply(ctx, args);\n saveToWebGLVarMap(ctx, result);\n\n // Slows down replay considerably, only use for debugging\n const debugMode = false;\n if (debugMode) {\n if (mutation.property === 'compileShader') {\n if (!ctx.getShaderParameter(args[0], ctx.COMPILE_STATUS))\n console.warn(\n 'something went wrong in replay',\n ctx.getShaderInfoLog(args[0]),\n );\n } else if (mutation.property === 'linkProgram') {\n ctx.validateProgram(args[0]);\n if (!ctx.getProgramParameter(args[0], ctx.LINK_STATUS))\n console.warn(\n 'something went wrong in replay',\n ctx.getProgramInfoLog(args[0]),\n );\n }\n const webglError = ctx.getError();\n if (webglError !== ctx.NO_ERROR) {\n console.warn(\n 'WEBGL ERROR',\n webglError,\n 'on command:',\n mutation.property,\n ...args,\n );\n }\n }\n } catch (error) {\n errorHandler(mutation, error);\n }\n}\n","import {\n rebuild,\n buildNodeWithSN,\n INode,\n NodeType,\n BuildCache,\n createCache,\n} from '@highlight-run/rrweb-snapshot';\nimport * as mittProxy from 'mitt';\nimport { polyfill as smoothscrollPolyfill } from './smoothscroll';\nimport { Timer } from './timer';\nimport { createPlayerService, createSpeedService } from './machine';\nimport {\n EventType,\n IncrementalSource,\n fullSnapshotEvent,\n eventWithTime,\n MouseInteractions,\n playerConfig,\n playerMetaData,\n viewportResizeDimension,\n missingNodeMap,\n addedNodeMutation,\n missingNode,\n incrementalSnapshotEvent,\n incrementalData,\n ReplayerEvents,\n Handler,\n Emitter,\n MediaInteractions,\n metaEvent,\n mutationData,\n scrollData,\n inputData,\n canvasMutationData,\n Mirror,\n ElementState,\n styleAttributeValue,\n styleValueWithPriority,\n mouseMovePos,\n IWindow,\n canvasMutationCommand,\n textMutation, SessionInterval,\n} from '../types';\nimport {\n createMirror,\n polyfill,\n TreeIndex,\n queueToResolveTrees,\n iterateResolveTree,\n AppendedIframe,\n isIframeINode,\n getBaseDimension,\n hasShadowRoot,\n} from '../utils';\nimport getInjectStyleRules from './styles/inject-style';\nimport './styles/style.css';\nimport {\n applyVirtualStyleRulesToNode,\n storeCSSRules,\n StyleRuleType,\n VirtualStyleRules,\n VirtualStyleRulesMap,\n getNestedRule,\n getPositionsAndIndex,\n} from './virtual-styles';\nimport canvasMutation from './canvas';\n\nconst SKIP_TIME_THRESHOLD = 10 * 1000;\nconst SKIP_TIME_INTERVAL = 2 * 1000;\nconst SKIP_TIME_MIN = 1 * 1000;\nconst SKIP_DURATION_LIMIT = 60 * 60 * 1000;\n\n// https://github.com/rollup/rollup/issues/1267#issuecomment-296395734\n// tslint:disable-next-line\nconst mitt = (mittProxy as any).default || mittProxy;\n\nconst REPLAY_CONSOLE_PREFIX = '[replayer]';\n\nconst defaultMouseTailConfig = {\n duration: 500,\n lineCap: 'round',\n lineWidth: 3,\n strokeStyle: 'red',\n} as const;\n\nfunction indicatesTouchDevice(e: eventWithTime) {\n return (\n e.type == EventType.IncrementalSnapshot &&\n (e.data.source == IncrementalSource.TouchMove ||\n (e.data.source == IncrementalSource.MouseInteraction &&\n e.data.type == MouseInteractions.TouchStart))\n );\n}\n\nexport class Replayer {\n public wrapper: HTMLDivElement;\n public iframe: HTMLIFrameElement;\n\n public service: ReturnType<typeof createPlayerService>;\n public speedService: ReturnType<typeof createSpeedService>;\n public get timer() {\n return this.service.state.context.timer;\n }\n\n public config: playerConfig;\n\n private mouse: HTMLDivElement;\n private mouseTail: HTMLCanvasElement | null = null;\n private tailPositions: Array<{ x: number; y: number }> = [];\n\n private emitter: Emitter = mitt();\n\n private nextUserInteractionEvent: eventWithTime | null;\n private activityIntervals: Array<SessionInterval> = [];\n private inactiveEndTimestamp: number | null;\n\n // tslint:disable-next-line: variable-name\n private legacy_missingNodeRetryMap: missingNodeMap = {};\n\n private treeIndex!: TreeIndex;\n private fragmentParentMap!: Map<INode, INode>;\n private elementStateMap!: Map<INode, ElementState>;\n // Hold the list of CSSRules for in-memory state restoration\n private virtualStyleRulesMap!: VirtualStyleRulesMap;\n\n // The replayer uses the cache to speed up replay and scrubbing.\n private cache: BuildCache = createCache();\n\n private imageMap: Map<eventWithTime | string, HTMLImageElement> = new Map();\n\n private mirror: Mirror = createMirror();\n\n private firstFullSnapshot: eventWithTime | true | null = null;\n\n private newDocumentQueue: addedNodeMutation[] = [];\n\n private mousePos: mouseMovePos | null = null;\n private touchActive: boolean | null = null;\n\n constructor(\n events: Array<eventWithTime | string>,\n config?: Partial<playerConfig>,\n ) {\n if (!config?.liveMode && events.length < 2) {\n throw new Error('Replayer need at least 2 events.');\n }\n const defaultConfig: playerConfig = {\n speed: 1,\n maxSpeed: 360,\n root: document.body,\n loadTimeout: 0,\n skipInactive: false,\n showWarning: true,\n showDebug: false,\n blockClass: 'highlight-block',\n liveMode: false,\n insertStyleRules: [],\n triggerFocus: true,\n UNSAFE_replayCanvas: false,\n pauseAnimation: true,\n mouseTail: defaultMouseTailConfig,\n inactiveThreshold: 0.02,\n inactiveSkipTime: SKIP_TIME_INTERVAL,\n };\n this.config = Object.assign({}, defaultConfig, config);\n\n this.handleResize = this.handleResize.bind(this);\n this.getCastFn = this.getCastFn.bind(this);\n this.applyEventsSynchronously = this.applyEventsSynchronously.bind(this);\n this.emitter.on(ReplayerEvents.Resize, this.handleResize as Handler);\n\n this.setupDom();\n\n this.treeIndex = new TreeIndex();\n this.fragmentParentMap = new Map<INode, INode>();\n this.elementStateMap = new Map<INode, ElementState>();\n this.virtualStyleRulesMap = new Map();\n\n this.emitter.on(ReplayerEvents.Flush, () => {\n const { scrollMap, inputMap, mutationData } = this.treeIndex.flush();\n\n this.fragmentParentMap.forEach((parent, frag) =>\n this.restoreRealParent(frag, parent),\n );\n // apply text needs to happen before virtual style rules gets applied\n // as it can overwrite the contents of a stylesheet\n for (const d of mutationData.texts) {\n this.applyText(d, mutationData);\n }\n\n for (const node of this.virtualStyleRulesMap.keys()) {\n // restore css rules of style elements after they are mounted\n this.restoreNodeSheet(node);\n }\n this.fragmentParentMap.clear();\n this.elementStateMap.clear();\n this.virtualStyleRulesMap.clear();\n\n for (const d of scrollMap.values()) {\n this.applyScroll(d, true);\n }\n for (const d of inputMap.values()) {\n this.applyInput(d);\n }\n });\n this.emitter.on(ReplayerEvents.PlayBack, () => {\n this.firstFullSnapshot = null;\n this.mirror.reset();\n });\n\n const timer = new Timer([], config?.speed || defaultConfig.speed);\n this.service = createPlayerService(\n {\n events: events\n .map((e) => {\n if (config && config.unpackFn) {\n return config.unpackFn(e as string);\n }\n return e as eventWithTime;\n })\n .sort((a1, a2) => a1.timestamp - a2.timestamp),\n timer,\n timeOffset: 0,\n baselineTime: 0,\n lastPlayedEvent: null,\n },\n {\n getCastFn: this.getCastFn,\n applyEventsSynchronously: this.applyEventsSynchronously,\n emitter: this.emitter,\n },\n );\n this.service.start();\n this.service.subscribe((state) => {\n this.emitter.emit(ReplayerEvents.StateChange, {\n player: state,\n });\n });\n this.speedService = createSpeedService({\n normalSpeed: -1,\n timer,\n });\n this.speedService.start();\n this.speedService.subscribe((state) => {\n this.emitter.emit(ReplayerEvents.StateChange, {\n speed: state,\n });\n });\n\n // rebuild first full snapshot as the poster of the player\n // maybe we can cache it for performance optimization\n const firstMeta = this.service.state.context.events.find(\n (e) => e.type === EventType.Meta,\n );\n const firstFullsnapshot = this.service.state.context.events.find(\n (e) => e.type === EventType.FullSnapshot,\n );\n if (firstMeta) {\n const { width, height } = firstMeta.data as metaEvent['data'];\n setTimeout(() => {\n this.emitter.emit(ReplayerEvents.Resize, {\n width,\n height,\n });\n }, 0);\n }\n if (firstFullsnapshot) {\n setTimeout(() => {\n // when something has been played, there is no need to rebuild poster\n if (this.firstFullSnapshot) {\n // true if any other fullSnapshot has been executed by Timer already\n return;\n }\n this.firstFullSnapshot = firstFullsnapshot;\n this.rebuildFullSnapshot(\n firstFullsnapshot as fullSnapshotEvent & { timestamp: number },\n );\n this.iframe.contentWindow!.scrollTo(\n (firstFullsnapshot as fullSnapshotEvent).data.initialOffset,\n );\n }, 1);\n }\n if (this.service.state.context.events.find(indicatesTouchDevice)) {\n this.mouse.classList.add('touch-device');\n }\n }\n\n public on(event: string, handler: Handler) {\n this.emitter.on(event, handler);\n return this;\n }\n\n public off(event: string, handler: Handler) {\n this.emitter.off(event, handler);\n return this;\n }\n\n public setConfig(config: Partial<playerConfig>) {\n Object.keys(config).forEach((key) => {\n // @ts-ignore\n this.config[key] = config[key];\n });\n if (!this.config.skipInactive) {\n this.backToNormal();\n }\n if (typeof config.speed !== 'undefined') {\n this.speedService.send({\n type: 'SET_SPEED',\n payload: {\n speed: config.speed!,\n },\n });\n }\n if (typeof config.mouseTail !== 'undefined') {\n if (config.mouseTail === false) {\n if (this.mouseTail) {\n this.mouseTail.style.display = 'none';\n }\n } else {\n if (!this.mouseTail) {\n this.mouseTail = document.createElement('canvas');\n this.mouseTail.width = Number.parseFloat(this.iframe.width);\n this.mouseTail.height = Number.parseFloat(this.iframe.height);\n this.mouseTail.classList.add('replayer-mouse-tail');\n this.wrapper.insertBefore(this.mouseTail, this.iframe);\n }\n this.mouseTail.style.display = 'inherit';\n }\n }\n }\n\n /* Start Highlight Code */\n public getActivityIntervals(): Array<SessionInterval> {\n if (this.activityIntervals.length == 0) {\n // Preprocessing to get all active/inactive segments in a session\n const allIntervals: Array<SessionInterval> = [];\n const metadata = this.getMetaData();\n const userInteractionEvents = [\n { timestamp: metadata.startTime },\n ...this.service.state.context.events.filter((ev) =>\n this.isUserInteraction(ev),\n ),\n { timestamp: metadata.endTime },\n ];\n for (let i = 1; i < userInteractionEvents.length; i++) {\n const currentInterval = userInteractionEvents[i - 1];\n const _event = userInteractionEvents[i];\n if (\n _event.timestamp! - currentInterval.timestamp! >\n SKIP_TIME_THRESHOLD\n ) {\n allIntervals.push({\n startTime: currentInterval.timestamp!,\n endTime: _event.timestamp!,\n duration: _event.timestamp! - currentInterval.timestamp!,\n active: false,\n });\n } else {\n allIntervals.push({\n startTime: currentInterval.timestamp!,\n endTime: _event.timestamp!,\n duration: _event.timestamp! - currentInterval.timestamp!,\n active: true,\n });\n }\n }\n // Merges continuous active/inactive ranges\n const mergedIntervals: Array<SessionInterval> = [];\n let currentInterval = allIntervals[0];\n for (let i = 1; i < allIntervals.length; i++) {\n if (allIntervals[i].active != allIntervals[i - 1].active) {\n mergedIntervals.push({\n startTime: currentInterval.startTime,\n endTime: allIntervals[i - 1].endTime,\n duration: allIntervals[i - 1].endTime - currentInterval.startTime,\n active: allIntervals[i - 1].active,\n });\n currentInterval = allIntervals[i];\n }\n }\n if (currentInterval && allIntervals.length > 0) {\n mergedIntervals.push({\n startTime: currentInterval.startTime,\n endTime: allIntervals[allIntervals.length - 1].endTime,\n duration:\n allIntervals[allIntervals.length - 1].endTime -\n currentInterval.startTime,\n active: allIntervals[allIntervals.length - 1].active,\n });\n }\n // Merges inactive segments that are less than a threshold into surrounding active sessions\n // TODO: Change this from a 3n pass to n\n currentInterval = mergedIntervals[0];\n for (let i = 1; i < mergedIntervals.length; i++) {\n if (\n (!mergedIntervals[i].active &&\n mergedIntervals[i].duration >\n this.config.inactiveThreshold * metadata.totalTime) ||\n (!mergedIntervals[i - 1].active &&\n mergedIntervals[i - 1].duration >\n this.config.inactiveThreshold * metadata.totalTime)\n ) {\n this.activityIntervals.push({\n startTime: currentInterval.startTime,\n endTime: mergedIntervals[i - 1].endTime,\n duration:\n mergedIntervals[i - 1].endTime - currentInterval.startTime,\n active: mergedIntervals[i - 1].active,\n });\n currentInterval = mergedIntervals[i];\n }\n }\n if (currentInterval && mergedIntervals.length > 0) {\n this.activityIntervals.push({\n startTime: currentInterval.startTime,\n endTime: mergedIntervals[mergedIntervals.length - 1].endTime,\n duration:\n mergedIntervals[mergedIntervals.length - 1].endTime -\n currentInterval.startTime,\n active: mergedIntervals[mergedIntervals.length - 1].active,\n });\n }\n }\n return this.activityIntervals;\n }\n /* End Highlight Code */\n\n public getMetaData(): playerMetaData {\n const firstEvent = this.service.state.context.events[0];\n const lastEvent = this.service.state.context.events[\n this.service.state.context.events.length - 1\n ];\n return {\n startTime: firstEvent.timestamp,\n endTime: lastEvent.timestamp,\n totalTime: lastEvent.timestamp - firstEvent.timestamp,\n };\n }\n\n public getCurrentTime(): number {\n return this.timer.timeOffset + this.getTimeOffset();\n }\n\n public getTimeOffset(): number {\n const { baselineTime, events } = this.service.state.context;\n return baselineTime - events[0].timestamp;\n }\n\n public getMirror(): Mirror {\n return this.mirror;\n }\n\n /**\n * This API was designed to be used as play at any time offset.\n * Since we minimized the data collected from recorder, we do not\n * have the ability of undo an event.\n * So the implementation of play at any time offset will always iterate\n * all of the events, cast event before the offset synchronously\n * and cast event after the offset asynchronously with timer.\n * @param timeOffset number\n */\n public play(timeOffset = 0) {\n if (this.service.state.matches('paused')) {\n this.service.send({ type: 'PLAY', payload: { timeOffset } });\n } else {\n this.service.send({ type: 'PAUSE' });\n this.service.send({ type: 'PLAY', payload: { timeOffset } });\n }\n this.iframe.contentDocument\n ?.getElementsByTagName('html')[0]\n .classList.remove('rrweb-paused');\n this.emitter.emit(ReplayerEvents.Start);\n this.handleInactivity(this.getMetaData().startTime + timeOffset, true);\n }\n\n public pause(timeOffset?: number) {\n if (timeOffset === undefined && this.service.state.matches('playing')) {\n this.service.send({ type: 'PAUSE' });\n }\n if (typeof timeOffset === 'number') {\n this.play(timeOffset);\n this.service.send({ type: 'PAUSE' });\n }\n this.iframe.contentDocument\n ?.getElementsByTagName('html')[0]\n .classList.add('rrweb-paused');\n this.emitter.emit(ReplayerEvents.Pause);\n }\n\n public resume(timeOffset = 0) {\n console.warn(\n `The 'resume' will be departed in 1.0. Please use 'play' method which has the same interface.`,\n );\n this.play(timeOffset);\n this.emitter.emit(ReplayerEvents.Resume);\n }\n\n public startLive(baselineTime?: number) {\n this.service.send({ type: 'TO_LIVE', payload: { baselineTime } });\n }\n\n public addEvent(rawEvent: eventWithTime | string) {\n const event = this.config.unpackFn\n ? this.config.unpackFn(rawEvent as string)\n : (rawEvent as eventWithTime);\n if (indicatesTouchDevice(event)) {\n this.mouse.classList.add('touch-device');\n }\n Promise.resolve().then(() =>\n this.service.send({ type: 'ADD_EVENT', payload: { event } }),\n );\n }\n\n public replaceEvents(events: eventWithTime[]) {\n for (const event of events) {\n if (indicatesTouchDevice(event)) {\n this.mouse.classList.add('touch-device');\n break;\n }\n }\n this.service.send({ type: 'REPLACE_EVENTS', payload: { events } });\n }\n\n public enableInteract() {\n this.iframe.setAttribute('scrolling', 'auto');\n this.iframe.style.pointerEvents = 'auto';\n }\n\n public disableInteract() {\n this.iframe.setAttribute('scrolling', 'no');\n this.iframe.style.pointerEvents = 'none';\n }\n\n /**\n * Empties the replayer's cache and reclaims memory.\n * The replayer will use this cache to speed up the playback.\n */\n public resetCache() {\n this.cache = createCache();\n }\n\n private setupDom() {\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('replayer-wrapper');\n this.config.root!.appendChild(this.wrapper);\n\n this.mouse = document.createElement('div');\n this.mouse.classList.add('replayer-mouse');\n this.wrapper.appendChild(this.mouse);\n\n if (this.config.mouseTail !== false) {\n this.mouseTail = document.createElement('canvas');\n this.mouseTail.classList.add('replayer-mouse-tail');\n this.mouseTail.style.display = 'inherit';\n this.wrapper.appendChild(this.mouseTail);\n }\n\n this.iframe = document.createElement('iframe');\n const attributes = ['allow-same-origin'];\n if (this.config.UNSAFE_replayCanvas) {\n attributes.push('allow-scripts');\n }\n // hide iframe before first meta event\n this.iframe.style.display = 'none';\n this.iframe.setAttribute('sandbox', attributes.join(' '));\n this.disableInteract();\n this.wrapper.appendChild(this.iframe);\n if (this.iframe.contentWindow && this.iframe.contentDocument) {\n smoothscrollPolyfill(\n this.iframe.contentWindow,\n this.iframe.contentDocument,\n );\n\n polyfill(this.iframe.contentWindow as IWindow);\n }\n }\n\n private handleResize(dimension: viewportResizeDimension) {\n this.iframe.style.display = 'inherit';\n for (const el of [this.mouseTail, this.iframe]) {\n if (!el) {\n continue;\n }\n el.setAttribute('width', String(dimension.width));\n el.setAttribute('height', String(dimension.height));\n }\n }\n\n private applyEventsSynchronously(events: Array<eventWithTime>) {\n for (const event of events) {\n switch (event.type) {\n case EventType.DomContentLoaded:\n case EventType.Load:\n case EventType.Custom:\n continue;\n case EventType.FullSnapshot:\n case EventType.Meta:\n case EventType.Plugin:\n break;\n case EventType.IncrementalSnapshot:\n switch (event.data.source) {\n case IncrementalSource.MediaInteraction:\n continue;\n default:\n break;\n }\n break;\n default:\n break;\n }\n const castFn = this.getCastFn(event, true);\n castFn();\n }\n if (this.mousePos) {\n this.moveAndHover(\n this.mousePos.x,\n this.mousePos.y,\n this.mousePos.id,\n true,\n this.mousePos.debugData,\n );\n }\n this.mousePos = null;\n if (this.touchActive === true) {\n this.mouse.classList.add('touch-active');\n } else if (this.touchActive === false) {\n this.mouse.classList.remove('touch-active');\n }\n this.touchActive = null;\n }\n\n private getCastFn(event: eventWithTime, isSync = false) {\n let castFn: undefined | (() => void);\n switch (event.type) {\n case EventType.DomContentLoaded:\n case EventType.Load:\n break;\n case EventType.Custom:\n castFn = () => {\n /**\n * emit custom-event and pass the event object.\n *\n * This will add more value to the custom event and allows the client to react for custom-event.\n */\n this.emitter.emit(ReplayerEvents.CustomEvent, event);\n };\n break;\n case EventType.Meta:\n castFn = () =>\n this.emitter.emit(ReplayerEvents.Resize, {\n width: event.data.width,\n height: event.data.height,\n });\n break;\n case EventType.FullSnapshot:\n castFn = () => {\n if (this.firstFullSnapshot) {\n if (this.firstFullSnapshot === event) {\n // we've already built this exact FullSnapshot when the player was mounted, and haven't built any other FullSnapshot since\n this.firstFullSnapshot = true; // forget as we might need to re-execute this FullSnapshot later e.g. to rebuild after scrubbing\n return;\n }\n } else {\n // Timer (requestAnimationFrame) can be faster than setTimeout(..., 1)\n this.firstFullSnapshot = true;\n }\n this.rebuildFullSnapshot(event, isSync);\n this.iframe.contentWindow!.scrollTo(event.data.initialOffset);\n };\n break;\n case EventType.IncrementalSnapshot:\n castFn = () => {\n this.applyIncremental(event, isSync);\n if (isSync) {\n // do not check skip in sync\n return;\n }\n this.handleInactivity(event.timestamp);\n if (event === this.nextUserInteractionEvent) {\n this.nextUserInteractionEvent = null;\n this.backToNormal();\n }\n if (this.config.skipInactive && !this.nextUserInteractionEvent) {\n for (const _event of this.service.state.context.events) {\n if (_event.timestamp! <= event.timestamp!) {\n continue;\n }\n if (this.isUserInteraction(_event)) {\n if (\n _event.delay! - event.delay! >\n SKIP_TIME_THRESHOLD *\n this.speedService.state.context.timer.speed\n ) {\n this.nextUserInteractionEvent = _event;\n }\n break;\n }\n }\n if (this.nextUserInteractionEvent) {\n const skipTime =\n this.nextUserInteractionEvent.delay! - event.delay!;\n const payload = {\n speed: Math.min(\n Math.round(skipTime / SKIP_TIME_INTERVAL),\n this.config.maxSpeed,\n ),\n };\n this.speedService.send({ type: 'FAST_FORWARD', payload });\n this.emitter.emit(ReplayerEvents.SkipStart, payload);\n }\n }\n };\n break;\n default:\n }\n const wrappedCastFn = () => {\n if (castFn) {\n castFn();\n }\n\n for (const plugin of this.config.plugins || []) {\n plugin.handler(event, isSync, { replayer: this });\n }\n\n this.service.send({ type: 'CAST_EVENT', payload: { event } });\n\n // events are kept sorted by timestamp, check if this is the last event\n let last_index = this.service.state.context.events.length - 1;\n if (event === this.service.state.context.events[last_index]) {\n const finish = () => {\n if (last_index < this.service.state.context.events.length - 1) {\n // more events have been added since the setTimeout\n return;\n }\n this.backToNormal();\n this.service.send('END');\n this.emitter.emit(ReplayerEvents.Finish);\n };\n if (\n event.type === EventType.IncrementalSnapshot &&\n event.data.source === IncrementalSource.MouseMove &&\n event.data.positions.length\n ) {\n // defer finish event if the last event is a mouse move\n setTimeout(() => {\n finish();\n }, Math.max(0, -event.data.positions[0].timeOffset + 50)); // Add 50 to make sure the timer would check the last mousemove event. Otherwise, the timer may be stopped by the service before checking the last event.\n } else {\n finish();\n }\n }\n\n this.emitter.emit(ReplayerEvents.EventCast, event);\n };\n return wrappedCastFn;\n }\n\n /* Start of Highlight Code */\n private handleInactivity(timestamp: number, resetNext?: boolean) {\n if (timestamp === this.inactiveEndTimestamp || resetNext) {\n this.inactiveEndTimestamp = null;\n this.backToNormal();\n }\n if (this.config.skipInactive && !this.inactiveEndTimestamp) {\n for (const interval of this.getActivityIntervals()) {\n if (\n timestamp >= interval.startTime! &&\n timestamp < interval.endTime! &&\n !interval.active\n ) {\n this.inactiveEndTimestamp = interval.endTime;\n break;\n }\n }\n if (this.inactiveEndTimestamp) {\n const skipTime = this.inactiveEndTimestamp! - timestamp!;\n const payload = {\n speed:\n (skipTime / SKIP_DURATION_LIMIT) * this.config.inactiveSkipTime <\n SKIP_TIME_MIN\n ? skipTime / SKIP_TIME_MIN\n : Math.round(\n Math.max(skipTime, SKIP_DURATION_LIMIT) /\n this.config.inactiveSkipTime,\n ),\n };\n this.speedService.send({ type: 'FAST_FORWARD', payload });\n this.emitter.emit(ReplayerEvents.SkipStart, payload);\n }\n }\n }\n /* End of Highlight Code */\n\n private rebuildFullSnapshot(\n event: fullSnapshotEvent & { timestamp: number },\n isSync: boolean = false,\n ) {\n if (!this.iframe.contentDocument) {\n return console.warn('Looks like your replayer has been destroyed.');\n }\n if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n console.warn(\n 'Found unresolved missing node map',\n this.legacy_missingNodeRetryMap,\n );\n }\n this.legacy_missingNodeRetryMap = {};\n const collected: AppendedIframe[] = [];\n this.mirror.map = rebuild(event.data.node, {\n doc: this.iframe.contentDocument,\n afterAppend: (builtNode) => {\n this.collectIframeAndAttachDocument(collected, builtNode);\n },\n cache: this.cache,\n })[1];\n for (const { mutationInQueue, builtNode } of collected) {\n this.attachDocumentToIframe(mutationInQueue, builtNode);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue,\n );\n }\n const { documentElement, head } = this.iframe.contentDocument;\n this.insertStyleRules(documentElement, head);\n if (!this.service.state.matches('playing')) {\n this.iframe.contentDocument\n .getElementsByTagName('html')[0]\n .classList.add('rrweb-paused');\n }\n this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);\n if (!isSync) {\n this.waitForStylesheetLoad();\n }\n if (this.config.UNSAFE_replayCanvas) {\n this.preloadAllImages();\n }\n }\n\n private insertStyleRules(\n documentElement: HTMLElement,\n head: HTMLHeadElement,\n ) {\n const styleEl = document.createElement('style');\n documentElement!.insertBefore(styleEl, head);\n const injectStylesRules = getInjectStyleRules(\n this.config.blockClass,\n ).concat(this.config.insertStyleRules);\n if (this.config.pauseAnimation) {\n injectStylesRules.push(\n 'html.rrweb-paused *, html.rrweb-paused *:before, html.rrweb-paused *:after { animation-play-state: paused !important; }',\n );\n }\n for (let idx = 0; idx < injectStylesRules.length; idx++) {\n (styleEl.sheet! as CSSStyleSheet).insertRule(injectStylesRules[idx], idx);\n }\n }\n\n private attachDocumentToIframe(\n mutation: addedNodeMutation,\n iframeEl: HTMLIFrameElement,\n ) {\n const collected: AppendedIframe[] = [];\n // If iframeEl is detached from dom, iframeEl.contentDocument is null.\n if (!iframeEl.contentDocument) {\n let parent = iframeEl.parentNode;\n while (parent) {\n // The parent of iframeEl is virtual parent and we need to mount it on the dom.\n if (this.fragmentParentMap.has((parent as unknown) as INode)) {\n const frag = (parent as unknown) as INode;\n const realParent = this.fragmentParentMap.get(frag)!;\n this.restoreRealParent(frag, realParent);\n break;\n }\n parent = parent.parentNode;\n }\n }\n buildNodeWithSN(mutation.node, {\n doc: iframeEl.contentDocument!,\n map: this.mirror.map,\n hackCss: true,\n skipChild: false,\n afterAppend: (builtNode) => {\n this.collectIframeAndAttachDocument(collected, builtNode);\n if (\n builtNode.__sn.type === NodeType.Element &&\n builtNode.__sn.tagName.toUpperCase() === 'HTML'\n ) {\n const { documentElement, head } = iframeEl.contentDocument!;\n this.insertStyleRules(documentElement, head);\n }\n },\n cache: this.cache,\n });\n for (const { mutationInQueue, builtNode } of collected) {\n this.attachDocumentToIframe(mutationInQueue, builtNode);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue,\n );\n }\n }\n\n private collectIframeAndAttachDocument(\n collected: AppendedIframe[],\n builtNode: INode,\n ) {\n if (isIframeINode(builtNode)) {\n const mutationInQueue = this.newDocumentQueue.find(\n (m) => m.parentId === builtNode.__sn.id,\n );\n if (mutationInQueue) {\n collected.push({ mutationInQueue, builtNode });\n }\n }\n }\n\n /**\n * pause when loading style sheet, resume when loaded all timeout exceed\n */\n private waitForStylesheetLoad() {\n const head = this.iframe.contentDocument?.head;\n if (head) {\n const unloadSheets: Set<HTMLLinkElement> = new Set();\n let timer: ReturnType<typeof setTimeout> | -1;\n let beforeLoadState = this.service.state;\n const stateHandler = () => {\n beforeLoadState = this.service.state;\n };\n this.emitter.on(ReplayerEvents.Start, stateHandler);\n this.emitter.on(ReplayerEvents.Pause, stateHandler);\n const unsubscribe = () => {\n this.emitter.off(ReplayerEvents.Start, stateHandler);\n this.emitter.off(ReplayerEvents.Pause, stateHandler);\n };\n head\n .querySelectorAll('link[rel=\"stylesheet\"]')\n .forEach((css: HTMLLinkElement) => {\n if (!css.sheet) {\n unloadSheets.add(css);\n css.addEventListener('load', () => {\n unloadSheets.delete(css);\n // all loaded and timer not released yet\n if (unloadSheets.size === 0 && timer !== -1) {\n if (beforeLoadState.matches('playing')) {\n this.play(this.getCurrentTime());\n }\n this.emitter.emit(ReplayerEvents.LoadStylesheetEnd);\n if (timer) {\n clearTimeout(timer);\n }\n unsubscribe();\n }\n });\n }\n });\n\n if (unloadSheets.size > 0) {\n // find some unload sheets after iterate\n this.service.send({ type: 'PAUSE' });\n this.emitter.emit(ReplayerEvents.LoadStylesheetStart);\n timer = setTimeout(() => {\n if (beforeLoadState.matches('playing')) {\n this.play(this.getCurrentTime());\n }\n // mark timer was called\n timer = -1;\n unsubscribe();\n }, this.config.loadTimeout);\n }\n }\n }\n\n private hasImageArg(args: any[]): boolean {\n for (const arg of args) {\n if (!arg || typeof arg !== 'object') {\n // do nothing\n } else if ('rr_type' in arg && 'args' in arg) {\n if (this.hasImageArg(arg.args)) return true;\n } else if ('rr_type' in arg && arg.rr_type === 'HTMLImageElement') {\n return true; // has image!\n } else if (arg instanceof Array) {\n if (this.hasImageArg(arg)) return true;\n }\n }\n return false;\n }\n\n private getImageArgs(args: any[]): string[] {\n const images: string[] = [];\n for (const arg of args) {\n if (!arg || typeof arg !== 'object') {\n // do nothing\n } else if ('rr_type' in arg && 'args' in arg) {\n images.push(...this.getImageArgs(arg.args));\n } else if ('rr_type' in arg && arg.rr_type === 'HTMLImageElement') {\n images.push(arg.src);\n } else if (arg instanceof Array) {\n images.push(...this.getImageArgs(arg));\n }\n }\n return images;\n }\n\n /**\n * pause when there are some canvas drawImage args need to be loaded\n */\n private preloadAllImages() {\n let beforeLoadState = this.service.state;\n const stateHandler = () => {\n beforeLoadState = this.service.state;\n };\n this.emitter.on(ReplayerEvents.Start, stateHandler);\n this.emitter.on(ReplayerEvents.Pause, stateHandler);\n for (const event of this.service.state.context.events) {\n if (\n event.type === EventType.IncrementalSnapshot &&\n event.data.source === IncrementalSource.CanvasMutation\n )\n if ('commands' in event.data) {\n event.data.commands.forEach((c) => this.preloadImages(c, event));\n } else {\n this.preloadImages(event.data, event);\n }\n }\n }\n\n private preloadImages(data: canvasMutationCommand, event: eventWithTime) {\n if (\n data.property === 'drawImage' &&\n typeof data.args[0] === 'string' &&\n !this.imageMap.has(event)\n ) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const imgd = ctx?.createImageData(canvas.width, canvas.height);\n let d = imgd?.data;\n d = JSON.parse(data.args[0]);\n ctx?.putImageData(imgd!, 0, 0);\n } else if (this.hasImageArg(data.args)) {\n this.getImageArgs(data.args).forEach((url) => {\n const image = new Image();\n image.src = url; // this preloads the image\n this.imageMap.set(url, image);\n });\n }\n }\n\n private applyIncremental(\n e: incrementalSnapshotEvent & { timestamp: number; delay?: number },\n isSync: boolean,\n ) {\n const { data: d } = e;\n switch (d.source) {\n case IncrementalSource.Mutation: {\n if (isSync) {\n d.adds.forEach((m) => this.treeIndex.add(m));\n d.texts.forEach((m) => {\n const target = this.mirror.getNode(m.id);\n const parent = (target?.parentNode as unknown) as INode | null;\n // remove any style rules that pending\n // for stylesheets where the contents get replaced\n if (parent && this.virtualStyleRulesMap.has(parent))\n this.virtualStyleRulesMap.delete(parent);\n\n this.treeIndex.text(m);\n });\n d.attributes.forEach((m) => this.treeIndex.attribute(m));\n d.removes.forEach((m) => this.treeIndex.remove(m, this.mirror));\n }\n try {\n this.applyMutation(d, isSync);\n } catch (error) {\n this.warn(`Exception in mutation ${error.message || error}`, d);\n }\n break;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove:\n if (isSync) {\n const lastPosition = d.positions[d.positions.length - 1];\n this.mousePos = {\n x: lastPosition.x,\n y: lastPosition.y,\n id: lastPosition.id,\n debugData: d,\n };\n } else {\n d.positions.forEach((p) => {\n const action = {\n doAction: () => {\n this.moveAndHover(p.x, p.y, p.id, isSync, d);\n },\n delay:\n p.timeOffset +\n e.timestamp -\n this.service.state.context.baselineTime,\n };\n this.timer.addAction(action);\n });\n // add a dummy action to keep timer alive\n this.timer.addAction({\n doAction() {},\n delay: e.delay! - d.positions[0]?.timeOffset,\n });\n }\n break;\n case IncrementalSource.MouseInteraction: {\n /**\n * Same as the situation of missing input target.\n */\n if (d.id === -1) {\n break;\n }\n const event = new Event(MouseInteractions[d.type].toLowerCase());\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n this.emitter.emit(ReplayerEvents.MouseInteraction, {\n type: d.type,\n target,\n });\n const { triggerFocus } = this.config;\n switch (d.type) {\n case MouseInteractions.Blur:\n if ('blur' in ((target as Node) as HTMLElement)) {\n ((target as Node) as HTMLElement).blur();\n }\n break;\n case MouseInteractions.Focus:\n if (triggerFocus && ((target as Node) as HTMLElement).focus) {\n ((target as Node) as HTMLElement).focus({\n preventScroll: true,\n });\n }\n break;\n case MouseInteractions.Click:\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n if (isSync) {\n if (d.type === MouseInteractions.TouchStart) {\n this.touchActive = true;\n } else if (d.type === MouseInteractions.TouchEnd) {\n this.touchActive = false;\n }\n this.mousePos = {\n x: d.x,\n y: d.y,\n id: d.id,\n debugData: d,\n };\n } else {\n if (d.type === MouseInteractions.TouchStart) {\n // don't draw a trail as user has lifted finger and is placing at a new point\n this.tailPositions.length = 0;\n }\n this.moveAndHover(d.x, d.y, d.id, isSync, d);\n if (d.type === MouseInteractions.Click) {\n /*\n * don't want target.click() here as could trigger an iframe navigation\n * instead any effects of the click should already be covered by mutations\n */\n /*\n * removal and addition of .active class (along with void line to trigger repaint)\n * triggers the 'click' css animation in styles/style.css\n */\n this.mouse.classList.remove('active');\n // tslint:disable-next-line\n void this.mouse.offsetWidth;\n this.mouse.classList.add('active');\n } else if (d.type === MouseInteractions.TouchStart) {\n void this.mouse.offsetWidth; // needed for the position update of moveAndHover to apply without the .touch-active transition\n this.mouse.classList.add('touch-active');\n } else if (d.type === MouseInteractions.TouchEnd) {\n this.mouse.classList.remove('touch-active');\n }\n }\n break;\n case MouseInteractions.TouchCancel:\n if (isSync) {\n this.touchActive = false;\n } else {\n this.mouse.classList.remove('touch-active');\n }\n break;\n default:\n target.dispatchEvent(event);\n }\n break;\n }\n case IncrementalSource.Scroll: {\n /**\n * Same as the situation of missing input target.\n */\n if (d.id === -1) {\n break;\n }\n if (isSync) {\n this.treeIndex.scroll(d);\n break;\n }\n this.applyScroll(d, false);\n break;\n }\n case IncrementalSource.ViewportResize:\n this.emitter.emit(ReplayerEvents.Resize, {\n width: d.width,\n height: d.height,\n });\n break;\n case IncrementalSource.Input: {\n /**\n * Input event on an unserialized node usually means the event\n * was synchrony triggered programmatically after the node was\n * created. This means there was not an user observable interaction\n * and we do not need to replay it.\n */\n if (d.id === -1) {\n break;\n }\n if (isSync) {\n this.treeIndex.input(d);\n break;\n }\n this.applyInput(d);\n break;\n }\n case IncrementalSource.MediaInteraction: {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n const mediaEl = (target as Node) as HTMLMediaElement;\n try {\n if (d.currentTime) {\n mediaEl.currentTime = d.currentTime;\n }\n if (d.volume) {\n mediaEl.volume = d.volume;\n }\n if (d.muted) {\n mediaEl.muted = d.muted;\n }\n if (d.type === MediaInteractions.Pause) {\n mediaEl.pause();\n }\n if (d.type === MediaInteractions.Play) {\n // remove listener for 'canplay' event because play() is async and returns a promise\n // i.e. media will evntualy start to play when data is loaded\n // 'canplay' event fires even when currentTime attribute changes which may lead to\n // unexpeted behavior\n mediaEl.play();\n }\n } catch (error) {\n if (this.config.showWarning) {\n console.warn(\n `Failed to replay media interactions: ${error.message || error}`,\n );\n }\n }\n break;\n }\n case IncrementalSource.StyleSheetRule: {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n\n const styleEl = (target as Node) as HTMLStyleElement;\n const parent = (target.parentNode as unknown) as INode;\n const usingVirtualParent = this.fragmentParentMap.has(parent);\n\n /**\n * Always use existing DOM node, when it's there.\n * In in-memory replay, there is virtual node, but it's `sheet` is inaccessible.\n * Hence, we buffer all style changes in virtualStyleRulesMap.\n */\n const styleSheet = usingVirtualParent ? null : styleEl.sheet;\n let rules: VirtualStyleRules;\n\n if (!styleSheet) {\n /**\n * styleEl.sheet is only accessible if the styleEl is part of the\n * dom. This doesn't work on DocumentFragments so we have to add the\n * style mutations to the virtualStyleRulesMap.\n */\n\n if (this.virtualStyleRulesMap.has(target)) {\n rules = this.virtualStyleRulesMap.get(target) as VirtualStyleRules;\n } else {\n rules = [];\n this.virtualStyleRulesMap.set(target, rules);\n }\n }\n\n if (d.adds) {\n d.adds.forEach(({ rule, index: nestedIndex }) => {\n if (styleSheet) {\n try {\n if (Array.isArray(nestedIndex)) {\n const { positions, index } = getPositionsAndIndex(\n nestedIndex,\n );\n const nestedRule = getNestedRule(\n styleSheet.cssRules,\n positions,\n );\n nestedRule.insertRule(rule, index);\n } else {\n const index =\n nestedIndex === undefined\n ? undefined\n : Math.min(nestedIndex, styleSheet.cssRules.length);\n styleSheet.insertRule(rule, index);\n }\n } catch (e) {\n /**\n * sometimes we may capture rules with browser prefix\n * insert rule with prefixs in other browsers may cause Error\n */\n /**\n * accessing styleSheet rules may cause SecurityError\n * for specific access control settings\n */\n }\n } else {\n rules?.push({\n cssText: rule,\n index: nestedIndex,\n type: StyleRuleType.Insert,\n });\n }\n });\n }\n\n if (d.removes) {\n d.removes.forEach(({ index: nestedIndex }) => {\n if (usingVirtualParent) {\n rules?.push({ index: nestedIndex, type: StyleRuleType.Remove });\n } else {\n try {\n if (Array.isArray(nestedIndex)) {\n const { positions, index } = getPositionsAndIndex(\n nestedIndex,\n );\n const nestedRule = getNestedRule(\n styleSheet!.cssRules,\n positions,\n );\n nestedRule.deleteRule(index || 0);\n } else {\n styleSheet?.deleteRule(nestedIndex);\n }\n } catch (e) {\n /**\n * same as insertRule\n */\n }\n }\n });\n }\n break;\n }\n case IncrementalSource.StyleDeclaration: {\n // same with StyleSheetRule\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n\n const styleEl = (target as Node) as HTMLStyleElement;\n const parent = (target.parentNode as unknown) as INode;\n const usingVirtualParent = this.fragmentParentMap.has(parent);\n\n const styleSheet = usingVirtualParent ? null : styleEl.sheet;\n let rules: VirtualStyleRules = [];\n\n if (!styleSheet) {\n if (this.virtualStyleRulesMap.has(target)) {\n rules = this.virtualStyleRulesMap.get(target) as VirtualStyleRules;\n } else {\n rules = [];\n this.virtualStyleRulesMap.set(target, rules);\n }\n }\n\n if (d.set) {\n if (styleSheet) {\n const rule = (getNestedRule(\n styleSheet.rules,\n d.index,\n ) as unknown) as CSSStyleRule;\n rule.style.setProperty(d.set.property, d.set.value, d.set.priority);\n } else {\n rules.push({\n type: StyleRuleType.SetProperty,\n index: d.index,\n ...d.set,\n });\n }\n }\n\n if (d.remove) {\n if (styleSheet) {\n const rule = (getNestedRule(\n styleSheet.rules,\n d.index,\n ) as unknown) as CSSStyleRule;\n rule.style.removeProperty(d.remove.property);\n } else {\n rules.push({\n type: StyleRuleType.RemoveProperty,\n index: d.index,\n ...d.remove,\n });\n }\n }\n break;\n }\n case IncrementalSource.CanvasMutation: {\n if (!this.config.UNSAFE_replayCanvas) {\n return;\n }\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n\n canvasMutation({\n event: e,\n mutation: d,\n target: (target as unknown) as HTMLCanvasElement,\n imageMap: this.imageMap,\n errorHandler: this.warnCanvasMutationFailed.bind(this),\n });\n\n break;\n }\n case IncrementalSource.Font: {\n try {\n const fontFace = new FontFace(\n d.family,\n d.buffer ? new Uint8Array(JSON.parse(d.fontSource)) : d.fontSource,\n d.descriptors,\n );\n this.iframe.contentDocument?.fonts.add(fontFace);\n } catch (error) {\n if (this.config.showWarning) {\n console.warn(error);\n }\n }\n break;\n }\n default:\n }\n }\n\n private applyMutation(d: mutationData, useVirtualParent: boolean) {\n d.removes.forEach((mutation) => {\n let target = this.mirror.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r) => r.id === mutation.parentId)) {\n // no need to warn, parent was already removed\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n if (this.virtualStyleRulesMap.has(target)) {\n this.virtualStyleRulesMap.delete(target);\n }\n let parent: INode | null | ShadowRoot = this.mirror.getNode(\n mutation.parentId,\n );\n if (!parent) {\n return this.warnNodeNotFound(d, mutation.parentId);\n }\n if (mutation.isShadow && hasShadowRoot(parent)) {\n parent = parent.shadowRoot;\n }\n // target may be removed with its parents before\n this.mirror.removeNodeFromMap(target);\n if (parent) {\n let realTarget = null;\n const realParent =\n '__sn' in parent ? this.fragmentParentMap.get(parent) : undefined;\n if (realParent && realParent.contains(target)) {\n parent = realParent;\n } else if (this.fragmentParentMap.has(target)) {\n /**\n * the target itself is a fragment document and it's not in the dom\n * so we should remove the real target from its parent\n */\n realTarget = this.fragmentParentMap.get(target)!;\n this.fragmentParentMap.delete(target);\n target = realTarget;\n }\n try {\n parent.removeChild(target);\n } catch (error) {\n if (error instanceof DOMException) {\n this.warn(\n 'parent could not remove child in mutation',\n parent,\n realParent,\n target,\n realTarget,\n d,\n );\n } else {\n throw error;\n }\n }\n }\n });\n\n // tslint:disable-next-line: variable-name\n const legacy_missingNodeMap: missingNodeMap = {\n ...this.legacy_missingNodeRetryMap,\n };\n const queue: addedNodeMutation[] = [];\n\n // next not present at this moment\n const nextNotInDOM = (mutation: addedNodeMutation) => {\n let next: Node | null = null;\n if (mutation.nextId) {\n next = this.mirror.getNode(mutation.nextId) as Node;\n }\n // next not present at this moment\n if (\n mutation.nextId !== null &&\n mutation.nextId !== undefined &&\n mutation.nextId !== -1 &&\n !next\n ) {\n return true;\n }\n return false;\n };\n\n const appendNode = (mutation: addedNodeMutation) => {\n if (!this.iframe.contentDocument) {\n return console.warn('Looks like your replayer has been destroyed.');\n }\n let parent: INode | null | ShadowRoot = this.mirror.getNode(\n mutation.parentId,\n );\n if (!parent) {\n if (mutation.node.type === NodeType.Document) {\n // is newly added document, maybe the document node of an iframe\n return this.newDocumentQueue.push(mutation);\n }\n return queue.push(mutation);\n }\n\n let parentInDocument = null;\n if (this.iframe.contentDocument.contains) {\n parentInDocument = this.iframe.contentDocument.contains(parent);\n } else if (this.iframe.contentDocument.body.contains) {\n // fix for IE\n // refer 'Internet Explorer notes' at https://developer.mozilla.org/zh-CN/docs/Web/API/Document\n parentInDocument = this.iframe.contentDocument.body.contains(parent);\n }\n\n const hasIframeChild =\n ((parent as unknown) as HTMLElement).getElementsByTagName?.('iframe')\n .length > 0;\n /**\n * Why !isIframeINode(parent)? If parent element is an iframe, iframe document can't be appended to virtual parent.\n * Why !hasIframeChild? If we move iframe elements from dom to fragment document, we will lose the contentDocument of iframe. So we need to disable the virtual dom optimization if a parent node contains iframe elements.\n */\n if (\n useVirtualParent &&\n parentInDocument &&\n !isIframeINode(parent) &&\n !hasIframeChild\n ) {\n const virtualParent = (document.createDocumentFragment() as unknown) as INode;\n this.mirror.map[mutation.parentId] = virtualParent;\n this.fragmentParentMap.set(virtualParent, parent);\n\n // store the state, like scroll position, of child nodes before they are unmounted from dom\n this.storeState(parent);\n\n while (parent.firstChild) {\n virtualParent.appendChild(parent.firstChild);\n }\n parent = virtualParent;\n }\n\n if (mutation.node.isShadow) {\n // If the parent is attached a shadow dom after it's created, it won't have a shadow root.\n if (!hasShadowRoot(parent)) {\n ((parent as Node) as HTMLElement).attachShadow({ mode: 'open' });\n parent = ((parent as Node) as HTMLElement).shadowRoot!;\n } else parent = parent.shadowRoot;\n }\n\n let previous: Node | null = null;\n let next: Node | null = null;\n if (mutation.previousId) {\n previous = this.mirror.getNode(mutation.previousId) as Node;\n }\n if (mutation.nextId) {\n next = this.mirror.getNode(mutation.nextId) as Node;\n }\n if (nextNotInDOM(mutation)) {\n return queue.push(mutation);\n }\n\n if (mutation.node.rootId && !this.mirror.getNode(mutation.node.rootId)) {\n return;\n }\n\n const targetDoc = mutation.node.rootId\n ? this.mirror.getNode(mutation.node.rootId)\n : this.iframe.contentDocument;\n if (isIframeINode(parent)) {\n this.attachDocumentToIframe(mutation, parent);\n return;\n }\n const target = buildNodeWithSN(mutation.node, {\n doc: targetDoc as Document,\n map: this.mirror.map,\n skipChild: true,\n hackCss: true,\n cache: this.cache,\n }) as INode;\n\n // legacy data, we should not have -1 siblings any more\n if (mutation.previousId === -1 || mutation.nextId === -1) {\n legacy_missingNodeMap[mutation.node.id] = {\n node: target,\n mutation,\n };\n return;\n }\n\n if (\n '__sn' in parent &&\n parent.__sn.type === NodeType.Element &&\n parent.__sn.tagName === 'textarea' &&\n mutation.node.type === NodeType.Text\n ) {\n // https://github.com/rrweb-io/rrweb/issues/745\n // parent is textarea, will only keep one child node as the value\n for (const c of Array.from(parent.childNodes)) {\n if (c.nodeType === parent.TEXT_NODE) {\n parent.removeChild(c);\n }\n }\n }\n\n if (previous && previous.nextSibling && previous.nextSibling.parentNode) {\n parent.insertBefore(target, previous.nextSibling);\n } else if (next && next.parentNode) {\n // making sure the parent contains the reference nodes\n // before we insert target before next.\n parent.contains(next)\n ? parent.insertBefore(target, next)\n : parent.insertBefore(target, null);\n } else {\n /**\n * Sometimes the document changes and the MutationObserver is disconnected, so the removal of child elements can't be detected and recorded. After the change of document, we may get another mutation which adds a new html element, while the old html element still exists in the dom, and we need to remove the old html element first to avoid collision.\n */\n if (parent === targetDoc) {\n while (targetDoc.firstChild) {\n targetDoc.removeChild(targetDoc.firstChild);\n }\n }\n\n parent.appendChild(target);\n }\n\n if (isIframeINode(target)) {\n const mutationInQueue = this.newDocumentQueue.find(\n (m) => m.parentId === target.__sn.id,\n );\n if (mutationInQueue) {\n this.attachDocumentToIframe(mutationInQueue, target);\n this.newDocumentQueue = this.newDocumentQueue.filter(\n (m) => m !== mutationInQueue,\n );\n }\n }\n\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(\n legacy_missingNodeMap,\n parent,\n target,\n mutation,\n );\n }\n };\n\n d.adds.forEach((mutation) => {\n appendNode(mutation);\n });\n\n let startTime = Date.now();\n while (queue.length) {\n // transform queue to resolve tree\n const resolveTrees = queueToResolveTrees(queue);\n queue.length = 0;\n if (Date.now() - startTime > 500) {\n this.warn(\n 'Timeout in the loop, please check the resolve tree data:',\n resolveTrees,\n );\n break;\n }\n for (const tree of resolveTrees) {\n let parent = this.mirror.getNode(tree.value.parentId);\n if (!parent) {\n this.debug(\n 'Drop resolve tree since there is no parent for the root node.',\n tree,\n );\n } else {\n iterateResolveTree(tree, (mutation) => {\n appendNode(mutation);\n });\n }\n }\n }\n\n if (Object.keys(legacy_missingNodeMap).length) {\n Object.assign(this.legacy_missingNodeRetryMap, legacy_missingNodeMap);\n }\n\n d.texts.forEach((mutation) => {\n let target = this.mirror.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r) => r.id === mutation.id)) {\n // no need to warn, element was already removed\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n /**\n * apply text content to real parent directly\n */\n if (this.fragmentParentMap.has(target)) {\n target = this.fragmentParentMap.get(target)!;\n }\n target.textContent = mutation.value;\n });\n d.attributes.forEach((mutation) => {\n let target = this.mirror.getNode(mutation.id);\n if (!target) {\n if (d.removes.find((r) => r.id === mutation.id)) {\n // no need to warn, element was already removed\n return;\n }\n return this.warnNodeNotFound(d, mutation.id);\n }\n if (this.fragmentParentMap.has(target)) {\n target = this.fragmentParentMap.get(target)!;\n }\n for (const attributeName in mutation.attributes) {\n if (typeof attributeName === 'string') {\n const value = mutation.attributes[attributeName];\n if (value === null) {\n ((target as Node) as Element).removeAttribute(attributeName);\n } else if (typeof value === 'string') {\n try {\n ((target as Node) as Element).setAttribute(attributeName, value);\n } catch (error) {\n if (this.config.showWarning) {\n console.warn(\n 'An error occurred may due to the checkout feature.',\n error,\n );\n }\n }\n } else if (attributeName === 'style') {\n let styleValues = value as styleAttributeValue;\n const targetEl = (target as Node) as HTMLElement;\n for (var s in styleValues) {\n if (styleValues[s] === false) {\n targetEl.style.removeProperty(s);\n } else if (styleValues[s] instanceof Array) {\n const svp = styleValues[s] as styleValueWithPriority;\n targetEl.style.setProperty(s, svp[0], svp[1]);\n } else {\n const svs = styleValues[s] as string;\n targetEl.style.setProperty(s, svs);\n }\n }\n }\n }\n }\n });\n }\n\n /**\n * Apply the scroll data on real elements.\n * If the replayer is in sync mode, smooth scroll behavior should be disabled.\n * @param d the scroll data\n * @param isSync whether the replayer is in sync mode(fast-forward)\n */\n private applyScroll(d: scrollData, isSync: boolean) {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n if ((target as Node) === this.iframe.contentDocument) {\n this.iframe.contentWindow!.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? 'auto' : 'smooth',\n });\n } else if (target.__sn.type === NodeType.Document) {\n // nest iframe content document\n ((target as unknown) as Document).defaultView!.scrollTo({\n top: d.y,\n left: d.x,\n behavior: isSync ? 'auto' : 'smooth',\n });\n } else {\n try {\n ((target as Node) as Element).scrollTop = d.y;\n ((target as Node) as Element).scrollLeft = d.x;\n } catch (error) {\n /**\n * Seldomly we may found scroll target was removed before\n * its last scroll event.\n */\n }\n }\n }\n\n private applyInput(d: inputData) {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(d, d.id);\n }\n try {\n ((target as Node) as HTMLInputElement).checked = d.isChecked;\n ((target as Node) as HTMLInputElement).value = d.text;\n } catch (error) {\n // for safe\n }\n }\n\n private applyText(d: textMutation, mutation: mutationData) {\n const target = this.mirror.getNode(d.id);\n if (!target) {\n return this.debugNodeNotFound(mutation, d.id);\n }\n try {\n ((target as Node) as HTMLElement).textContent = d.value;\n } catch (error) {\n // for safe\n }\n }\n\n private legacy_resolveMissingNode(\n map: missingNodeMap,\n parent: Node,\n target: Node,\n targetMutation: addedNodeMutation,\n ) {\n const { previousId, nextId } = targetMutation;\n const previousInMap = previousId && map[previousId];\n const nextInMap = nextId && map[nextId];\n if (previousInMap) {\n const { node, mutation } = previousInMap as missingNode;\n parent.insertBefore(node, target);\n delete map[mutation.node.id];\n delete this.legacy_missingNodeRetryMap[mutation.node.id];\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(map, parent, node as Node, mutation);\n }\n }\n if (nextInMap) {\n const { node, mutation } = nextInMap as missingNode;\n parent.insertBefore(node, target.nextSibling);\n delete map[mutation.node.id];\n delete this.legacy_missingNodeRetryMap[mutation.node.id];\n if (mutation.previousId || mutation.nextId) {\n this.legacy_resolveMissingNode(map, parent, node as Node, mutation);\n }\n }\n }\n\n private moveAndHover(\n x: number,\n y: number,\n id: number,\n isSync: boolean,\n debugData: incrementalData,\n ) {\n const target = this.mirror.getNode(id);\n if (!target) {\n return this.debugNodeNotFound(debugData, id);\n }\n\n const base = getBaseDimension(target, this.iframe);\n const _x = x * base.absoluteScale + base.x;\n const _y = y * base.absoluteScale + base.y;\n\n this.mouse.style.left = `${_x}px`;\n this.mouse.style.top = `${_y}px`;\n if (!isSync) {\n this.drawMouseTail({ x: _x, y: _y });\n }\n this.hoverElements((target as Node) as Element);\n }\n\n private drawMouseTail(position: { x: number; y: number }) {\n if (!this.mouseTail) {\n return;\n }\n\n const { lineCap, lineWidth, strokeStyle, duration } =\n this.config.mouseTail === true\n ? defaultMouseTailConfig\n : Object.assign({}, defaultMouseTailConfig, this.config.mouseTail);\n\n const draw = () => {\n if (!this.mouseTail) {\n return;\n }\n const ctx = this.mouseTail.getContext('2d');\n if (!ctx || !this.tailPositions.length) {\n return;\n }\n ctx.clearRect(0, 0, this.mouseTail.width, this.mouseTail.height);\n ctx.beginPath();\n ctx.lineWidth = lineWidth;\n ctx.lineCap = lineCap;\n ctx.strokeStyle = strokeStyle;\n ctx.moveTo(this.tailPositions[0].x, this.tailPositions[0].y);\n this.tailPositions.forEach((p) => ctx.lineTo(p.x, p.y));\n ctx.stroke();\n };\n\n this.tailPositions.push(position);\n draw();\n setTimeout(() => {\n this.tailPositions = this.tailPositions.filter((p) => p !== position);\n draw();\n }, duration / this.speedService.state.context.timer.speed);\n }\n\n private hoverElements(el: Element) {\n this.iframe.contentDocument\n ?.querySelectorAll('.\\\\:hover')\n .forEach((hoveredEl) => {\n hoveredEl.classList.remove(':hover');\n });\n let currentEl: Element | null = el;\n while (currentEl) {\n if (currentEl.classList) {\n currentEl.classList.add(':hover');\n }\n currentEl = currentEl.parentElement;\n }\n }\n\n private isUserInteraction(event: eventWithTime): boolean {\n if (event.type !== EventType.IncrementalSnapshot) {\n return false;\n }\n return (\n event.data.source > IncrementalSource.Mutation &&\n event.data.source <= IncrementalSource.Input\n );\n }\n\n private backToNormal() {\n this.nextUserInteractionEvent = null;\n if (this.speedService.state.matches('normal')) {\n return;\n }\n this.speedService.send({ type: 'BACK_TO_NORMAL' });\n this.emitter.emit(ReplayerEvents.SkipEnd, {\n speed: this.speedService.state.context.normalSpeed,\n });\n }\n\n /**\n * Replace the virtual parent with the real parent.\n * @param frag fragment document, the virtual parent\n * @param parent real parent element\n */\n private restoreRealParent(frag: INode, parent: INode) {\n this.mirror.map[parent.__sn.id] = parent;\n /**\n * If we have already set value attribute on textarea,\n * then we could not apply text content as default value any more.\n */\n if (\n parent.__sn.type === NodeType.Element &&\n parent.__sn.tagName === 'textarea' &&\n frag.textContent\n ) {\n ((parent as unknown) as HTMLTextAreaElement).value = frag.textContent;\n }\n parent.appendChild(frag);\n // restore state of elements after they are mounted\n this.restoreState(parent);\n }\n\n /**\n * store state of elements before unmounted from dom recursively\n * the state should be restored in the handler of event ReplayerEvents.Flush\n * e.g. browser would lose scroll position after the process that we add children of parent node to Fragment Document as virtual dom\n */\n private storeState(parent: INode) {\n if (parent) {\n if (parent.nodeType === parent.ELEMENT_NODE) {\n const parentElement = (parent as unknown) as HTMLElement;\n if (parentElement.scrollLeft || parentElement.scrollTop) {\n // store scroll position state\n this.elementStateMap.set(parent, {\n scroll: [parentElement.scrollLeft, parentElement.scrollTop],\n });\n }\n if (parentElement.tagName === 'STYLE')\n storeCSSRules(\n parentElement as HTMLStyleElement,\n this.virtualStyleRulesMap,\n );\n const children = parentElement.children;\n for (const child of Array.from(children)) {\n this.storeState((child as unknown) as INode);\n }\n }\n }\n }\n\n /**\n * restore the state of elements recursively, which was stored before elements were unmounted from dom in virtual parent mode\n * this function corresponds to function storeState\n */\n private restoreState(parent: INode) {\n if (parent.nodeType === parent.ELEMENT_NODE) {\n const parentElement = (parent as unknown) as HTMLElement;\n if (this.elementStateMap.has(parent)) {\n const storedState = this.elementStateMap.get(parent)!;\n // restore scroll position\n if (storedState.scroll) {\n parentElement.scrollLeft = storedState.scroll[0];\n parentElement.scrollTop = storedState.scroll[1];\n }\n this.elementStateMap.delete(parent);\n }\n const children = parentElement.children;\n for (const child of Array.from(children)) {\n this.restoreState((child as unknown) as INode);\n }\n }\n }\n\n private restoreNodeSheet(node: INode) {\n const storedRules = this.virtualStyleRulesMap.get(node);\n if (node.nodeName !== 'STYLE') {\n return;\n }\n\n if (!storedRules) {\n return;\n }\n\n const styleNode = (node as unknown) as HTMLStyleElement;\n\n applyVirtualStyleRulesToNode(storedRules, styleNode);\n }\n\n private warnNodeNotFound(d: incrementalData, id: number) {\n if (this.treeIndex.idRemoved(id)) {\n this.warn(`Node with id '${id}' was previously removed. `, d);\n } else {\n this.warn(`Node with id '${id}' not found. `, d);\n }\n }\n\n private warnCanvasMutationFailed(\n d: canvasMutationData | canvasMutationCommand,\n error: unknown,\n ) {\n this.warn(`Has error on canvas update`, error, 'canvas mutation:', d);\n }\n\n private debugNodeNotFound(d: incrementalData, id: number) {\n /**\n * There maybe some valid scenes of node not being found.\n * Because DOM events are macrotask and MutationObserver callback\n * is microtask, so events fired on a removed DOM may emit\n * snapshots in the reverse order.\n */\n if (this.treeIndex.idRemoved(id)) {\n this.debug(\n REPLAY_CONSOLE_PREFIX,\n `Node with id '${id}' was previously removed. `,\n d,\n );\n } else {\n this.debug(REPLAY_CONSOLE_PREFIX, `Node with id '${id}' not found. `, d);\n }\n }\n\n private warn(...args: Parameters<typeof console.warn>) {\n if (!this.config.showWarning) {\n return;\n }\n console.warn(REPLAY_CONSOLE_PREFIX, ...args);\n }\n\n private debug(...args: Parameters<typeof console.log>) {\n if (!this.config.showDebug) {\n return;\n }\n // tslint:disable-next-line: no-console\n console.log(REPLAY_CONSOLE_PREFIX, ...args);\n }\n}\n","import { Replayer } from '..';\nimport {\n CanvasContext,\n canvasMutationCommand,\n canvasMutationData,\n} from '../../types';\nimport webglMutation from './webgl';\nimport canvas2DMutation from './2d';\n\nexport default function canvasMutation({\n event,\n mutation,\n target,\n imageMap,\n errorHandler,\n}: {\n event: Parameters<Replayer['applyIncremental']>[0];\n mutation: canvasMutationData;\n target: HTMLCanvasElement;\n imageMap: Replayer['imageMap'];\n errorHandler: Replayer['warnCanvasMutationFailed'];\n}): void {\n try {\n const mutations: canvasMutationCommand[] =\n 'commands' in mutation ? mutation.commands : [mutation];\n\n if ([CanvasContext.WebGL, CanvasContext.WebGL2].includes(mutation.type)) {\n return mutations.forEach((command) => {\n webglMutation({\n mutation: command,\n type: mutation.type,\n target,\n imageMap,\n errorHandler,\n });\n });\n }\n // default is '2d' for backwards compatibility (rrweb below 1.1.x)\n return mutations.forEach((command) => {\n canvas2DMutation({\n event,\n mutation: command,\n target,\n imageMap,\n errorHandler,\n });\n });\n } catch (error) {\n errorHandler(mutation, error);\n }\n}\n","import { Replayer } from '../';\nimport { canvasMutationCommand } from '../../types';\n\nexport default function canvasMutation({\n event,\n mutation,\n target,\n imageMap,\n errorHandler,\n}: {\n event: Parameters<Replayer['applyIncremental']>[0];\n mutation: canvasMutationCommand;\n target: HTMLCanvasElement;\n imageMap: Replayer['imageMap'];\n errorHandler: Replayer['warnCanvasMutationFailed'];\n}): void {\n try {\n const ctx = ((target as unknown) as HTMLCanvasElement).getContext('2d')!;\n\n if (mutation.setter) {\n // skip some read-only type checks\n // tslint:disable-next-line:no-any\n (ctx as any)[mutation.property] = mutation.args[0];\n return;\n }\n const original = ctx[\n mutation.property as Exclude<keyof typeof ctx, 'canvas'>\n ] as Function;\n\n /**\n * We have serialized the image source into base64 string during recording,\n * which has been preloaded before replay.\n * So we can get call drawImage SYNCHRONOUSLY which avoid some fragile cast.\n */\n if (\n mutation.property === 'drawImage' &&\n typeof mutation.args[0] === 'string'\n ) {\n const image = imageMap.get(event);\n mutation.args[0] = image;\n original.apply(ctx, mutation.args);\n } else {\n original.apply(ctx, mutation.args);\n }\n } catch (error) {\n errorHandler(mutation, error);\n }\n}\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Much of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var u = ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([c], { type: 'text/javascript' })));\n var w = new Worker(u);\n w.onerror = function (e) { return cb(e.error, null); };\n w.onmessage = function (e) { return cb(null, e.data); };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i)\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n if (!noSt && pos + tl * (clb + 7) > tbts)\n break;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts)\n throw 'unexpected EOF';\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var mxa = lbt + dbt + 18;\n while (noSt || pos + mxa < tbts) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts)\n throw 'unexpected EOF';\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts)\n throw 'unexpected EOF';\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = pos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [new u8(0), 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768\n var imod = i & 32767;\n // previous index with this value\n var pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst)\n pos = wfblk(w, pos, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new u32(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = 0xFFFFFFFF;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return c ^ 0xFFFFFFFF; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 5552, l);\n for (; i < e; ++i)\n n += d[i], m += n;\n n %= 65521, m %= 65521;\n }\n a = n, b = m;\n },\n d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n if (!opts.consume)\n dat = new u8(dat);\n w.postMessage([dat, opts], [dat.buffer]);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16)) + (d[b + 3] << 23) * 2; };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) + (2 * (d[l - 1] << 23));\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n return dopt(data, opts, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) >> 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = gzs(this.p);\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n var l = str.length;\n if (!latin1 && typeof TextEncoder != 'undefined')\n return new TextEncoder().encode(str);\n var ar = new u8(str.length + (str.length >>> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >>> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n var r = '';\n if (!latin1 && typeof TextDecoder != 'undefined')\n return new TextDecoder().decode(dat);\n for (var i = 0; i < dat.length;) {\n var c = dat[i++];\n if (c < 128 || latin1)\n r += String.fromCharCode(c);\n else if (c < 224)\n r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n else if (c < 240)\n r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n else\n c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n return r;\n}\n;\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z ? z64e(d, es) : [b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b4(d, b + 12), b4(d, b + 4), b4(d, b + 20)];\n};\n// write zip header\nvar wzh = function (d, b, c, cmp, su, fn, u, o, ce, t) {\n var fl = fn.length, l = cmp.length;\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b] = 20, b += 2;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (t == 8 && (o.level == 1 ? 6 : o.level < 6 ? 4 : o.level == 9 ? 2 : 0)), d[b++] = u && 8;\n d[b] = t, b += 2;\n var dt = new Date(o.mtime || Date.now()), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, ((y << 24) * 2) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1));\n b += 4;\n wbytes(d, b, c);\n wbytes(d, b + 4, l);\n wbytes(d, b + 8, su);\n wbytes(d, b + 12, fl), b += 16; // skip extra field, comment\n if (ce != null)\n wbytes(d, b += 10, ce), b += 4;\n d.set(fn, b);\n b += fl;\n if (ce == null)\n d.set(cmp, b);\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n wzh(out, tot, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, tot, f.t), o += 46 + f.n.length, tot += 30 + f.n.length + f.d.length;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), m = file.length;\n c.p(file);\n var n = strToU8(fn), s = n.length;\n var t = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = {\n t: t,\n d: d,\n m: m,\n c: c.d(),\n u: fn.length != l,\n n: n,\n p: p\n };\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n if (!--lft)\n cbf();\n }\n };\n if (n.length > 65535)\n cbl('filename too long', null);\n if (!t)\n cbl(null, file);\n else if (m < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var t = p.level == 0 ? 0 : 8;\n var n = strToU8(fn), s = n.length;\n if (n.length > 65535)\n throw 'filename too long';\n var d = t ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push({\n t: t,\n d: d,\n m: file.length,\n c: c.d(),\n u: fn.length != s,\n n: n,\n o: o,\n p: p\n });\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, f.o, f.t), o += 46 + f.n.length;\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_2 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_2(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","import { strFromU8, strToU8, unzlibSync } from 'fflate';\nimport { UnpackFn, eventWithTimeAndPacker, MARK } from './base';\nimport { eventWithTime } from '../types';\n\nexport const unpack: UnpackFn = (raw: string) => {\n if (typeof raw !== 'string') {\n return raw;\n }\n try {\n const e: eventWithTime = JSON.parse(raw);\n if (e.timestamp) {\n return e;\n }\n } catch (error) {\n // ignore and continue\n }\n try {\n const e: eventWithTimeAndPacker = JSON.parse(\n strFromU8(unzlibSync(strToU8(raw, true)))\n );\n if (e.v === MARK) {\n return e;\n }\n throw new Error(\n `These events were packed with packer ${e.v} which is incompatible with current packer ${MARK}.`,\n );\n } catch (error) {\n console.error(error);\n throw new Error('Unknown data format.');\n }\n};\n","import { eventWithTime } from '../types';\n\nexport type PackFn = (event: eventWithTime) => string;\nexport type UnpackFn = (raw: string) => eventWithTime;\n\nexport type eventWithTimeAndPacker = eventWithTime & {\n v: string;\n};\n\nexport const MARK = 'v1';\n"],"names":["NodeType","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","r","e","ar","push","error","__spreadArray","to","from","pack","l","Array","slice","concat","isElement","nodeType","ELEMENT_NODE","commentre","parse","css","options","lineno","column","updatePosition","str","lines","match","lastIndexOf","position","start","line","node","Position","whitespace","end","source","content","errorsList","msg","err","Error","reason","filename","silent","open","close","rules","comments","charAt","atrule","rule","re","exec","c","comment","pos","type","selector","trim","replace","split","map","declaration","propMatch","prop","val","ret","property","declarations","decl","decls","keyframe","vals","values","rulesList","atimport","_compileAtrule","atcharset","atnamespace","name","RegExp","vendor","frame","frames","keyframes","atkeyframes","media","style","atmedia","atcustommedia","supports","atsupports","doc","document","atdocument","sel","selectors","atpage","athost","atfontface","addParent","stylesheet","parsingErrors","obj","parent","isNode","childParent","_i","_a","keys","isArray","forEach","v","defineProperty","configurable","writable","enumerable","tagMap","script","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","clippath","feblend","fecolormatrix","fecomponenttransfer","fecomposite","feconvolvematrix","fediffuselighting","fedisplacementmap","fedistantlight","fedropshadow","feflood","fefunca","fefuncb","fefuncg","fefuncr","fegaussianblur","feimage","femerge","femergenode","femorphology","feoffset","fepointlight","fespecularlighting","fespotlight","fetile","feturbulence","foreignobject","glyphref","lineargradient","radialgradient","HOVER_SELECTOR","HOVER_SELECTOR_GLOBAL","addHoverClass","cssText","cache","window","HIG_CONFIGURATION","enableOnHoverClass","cachedStyle","stylesWithHoverClass","get","ast","test","selectorMatcher","filter","index","indexOf","sort","a","b","join","result","newSelector","set","createCache","Map","buildNode","hackCss","Document","implementation","createDocument","DocumentType","createDocumentType","publicId","systemId","Element","node_1","tagName","attributes","_cssText","getTagName","isSVG","createElementNS","createElement","_loop_1","name_1","startsWith","image_1","src","onload","ctx","getContext","drawImage","width","height","image","currentSrc","setAttribute","currentTime","rr_mediaCurrentTime","play","console","warn","pause","isTextarea","isRemoteOrDynamicCss","regex","fontUrls_1","lastIndex","groupIndex","url","originalUrl","proxyUrl","PROXY_URL_1","urlPair","child","createTextNode","childNodes","TEXT_NODE","removeChild","appendChild","setAttributeNS","substring","rel","as","href","endsWith","srcset","rr_dataURL","isShadowHost","shadowRoot","firstChild","attachShadow","mode","Text","isStyle","textContent","CDATA","createCDATASection","Comment","createComment","buildNodeWithSN","skipChild","_b","afterAppend","rootId","assert","compatMode","xmlns","write","__sn","id","_c","childN","childNode","isShadow","rebuild","onVisit","idNodeMap","key","visit","visitedNode","el","name_2","scrollLeft","scrollTop","handleScroll","mitt","all","create","on","handler","off","splice","emit","evt","EventType","IncrementalSource","MouseInteractions","CanvasContext","MediaInteractions","ReplayerEvents","polyfill","w","d","documentElement","__forceSmoothScrollPolyfill__","userAgent","HTMLElement","original","scroll","scrollTo","scrollBy","elementScroll","scrollElement","scrollIntoView","now","performance","bind","Date","ROUNDING_TOLERANCE","navigator","undefined","shouldBailOut","smoothScroll","body","left","scrollX","pageXOffset","top","scrollY","pageYOffset","SyntaxError","behavior","scrollableParent","findScrollableParent","parentRects","getBoundingClientRect","clientRects","getComputedStyle","x","y","firstArg","hasScrollableSpace","axis","clientHeight","scrollHeight","clientWidth","scrollWidth","canOverflow","overflowValue","isScrollable","isScrollableY","isScrollableX","parentNode","host","step","context","currentX","currentY","k","elapsed","startTime","Math","cos","PI","startX","startY","method","scrollable","requestAnimationFrame","actions","speed","Timer","action","findActionIndex","timeOffset","lastTimestamp","self","raf","check","time","delay","shift","doAction","liveMode","cancelAnimationFrame","mid","floor","addDelay","event","baselineTime","IncrementalSnapshot","data","MouseMove","firstOffset","positions","firstTimestamp","timestamp","return","NotStarted","Running","Stopped","assignment","u","changed","matches","f","states","initial","entry","config","_options","initialState","transition","g","h","S","target","j","E","R","N","cond","O","_","T","q","exit","z","A","B","C","Set","_machine","send","subscribe","add","unsubscribe","delete","stop","clear","state","status","createPlayerService","getCastFn","applyEventsSynchronously","emitter","interpret","createMachine","playing","PAUSE","CAST_EVENT","END","ADD_EVENT","REPLACE_EVENTS","paused","PLAY","TO_LIVE","live","castEvent","lastPlayedEvent","payload","recordTimeOffset","events","timer","events_1","neededEvents","idx","event_1","Meta","discardPriorSnapshots","lastPlayedTimestamp","PlayBack","syncEvents","event_3","castFn_1","neededEvents_1","Flush","addActions","resetLastPlayedEvent","startLive","toggleLiveMode","replaceEvents","machineEvent","curEvents","newEvents","event_4","castFn_2","newEvents_1","isActive","replaceActions","addEvent","event_5","insertionIndex","isSync","castFn_3","addAction","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","getId","getNode","removeNodeFromMap","has","reset","Proxy","Reflect","receiver","TreeIndex","mutation","parentTreeNode","indexes","parentId","treeNode","children","texts","tree","mirror","deepRemoveFromMirror","_this","removeIdSet","deepRemoveFromTreeIndex","_treeNode","_parentTreeNode","removeNodeMutations","textMutations","attributeMutations","scrollMap","inputMap","batchMutationData","Mutation","removes","adds","walk","removed","_d","_f","mutationData","queueToResolveTrees","queue","queueNodeMap","putIntoMap","nodeInTree","queueNodeTrees","queue_1","nextId","nextInTree","parentInTree","iterateResolveTree","cb","isIframeINode","getBaseDimension","rootIframe","frameElement","ownerDocument","defaultView","relativeScale","absoluteScale","frameDimension","frameBaseDimension","hasShadowRoot","Boolean","StyleRuleType","getNestedRule","cssRules","getPositionsAndIndex","nestedIndex","pop","applyVirtualStyleRulesToNode","storedRules","styleNode","sheet","Insert","insertRule","Remove","deleteRule","Snapshot","cssTexts","existingRules","existingRulesReversed","entries","reverse","lastMatch_1","Number","restoreSnapshotOfStyleRulesToNode","SetProperty","setProperty","priority","RemoveProperty","removeProperty","chars","lookup","Uint8Array","charCodeAt","webGLVarMap","variableListFor","ctor","contextMap","WebGLVariableConstructorsNames","deserializeArg","imageMap","arg","args","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","arraybuffer","ArrayBuffer","bytes","decode","Image","webglMutation","errorHandler","WebGL","setter","constructor","includes","variables","saveToWebGLVarMap","SKIP_DURATION_LIMIT","mittProxy.default","mittProxy","REPLAY_CONSOLE_PREFIX","defaultMouseTailConfig","duration","lineCap","lineWidth","strokeStyle","indicatesTouchDevice","TouchMove","MouseInteraction","TouchStart","defaultConfig","maxSpeed","root","loadTimeout","skipInactive","showWarning","showDebug","blockClass","insertStyleRules","triggerFocus","UNSAFE_replayCanvas","pauseAnimation","mouseTail","inactiveThreshold","inactiveSkipTime","handleResize","Resize","setupDom","treeIndex","fragmentParentMap","elementStateMap","virtualStyleRulesMap","_e","flush","frag","restoreRealParent","applyText","_h","restoreNodeSheet","_k","applyScroll","_m","applyInput","firstFullSnapshot","service","unpackFn","a1","a2","StateChange","player","speedService","normalSpeed","normal","FAST_FORWARD","SET_SPEED","skipping","BACK_TO_NORMAL","setSpeed","recordSpeed","restoreSpeed","firstMeta","find","firstFullsnapshot","FullSnapshot","width_1","height_1","setTimeout","rebuildFullSnapshot","iframe","contentWindow","initialOffset","mouse","classList","Replayer","backToNormal","display","parseFloat","wrapper","insertBefore","activityIntervals","allIntervals","metadata","getMetaData","userInteractionEvents","ev","isUserInteraction","endTime","currentInterval_1","_event","active","mergedIntervals","currentInterval","totalTime","firstEvent","lastEvent","getTimeOffset","contentDocument","getElementsByTagName","remove","Start","handleInactivity","Pause","Resume","rawEvent","Promise","resolve","then","pointerEvents","win","disableInteract","smoothscrollPolyfill","NodeList","DOMTokenList","Node","contains","dimension","String","events_2","event_2","DomContentLoaded","Load","Custom","Plugin","MediaInteraction","castFn","mousePos","moveAndHover","debugData","touchActive","CustomEvent","applyIncremental","nextUserInteractionEvent","skipTime","min","round","SkipStart","plugins","replayer","last_index","finish_1","Finish","max","EventCast","resetNext","inactiveEndTimestamp","getActivityIntervals","interval","legacy_missingNodeRetryMap","collected","builtNode","collectIframeAndAttachDocument","mutationInQueue","this_1","attachDocumentToIframe","newDocumentQueue","collected_1","head","FullsnapshotRebuilded","waitForStylesheetLoad","preloadAllImages","styleEl","injectStylesRules","iframeEl","parent_1","realParent","toUpperCase","this_2","collected_2","timer_1","unloadSheets_1","beforeLoadState_1","stateHandler_1","unsubscribe_1","querySelectorAll","addEventListener","size","getCurrentTime","LoadStylesheetEnd","clearTimeout","LoadStylesheetStart","args_1","hasImageArg","rr_type","images","args_2","getImageArgs","stateHandler","CanvasMutation","commands","preloadImages","this_3","canvas","imgd","createImageData","JSON","putImageData","text","attribute","applyMutation","message","Drag","lastPosition","Event","toLowerCase","debugNodeNotFound","Blur","blur","Focus","focus","preventScroll","Click","TouchEnd","tailPositions","offsetWidth","TouchCancel","dispatchEvent","Scroll","ViewportResize","Input","input","mediaEl","volume","muted","StyleSheetRule","rules_1","parent_2","usingVirtualParent_1","styleSheet_1","StyleDeclaration","parent_3","styleSheet","mutations","WebGL2","command","canvas2DMutation","canvasMutation","warnCanvasMutationFailed","Font","fontFace","FontFace","family","buffer","fontSource","descriptors","fonts","useVirtualParent","warnNodeNotFound","realTarget","DOMException","legacy_missingNodeMap","appendNode","parentInDocument","hasIframeChild","virtualParent","createDocumentFragment","storeState","previous","previousId","nextNotInDOM","targetDoc","nextSibling","mutationInQueue_1","legacy_resolveMissingNode","resolveTrees","resolveTrees_1","debug","attributeName","removeAttribute","styleValues","targetEl","svp","svs","checked","isChecked","targetMutation","previousInMap","nextInMap","base","_x","_y","drawMouseTail","hoverElements","draw","clearRect","beginPath","moveTo","lineTo","stroke","hoveredEl","currentEl","parentElement","SkipEnd","restoreState","storeCSSRules","storedState","nodeName","idRemoved","log","u8","u16","Uint16Array","u32","Uint32Array","fleb","fdeb","clim","freb","eb","fl","revfl","fd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flrm","fdrm","bits","bits16","slc","subarray","unzlibSync","out","dat","buf","st","sl","noBuf","noSt","cbuf","bl","nbuf","final","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","mxa","sym","dsym","inflt","zlv","raw","latin1","TextDecoder","fromCharCode","strFromU8","TextEncoder","encode","ai","strToU8"],"mappings":"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"}