@openreplay/tracker 4.1.4 → 4.1.6

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 (52) hide show
  1. package/cjs/app/guards.d.ts +1 -0
  2. package/cjs/app/index.d.ts +2 -0
  3. package/cjs/app/index.js +34 -26
  4. package/cjs/app/messages.d.ts +1 -1
  5. package/cjs/app/messages.gen.d.ts +4 -1
  6. package/cjs/app/messages.gen.js +32 -5
  7. package/cjs/app/messages.js +2 -2
  8. package/cjs/app/nodes.d.ts +1 -1
  9. package/cjs/app/nodes.js +4 -4
  10. package/cjs/app/observer/top_observer.js +2 -0
  11. package/cjs/common/interaction.d.ts +6 -1
  12. package/cjs/common/messages.gen.d.ts +26 -5
  13. package/cjs/index.d.ts +3 -3
  14. package/cjs/index.js +11 -6
  15. package/cjs/modules/constructedStyleSheets.js +14 -11
  16. package/cjs/modules/cssrules.js +6 -6
  17. package/cjs/modules/exception.d.ts +2 -2
  18. package/cjs/modules/exception.js +8 -8
  19. package/cjs/modules/focus.d.ts +2 -0
  20. package/cjs/modules/focus.js +45 -0
  21. package/cjs/modules/fonts.d.ts +2 -0
  22. package/cjs/modules/fonts.js +57 -0
  23. package/cjs/modules/img.js +1 -1
  24. package/cjs/utils.d.ts +1 -1
  25. package/cjs/utils.js +2 -2
  26. package/lib/app/guards.d.ts +1 -0
  27. package/lib/app/index.d.ts +2 -0
  28. package/lib/app/index.js +34 -26
  29. package/lib/app/messages.d.ts +1 -1
  30. package/lib/app/messages.gen.d.ts +4 -1
  31. package/lib/app/messages.gen.js +26 -2
  32. package/lib/app/messages.js +2 -2
  33. package/lib/app/nodes.d.ts +1 -1
  34. package/lib/app/nodes.js +4 -4
  35. package/lib/app/observer/top_observer.js +2 -0
  36. package/lib/common/interaction.d.ts +6 -1
  37. package/lib/common/messages.gen.d.ts +26 -5
  38. package/lib/common/tsconfig.tsbuildinfo +1 -1
  39. package/lib/index.d.ts +3 -3
  40. package/lib/index.js +11 -6
  41. package/lib/modules/constructedStyleSheets.js +15 -12
  42. package/lib/modules/cssrules.js +6 -6
  43. package/lib/modules/exception.d.ts +2 -2
  44. package/lib/modules/exception.js +8 -8
  45. package/lib/modules/focus.d.ts +2 -0
  46. package/lib/modules/focus.js +42 -0
  47. package/lib/modules/fonts.d.ts +2 -0
  48. package/lib/modules/fonts.js +54 -0
  49. package/lib/modules/img.js +2 -2
  50. package/lib/utils.d.ts +1 -1
  51. package/lib/utils.js +1 -1
  52. package/package.json +1 -1
@@ -170,9 +170,9 @@ export function PageRenderTiming(speedIndex, visuallyComplete, timeToInteractive
170
170
  timeToInteractive,
171
171
  ];
172
172
  }
173
- export function JSException(name, message, payload) {
173
+ export function JSExceptionDeprecated(name, message, payload) {
174
174
  return [
175
- 25 /* JSException */,
175
+ 25 /* JSExceptionDeprecated */,
176
176
  name,
177
177
  message,
178
178
  payload,
@@ -327,6 +327,21 @@ export function SetPageVisibility(hidden) {
327
327
  hidden,
328
328
  ];
329
329
  }
330
+ export function LoadFontFace(parentID, family, source, descriptors) {
331
+ return [
332
+ 57 /* LoadFontFace */,
333
+ parentID,
334
+ family,
335
+ source,
336
+ descriptors,
337
+ ];
338
+ }
339
+ export function SetNodeFocus(id) {
340
+ return [
341
+ 58 /* SetNodeFocus */,
342
+ id,
343
+ ];
344
+ }
330
345
  export function LongTask(timestamp, duration, context, containerType, containerSrc, containerId, containerName) {
331
346
  return [
332
347
  59 /* LongTask */,
@@ -440,3 +455,12 @@ export function Zustand(mutation, state) {
440
455
  state,
441
456
  ];
442
457
  }
458
+ export function JSException(name, message, payload, metadata) {
459
+ return [
460
+ 78 /* JSException */,
461
+ name,
462
+ message,
463
+ payload,
464
+ metadata,
465
+ ];
466
+ }
@@ -76,8 +76,8 @@ export function PageLoadTiming(requestStart, responseStart, responseEnd, domCont
76
76
  export function PageRenderTiming(speedIndex, visuallyComplete, timeToInteractive) {
77
77
  return [24 /* PageRenderTiming */, speedIndex, visuallyComplete, timeToInteractive];
78
78
  }
79
- export function JSException(name, message, payload) {
80
- return [25 /* JSException */, name, message, payload];
79
+ export function JSException(name, message, payload, metadata) {
80
+ return [78 /* JSException */, name, message, payload, metadata];
81
81
  }
82
82
  export function RawCustomEvent(name, payload) {
83
83
  return [27 /* RawCustomEvent */, name, payload];
@@ -6,7 +6,7 @@ export default class Nodes {
6
6
  private readonly elementListeners;
7
7
  constructor(node_id: string);
8
8
  attachNodeCallback(nodeCallback: NodeCallback): void;
9
- attachNodeListener(node: Node, type: string, listener: EventListener): void;
9
+ attachNodeListener(node: Node, type: string, listener: EventListener, useCapture?: boolean): void;
10
10
  registerNode(node: Node): [/*id:*/ number, /*isNew:*/ boolean];
11
11
  unregisterNode(node: Node): number | undefined;
12
12
  cleanTree(): void;
package/lib/app/nodes.js CHANGED
@@ -9,18 +9,18 @@ export default class Nodes {
9
9
  attachNodeCallback(nodeCallback) {
10
10
  this.nodeCallbacks.push(nodeCallback);
11
11
  }
12
- attachNodeListener(node, type, listener) {
12
+ attachNodeListener(node, type, listener, useCapture = true) {
13
13
  const id = this.getID(node);
14
14
  if (id === undefined) {
15
15
  return;
16
16
  }
17
- node.addEventListener(type, listener);
17
+ node.addEventListener(type, listener, useCapture);
18
18
  let listeners = this.elementListeners.get(id);
19
19
  if (listeners === undefined) {
20
20
  listeners = [];
21
21
  this.elementListeners.set(id, listeners);
22
22
  }
23
- listeners.push([type, listener]);
23
+ listeners.push([type, listener, useCapture]);
24
24
  }
25
25
  registerNode(node) {
26
26
  let id = node[this.node_id];
@@ -40,7 +40,7 @@ export default class Nodes {
40
40
  const listeners = this.elementListeners.get(id);
41
41
  if (listeners !== undefined) {
42
42
  this.elementListeners.delete(id);
43
- listeners.forEach((listener) => node.removeEventListener(listener[0], listener[1]));
43
+ listeners.forEach((listener) => node.removeEventListener(listener[0], listener[1], listener[2]));
44
44
  }
45
45
  }
46
46
  return id;
@@ -94,6 +94,8 @@ export default class TopObserver extends Observer {
94
94
  // Alternatively - observe(#document) then bindNode(documentElement)
95
95
  this.observeRoot(window.document, () => {
96
96
  this.app.send(CreateDocument());
97
+ // it has no node_id here
98
+ this.app.nodes.callNodeCallbacks(document, true);
97
99
  }, window.document.documentElement);
98
100
  }
99
101
  disconnect() {
@@ -15,5 +15,10 @@ declare type Auth = {
15
15
  token: string;
16
16
  beaconSizeLimit?: number;
17
17
  };
18
- export declare type WorkerMessageData = null | 'stop' | Start | Auth | Array<Message>;
18
+ export declare type ToWorkerData = null | 'stop' | Start | Auth | Array<Message>;
19
+ declare type Failure = {
20
+ type: 'failure';
21
+ reason: string;
22
+ };
23
+ export declare type FromWorkerData = 'restart' | Failure;
19
24
  export {};
@@ -21,7 +21,7 @@ export declare const enum Type {
21
21
  ConsoleLog = 22,
22
22
  PageLoadTiming = 23,
23
23
  PageRenderTiming = 24,
24
- JSException = 25,
24
+ JSExceptionDeprecated = 25,
25
25
  RawCustomEvent = 27,
26
26
  UserID = 28,
27
27
  UserAnonymousID = 29,
@@ -41,6 +41,8 @@ export declare const enum Type {
41
41
  ResourceTiming = 53,
42
42
  ConnectionInformation = 54,
43
43
  SetPageVisibility = 55,
44
+ LoadFontFace = 57,
45
+ SetNodeFocus = 58,
44
46
  LongTask = 59,
45
47
  SetNodeAttributeURLBased = 60,
46
48
  SetCSSDataURLBased = 61,
@@ -54,7 +56,8 @@ export declare const enum Type {
54
56
  AdoptedSSDeleteRule = 75,
55
57
  AdoptedSSAddOwner = 76,
56
58
  AdoptedSSRemoveOwner = 77,
57
- Zustand = 79
59
+ Zustand = 79,
60
+ JSException = 78
58
61
  }
59
62
  export declare type BatchMetadata = [
60
63
  Type.BatchMetadata,
@@ -182,8 +185,8 @@ export declare type PageRenderTiming = [
182
185
  number,
183
186
  number
184
187
  ];
185
- export declare type JSException = [
186
- Type.JSException,
188
+ export declare type JSExceptionDeprecated = [
189
+ Type.JSExceptionDeprecated,
187
190
  string,
188
191
  string,
189
192
  string
@@ -299,6 +302,17 @@ export declare type SetPageVisibility = [
299
302
  Type.SetPageVisibility,
300
303
  boolean
301
304
  ];
305
+ export declare type LoadFontFace = [
306
+ Type.LoadFontFace,
307
+ number,
308
+ string,
309
+ string,
310
+ string
311
+ ];
312
+ export declare type SetNodeFocus = [
313
+ Type.SetNodeFocus,
314
+ number
315
+ ];
302
316
  export declare type LongTask = [
303
317
  Type.LongTask,
304
318
  number,
@@ -384,5 +398,12 @@ export declare type Zustand = [
384
398
  string,
385
399
  string
386
400
  ];
387
- declare type Message = BatchMetadata | PartitionedMessage | Timestamp | SetPageLocation | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | ConsoleLog | PageLoadTiming | PageRenderTiming | JSException | RawCustomEvent | UserID | UserAnonymousID | Metadata | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | Redux | Vuex | MobX | NgRx | GraphQL | PerformanceTrack | ResourceTiming | ConnectionInformation | SetPageVisibility | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | Zustand;
401
+ export declare type JSException = [
402
+ Type.JSException,
403
+ string,
404
+ string,
405
+ string,
406
+ string
407
+ ];
408
+ declare type Message = BatchMetadata | PartitionedMessage | Timestamp | SetPageLocation | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | ConsoleLog | PageLoadTiming | PageRenderTiming | JSExceptionDeprecated | RawCustomEvent | UserID | UserAnonymousID | Metadata | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | Redux | Vuex | MobX | NgRx | GraphQL | PerformanceTrack | ResourceTiming | ConnectionInformation | SetPageVisibility | LoadFontFace | SetNodeFocus | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | Zustand | JSException;
388
409
  export default Message;
@@ -1 +1 @@
1
- {"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/common/messages.gen.ts","../../src/common/interaction.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/resolve/index.d.ts"],"fileInfos":[{"version":"ca3c1cd7464b613bf148a1422cb3201fe083e08565a02dc99eaad0d2977c16a7","affectsGlobalScope":true,"impliedFormat":1},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true,"impliedFormat":1},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true,"impliedFormat":1},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true,"impliedFormat":1},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true,"impliedFormat":1},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true,"impliedFormat":1},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true,"impliedFormat":1},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true,"impliedFormat":1},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true,"impliedFormat":1},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true,"impliedFormat":1},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true,"impliedFormat":1},{"version":"ca06fa264234f5895ebfe13ec1f578ee1c18a0d02219a54c3cdad296686251cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true,"impliedFormat":1},"eb8d151b279cdd7f9c014cbfd79371801b8ef1e1b34b088630f88b52924201b4","68dcaf7bcaafa00e059a6c32fc519773fccdedbe51ba80c8962a944c36e5a77e","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"77f0b5c6a193a699c9f7d7fb0578e64e562d271afa740783665d2a827104a873","affectsGlobalScope":true,"impliedFormat":1},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"3e4624c306340ad303cc536a07004e81336c3f088308a9e4a9f4c957a3cda2fd","affectsGlobalScope":true,"impliedFormat":1},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","025fc13211ed47d2798269017af3ec869122a050d5431a6ad3c1997900e65c58","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"249a2b90439cdfd51709539fbfa4dfe0791cbae6efce1e9b327ba8f8cd703f49","affectsGlobalScope":true,"impliedFormat":1},"2f60ac046e587e917d739f1edc77540eb0ec34f83090dae4ebd5f96c1c9578d4","a9b6b0f7b1e30359283b131ba6d1c51ee2d3601a2f12e1623141e6a1a60c92a5","aeee0090b38de0dd47ca9a79ad5c2d156e3e09d92306719b0b45a3e96098e564","7bac475dcdd9f7e4e9da934d32c305bc889c4ce3c8ac0ef45a93a8d670fff607","09416dd69576b03a3f485adf329a02f043e4a481e060ef5b208194e488d31fd9","8acf99b1c8682276a63ea5bb68433782715892726b97e4604a415e4e56bce41c",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},"3b145a2351f5cf16abf999c8d5f4481c74dffdc54ec1e9a89992e2622e1226c5","a907bf91df26df2400858ef75f749498fb5cf00062bf90a737ac3949cc07978d","d270fd4b565eda11a0a737c181892316b7a1ace06c7988d0246219c3df11db06","4275d5f964e7fc7afc18538e26b3748c207dd772998346d17f409749aa1f3a63",{"version":"59a638a504490fecaacf0020b9814b6abee37edb66047eb1ab9f7c2274bf1da0","affectsGlobalScope":true,"impliedFormat":1},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","8c4c1a64db28930732033c31418f817dcb9d09d706766707ae6d38f23faf0c53","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","12a70315c8281e46d65696086dd25827408e967b305a22276ae2779fe519e0fe","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true,"impliedFormat":1},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","29d613c3964ea75b2b4e0d17098245c34529282e9cc72b7e4eeb2a7b12c27cb7",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","a381f079c4804442f179d742fdb2e495fe28d67a47cac673485f75ae2e77aeca","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true,"impliedFormat":1},"2af17363f8a062e3a8cd1b26030af0058b3f86e783f4fc6aa9f57247f240ebaa","06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","dfe08140492cdc135fb7fd9c4a652c05207b61a436906079b87da1d3111314bf","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","089e1f8603cbc35ab977c8dcc662eb754b82fca32ed1dfb16bd682726c2d5432","8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},"82fc37849846a3a0264047621d5beb6ce2ddeb2f83bdee2c79523af3c3282d97","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede"],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[86],[57,58,86,93,94],[42,86],[45,86],[46,51,86],[47,57,58,65,74,85,86],[47,48,57,65,86],[49,86],[50,51,58,66,86],[51,74,82,86],[52,54,57,65,86],[53,86],[54,55,86],[56,57,86],[57,86],[57,58,59,74,85,86],[57,58,59,74,77,86],[86,90],[60,65,74,85,86],[57,58,60,61,65,74,82,85,86],[60,62,74,82,85,86],[42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],[57,63,86],[64,85,86],[54,57,65,74,86],[66,86],[67,86],[45,68,86],[69,84,86,90],[70,86],[71,86],[57,72,86],[72,73,86,88],[57,74,75,76,77,86],[74,76,86],[74,75,86],[77,86],[78,86],[57,80,81,86],[80,81,86],[51,65,74,82,86],[83,86],[65,84,86],[46,60,71,85,86],[51,86],[74,86,87],[86,88],[86,89],[46,51,57,59,68,74,85,86,88,90],[74,86,91],[86,93],[39,86]],"referencedMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"exportedModulesMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"semanticDiagnosticsPerFile":[41,95,96,94,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,44,92,60,61,62,93,63,64,65,66,67,68,69,70,71,72,73,74,76,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,97,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,29,30,31,32,7,37,33,34,35,36,1,38,40,39]},"version":"4.6.0-dev.20211126"}
1
+ {"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/common/messages.gen.ts","../../src/common/interaction.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/resolve/index.d.ts"],"fileInfos":[{"version":"ca3c1cd7464b613bf148a1422cb3201fe083e08565a02dc99eaad0d2977c16a7","affectsGlobalScope":true,"impliedFormat":1},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true,"impliedFormat":1},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true,"impliedFormat":1},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true,"impliedFormat":1},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true,"impliedFormat":1},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true,"impliedFormat":1},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true,"impliedFormat":1},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true,"impliedFormat":1},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true,"impliedFormat":1},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true,"impliedFormat":1},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true,"impliedFormat":1},{"version":"ca06fa264234f5895ebfe13ec1f578ee1c18a0d02219a54c3cdad296686251cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true,"impliedFormat":1},"6e4591fbdda1e3267af1b30837f3f1ed63a433a012ac26ab0b306130c5cfa779","d823dfc1284a4a9d3ce9775f2b84a2ecf07d89ceb3c354cef144bb1fae485fa9","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"77f0b5c6a193a699c9f7d7fb0578e64e562d271afa740783665d2a827104a873","affectsGlobalScope":true,"impliedFormat":1},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"3e4624c306340ad303cc536a07004e81336c3f088308a9e4a9f4c957a3cda2fd","affectsGlobalScope":true,"impliedFormat":1},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","34ec1daf3566f26c43dbab380af0de1aac29166e57e4f9ef379a2f154e0cb290","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"249a2b90439cdfd51709539fbfa4dfe0791cbae6efce1e9b327ba8f8cd703f49","affectsGlobalScope":true,"impliedFormat":1},"2f60ac046e587e917d739f1edc77540eb0ec34f83090dae4ebd5f96c1c9578d4","a9b6b0f7b1e30359283b131ba6d1c51ee2d3601a2f12e1623141e6a1a60c92a5","aeee0090b38de0dd47ca9a79ad5c2d156e3e09d92306719b0b45a3e96098e564","7bac475dcdd9f7e4e9da934d32c305bc889c4ce3c8ac0ef45a93a8d670fff607","09416dd69576b03a3f485adf329a02f043e4a481e060ef5b208194e488d31fd9","8acf99b1c8682276a63ea5bb68433782715892726b97e4604a415e4e56bce41c",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},"3b145a2351f5cf16abf999c8d5f4481c74dffdc54ec1e9a89992e2622e1226c5","a907bf91df26df2400858ef75f749498fb5cf00062bf90a737ac3949cc07978d","d270fd4b565eda11a0a737c181892316b7a1ace06c7988d0246219c3df11db06","4275d5f964e7fc7afc18538e26b3748c207dd772998346d17f409749aa1f3a63",{"version":"59a638a504490fecaacf0020b9814b6abee37edb66047eb1ab9f7c2274bf1da0","affectsGlobalScope":true,"impliedFormat":1},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","8c4c1a64db28930732033c31418f817dcb9d09d706766707ae6d38f23faf0c53","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","556bf5c36deb62cffa1bf697c1789fe008ec82db0273025001db66732714e9d9","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true,"impliedFormat":1},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","653968fc1b35c5eb3d273d36fac1c1dc66f9537edf28f33485b8776bd956e23d",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","a381f079c4804442f179d742fdb2e495fe28d67a47cac673485f75ae2e77aeca","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true,"impliedFormat":1},"2af17363f8a062e3a8cd1b26030af0058b3f86e783f4fc6aa9f57247f240ebaa","06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","dfe08140492cdc135fb7fd9c4a652c05207b61a436906079b87da1d3111314bf","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","089e1f8603cbc35ab977c8dcc662eb754b82fca32ed1dfb16bd682726c2d5432","8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},"64d5585e08ad1ab194b18bf4e851f22a626eae33ac7312ca4ba90bb7ea7daf64","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede"],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[86],[57,58,86,93,94],[42,86],[45,86],[46,51,86],[47,57,58,65,74,85,86],[47,48,57,65,86],[49,86],[50,51,58,66,86],[51,74,82,86],[52,54,57,65,86],[53,86],[54,55,86],[56,57,86],[57,86],[57,58,59,74,85,86],[57,58,59,74,77,86],[86,90],[60,65,74,85,86],[57,58,60,61,65,74,82,85,86],[60,62,74,82,85,86],[42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],[57,63,86],[64,85,86],[54,57,65,74,86],[66,86],[67,86],[45,68,86],[69,84,86,90],[70,86],[71,86],[57,72,86],[72,73,86,88],[57,74,75,76,77,86],[74,76,86],[74,75,86],[77,86],[78,86],[57,80,81,86],[80,81,86],[51,65,74,82,86],[83,86],[65,84,86],[46,60,71,85,86],[51,86],[74,86,87],[86,88],[86,89],[46,51,57,59,68,74,85,86,88,90],[74,86,91],[86,93],[39,86]],"referencedMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"exportedModulesMap":[[41,1],[95,2],[96,1],[94,1],[42,3],[43,3],[45,4],[46,5],[47,6],[48,7],[49,8],[50,9],[51,10],[52,11],[53,12],[54,13],[55,13],[56,14],[57,15],[58,16],[59,17],[44,18],[92,1],[60,19],[61,20],[62,21],[93,22],[63,23],[64,24],[65,25],[66,26],[67,27],[68,28],[69,29],[70,30],[71,31],[72,32],[73,33],[74,34],[76,35],[75,36],[77,37],[78,38],[79,1],[80,39],[81,40],[82,41],[83,42],[84,43],[85,44],[86,45],[87,46],[88,47],[89,48],[90,49],[91,50],[97,51],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[29,1],[30,1],[31,1],[32,1],[7,1],[37,1],[33,1],[34,1],[35,1],[36,1],[1,1],[38,1],[40,52],[39,1]],"semanticDiagnosticsPerFile":[41,95,96,94,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,44,92,60,61,62,93,63,64,65,66,67,68,69,70,71,72,73,74,76,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,97,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,29,30,31,32,7,37,33,34,35,36,1,38,40,39]},"version":"4.6.0-dev.20211126"}
package/lib/index.d.ts CHANGED
@@ -37,7 +37,7 @@ export default class API {
37
37
  userAnonymousID(id: string): void;
38
38
  setMetadata(key: string, value: string): void;
39
39
  metadata(key: string, value: string): void;
40
- event(key: string, payload: any, issue?: boolean): void;
41
- issue(key: string, payload: any): void;
42
- handleError: (e: Error | ErrorEvent | PromiseRejectionEvent) => void;
40
+ event(key: string, payload?: any, issue?: boolean): void;
41
+ issue(key: string, payload?: any): void;
42
+ handleError: (e: Error | ErrorEvent | PromiseRejectionEvent, metadata?: Record<string, any>) => void;
43
43
  }
package/lib/index.js CHANGED
@@ -15,6 +15,8 @@ import Performance from './modules/performance.js';
15
15
  import Scroll from './modules/scroll.js';
16
16
  import Viewport from './modules/viewport.js';
17
17
  import CSSRules from './modules/cssrules.js';
18
+ import Focus from './modules/focus.js';
19
+ import Fonts from './modules/fonts.js';
18
20
  import ConstructedStyleSheets from './modules/constructedStyleSheets.js';
19
21
  import { IN_BROWSER, deprecationWarn, DOCS_HOST } from './utils.js';
20
22
  const DOCS_SETUP = '/installation/setup-or';
@@ -49,16 +51,17 @@ export default class API {
49
51
  constructor(options) {
50
52
  this.options = options;
51
53
  this.app = null;
52
- this.handleError = (e) => {
54
+ this.handleError = (e, metadata = {}) => {
53
55
  if (this.app === null) {
54
56
  return;
55
57
  }
56
58
  if (e instanceof Error) {
57
- this.app.send(getExceptionMessage(e, []));
59
+ const msg = getExceptionMessage(e, [], metadata);
60
+ this.app.send(msg);
58
61
  }
59
62
  else if (e instanceof ErrorEvent ||
60
63
  ('PromiseRejectionEvent' in window && e instanceof PromiseRejectionEvent)) {
61
- const msg = getExceptionMessageFromEvent(e);
64
+ const msg = getExceptionMessageFromEvent(e, undefined, metadata);
62
65
  if (msg != null) {
63
66
  this.app.send(msg);
64
67
  }
@@ -104,6 +107,8 @@ export default class API {
104
107
  Timing(app, options);
105
108
  Performance(app, options);
106
109
  Scroll(app);
110
+ Focus(app);
111
+ Fonts(app);
107
112
  window.__OPENREPLAY__ = this;
108
113
  if (options.autoResetOnWindowOpen) {
109
114
  const wOpen = window.open;
@@ -128,7 +133,7 @@ export default class API {
128
133
  // no-cors issue only with text/plain or not-set Content-Type
129
134
  // req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
130
135
  req.send(JSON.stringify({
131
- trackerVersion: '4.1.4',
136
+ trackerVersion: '4.1.6',
132
137
  projectKey: options.projectKey,
133
138
  doNotTrack,
134
139
  // TODO: add precise reason (an exact API missing)
@@ -211,7 +216,7 @@ export default class API {
211
216
  deprecationWarn("'metadata' method", "'setMetadata' method", '/');
212
217
  this.setMetadata(key, value);
213
218
  }
214
- event(key, payload, issue = false) {
219
+ event(key, payload = null, issue = false) {
215
220
  if (typeof key === 'string' && this.app !== null) {
216
221
  if (issue) {
217
222
  return this.issue(key, payload);
@@ -227,7 +232,7 @@ export default class API {
227
232
  }
228
233
  }
229
234
  }
230
- issue(key, payload) {
235
+ issue(key, payload = null) {
231
236
  if (typeof key === 'string' && this.app !== null) {
232
237
  try {
233
238
  payload = JSON.stringify(payload);
@@ -1,4 +1,4 @@
1
- import { TechnicalInfo, AdoptedSSReplaceURLBased, AdoptedSSInsertRuleURLBased, AdoptedSSAddOwner, AdoptedSSRemoveOwner, } from '../app/messages.gen.js';
1
+ import { AdoptedSSReplaceURLBased, AdoptedSSInsertRuleURLBased, AdoptedSSAddOwner, AdoptedSSRemoveOwner, } from '../app/messages.gen.js';
2
2
  import { isRootNode } from '../app/guards.js';
3
3
  function hasAdoptedSS(node) {
4
4
  return (isRootNode(node) &&
@@ -16,20 +16,16 @@ export default function (app) {
16
16
  return;
17
17
  }
18
18
  if (!hasAdoptedSS(document)) {
19
- app.attachStartCallback(() => {
20
- // MBTODO: pre-start sendQueue app
21
- app.send(TechnicalInfo('no_adopted_stylesheets', ''));
22
- });
23
19
  return;
24
20
  }
25
21
  const styleSheetIDMap = new Map();
26
22
  const adoptedStyleSheetsOwnings = new Map();
27
- const sendAdoptedStyleSheetsUpdate = (root) => {
23
+ const sendAdoptedStyleSheetsUpdate = (root) => setTimeout(() => {
28
24
  let nodeID = app.nodes.getID(root);
29
25
  if (root === document) {
30
26
  nodeID = 0; // main document doesn't have nodeID. ID count starts from the documentElement
31
27
  }
32
- if (!nodeID) {
28
+ if (nodeID === undefined) {
33
29
  return;
34
30
  }
35
31
  let pastOwning = adoptedStyleSheetsOwnings.get(nodeID);
@@ -43,8 +39,8 @@ export default function (app) {
43
39
  const init = !sheetID;
44
40
  if (!sheetID) {
45
41
  sheetID = nextID();
42
+ styleSheetIDMap.set(s, sheetID);
46
43
  }
47
- nowOwning.push(sheetID);
48
44
  if (!pastOwning.includes(sheetID)) {
49
45
  app.send(AdoptedSSAddOwner(sheetID, nodeID));
50
46
  }
@@ -54,6 +50,7 @@ export default function (app) {
54
50
  app.send(AdoptedSSInsertRuleURLBased(sheetID, rules[i].cssText, i, app.getBaseHref()));
55
51
  }
56
52
  }
53
+ nowOwning.push(sheetID);
57
54
  }
58
55
  for (const sheetID of pastOwning) {
59
56
  if (!nowOwning.includes(sheetID)) {
@@ -61,7 +58,13 @@ export default function (app) {
61
58
  }
62
59
  }
63
60
  adoptedStyleSheetsOwnings.set(nodeID, nowOwning);
64
- };
61
+ }, 20); // Misterious bug:
62
+ /* On the page https://explore.fast.design/components/fast-accordion
63
+ the only rule inside the only adoptedStyleSheet of the iframe-s document
64
+ gets changed during first milliseconds after the load.
65
+ Howerer, none of the documented methods (replace, insertRule) is triggered.
66
+ The rule is not substituted (remains the same object), however the text gets changed.
67
+ */
65
68
  function patchAdoptedStyleSheets(prototype) {
66
69
  const nativeAdoptedStyleSheetsDescriptor = Object.getOwnPropertyDescriptor(prototype, 'adoptedStyleSheets');
67
70
  if (nativeAdoptedStyleSheetsDescriptor) {
@@ -84,8 +87,8 @@ export default function (app) {
84
87
  }
85
88
  patchAdoptedStyleSheets(context.Document.prototype);
86
89
  patchAdoptedStyleSheets(context.ShadowRoot.prototype);
87
- //@ts-ignore TODO: configure ts (use necessary lib)
88
- const { insertRule, deleteRule, replace, replaceSync } = context.CSSStyleSheet.prototype;
90
+ //@ts-ignore TODO: upgrade ts to 4.8+
91
+ const { replace, replaceSync } = context.CSSStyleSheet.prototype;
89
92
  //@ts-ignore
90
93
  context.CSSStyleSheet.prototype.replace = function (text) {
91
94
  return replace.call(this, text).then((sheet) => {
@@ -106,7 +109,7 @@ export default function (app) {
106
109
  };
107
110
  };
108
111
  patchContext(window);
109
- app.observer.attachContextCallback(patchContext);
112
+ app.observer.attachContextCallback(app.safe(patchContext));
110
113
  app.attachStopCallback(() => {
111
114
  styleSheetIDMap.clear();
112
115
  adoptedStyleSheetsOwnings.clear();
@@ -10,7 +10,7 @@ export default function (app) {
10
10
  app.send(TechnicalInfo('no_stylesheet_prototype_in_window', ''));
11
11
  return;
12
12
  }
13
- const sendInserDeleteRule = app.safe((sheet, index, rule) => {
13
+ const sendInsertDeleteRule = app.safe((sheet, index, rule) => {
14
14
  const sheetID = styleSheetIDMap.get(sheet);
15
15
  if (!sheetID) {
16
16
  // OK-case. Sheet haven't been registered yet. Rules will be sent on registration.
@@ -50,15 +50,15 @@ export default function (app) {
50
50
  app.debug.warn('Rule index not found in', sheet, topmostRule);
51
51
  }
52
52
  });
53
- const patchContext = (context) => {
53
+ const patchContext = app.safe((context) => {
54
54
  const { insertRule, deleteRule } = context.CSSStyleSheet.prototype;
55
55
  const { insertRule: groupInsertRule, deleteRule: groupDeleteRule } = context.CSSGroupingRule.prototype;
56
56
  context.CSSStyleSheet.prototype.insertRule = function (rule, index = 0) {
57
- sendInserDeleteRule(this, index, rule);
57
+ sendInsertDeleteRule(this, index, rule);
58
58
  return insertRule.call(this, rule, index);
59
59
  };
60
60
  context.CSSStyleSheet.prototype.deleteRule = function (index) {
61
- sendInserDeleteRule(this, index);
61
+ sendInsertDeleteRule(this, index);
62
62
  return deleteRule.call(this, index);
63
63
  };
64
64
  context.CSSGroupingRule.prototype.insertRule = function (rule, index = 0) {
@@ -71,7 +71,7 @@ export default function (app) {
71
71
  sendReplaceGroupingRule(this);
72
72
  return result;
73
73
  };
74
- };
74
+ });
75
75
  patchContext(window);
76
76
  app.observer.attachContextCallback(patchContext);
77
77
  app.nodes.attachNodeCallback((node) => {
@@ -91,7 +91,7 @@ export default function (app) {
91
91
  app.send(AdoptedSSAddOwner(sheetID, nodeID));
92
92
  const rules = sheet.cssRules;
93
93
  for (let i = 0; i < rules.length; i++) {
94
- sendInserDeleteRule(sheet, i, rules[i].cssText);
94
+ sendInsertDeleteRule(sheet, i, rules[i].cssText);
95
95
  }
96
96
  });
97
97
  }
@@ -10,7 +10,7 @@ interface StackFrame {
10
10
  functionName?: string;
11
11
  source?: string;
12
12
  }
13
- export declare function getExceptionMessage(error: Error, fallbackStack: Array<StackFrame>): Message;
14
- export declare function getExceptionMessageFromEvent(e: ErrorEvent | PromiseRejectionEvent, context?: typeof globalThis): Message | null;
13
+ export declare function getExceptionMessage(error: Error, fallbackStack: Array<StackFrame>, metadata?: Record<string, any>): Message;
14
+ export declare function getExceptionMessageFromEvent(e: ErrorEvent | PromiseRejectionEvent, context?: typeof globalThis, metadata?: Record<string, any>): Message | null;
15
15
  export default function (app: App, opts: Partial<Options>): void;
16
16
  export {};
@@ -11,18 +11,18 @@ function getDefaultStack(e) {
11
11
  },
12
12
  ];
13
13
  }
14
- export function getExceptionMessage(error, fallbackStack) {
14
+ export function getExceptionMessage(error, fallbackStack, metadata = {}) {
15
15
  let stack = fallbackStack;
16
16
  try {
17
17
  stack = ErrorStackParser.parse(error);
18
18
  }
19
19
  catch (e) { }
20
- return JSException(error.name, error.message, JSON.stringify(stack));
20
+ return JSException(error.name, error.message, JSON.stringify(stack), JSON.stringify(metadata));
21
21
  }
22
- export function getExceptionMessageFromEvent(e, context = window) {
22
+ export function getExceptionMessageFromEvent(e, context = window, metadata = {}) {
23
23
  if (e instanceof ErrorEvent) {
24
24
  if (e.error instanceof Error) {
25
- return getExceptionMessage(e.error, getDefaultStack(e));
25
+ return getExceptionMessage(e.error, getDefaultStack(e), metadata);
26
26
  }
27
27
  else {
28
28
  let [name, message] = e.message.split(':');
@@ -30,12 +30,12 @@ export function getExceptionMessageFromEvent(e, context = window) {
30
30
  name = 'Error';
31
31
  message = e.message;
32
32
  }
33
- return JSException(name, message, JSON.stringify(getDefaultStack(e)));
33
+ return JSException(name, message, JSON.stringify(getDefaultStack(e)), JSON.stringify(metadata));
34
34
  }
35
35
  }
36
36
  else if ('PromiseRejectionEvent' in context && e instanceof context.PromiseRejectionEvent) {
37
37
  if (e.reason instanceof Error) {
38
- return getExceptionMessage(e.reason, []);
38
+ return getExceptionMessage(e.reason, [], metadata);
39
39
  }
40
40
  else {
41
41
  let message;
@@ -45,7 +45,7 @@ export function getExceptionMessageFromEvent(e, context = window) {
45
45
  catch (_) {
46
46
  message = String(e.reason);
47
47
  }
48
- return JSException('Unhandled Promise Rejection', message, '[]');
48
+ return JSException('Unhandled Promise Rejection', message, '[]', JSON.stringify(metadata));
49
49
  }
50
50
  }
51
51
  return null;
@@ -65,7 +65,7 @@ export default function (app, opts) {
65
65
  app.attachEventListener(context, 'error', handler);
66
66
  }
67
67
  if (options.captureExceptions) {
68
- app.observer.attachContextCallback(patchContext);
68
+ app.observer.attachContextCallback(patchContext); // TODO: attach once-per-iframe (?)
69
69
  patchContext(window);
70
70
  }
71
71
  }
@@ -0,0 +1,2 @@
1
+ import type App from '../app/index.js';
2
+ export default function (app: App): void;
@@ -0,0 +1,42 @@
1
+ import { isNode, hasTag } from '../app/guards.js';
2
+ import { SetNodeFocus } from '../app/messages.gen.js';
3
+ export default function (app) {
4
+ function sendSetNodeFocus(n) {
5
+ const id = app.nodes.getID(n);
6
+ if (id !== undefined) {
7
+ app.send(SetNodeFocus(id));
8
+ }
9
+ }
10
+ let blurred = false;
11
+ app.nodes.attachNodeCallback((node) => {
12
+ if (!hasTag(node, 'BODY')) {
13
+ return;
14
+ }
15
+ app.nodes.attachNodeListener(node, 'focus', (e) => {
16
+ if (!isNode(e.target)) {
17
+ return;
18
+ }
19
+ sendSetNodeFocus(e.target);
20
+ blurred = false;
21
+ });
22
+ app.nodes.attachNodeListener(node, 'blur', (e) => {
23
+ if (e.relatedTarget === null) {
24
+ blurred = true;
25
+ setTimeout(() => {
26
+ if (blurred) {
27
+ app.send(SetNodeFocus(-1));
28
+ }
29
+ }, 0);
30
+ }
31
+ });
32
+ });
33
+ app.attachStartCallback(() => {
34
+ let elem = document.activeElement;
35
+ while (elem && hasTag(elem, 'IFRAME') && elem.contentDocument) {
36
+ elem = elem.contentDocument.activeElement;
37
+ }
38
+ if (elem && elem !== elem.ownerDocument.body) {
39
+ sendSetNodeFocus(elem);
40
+ }
41
+ }, true);
42
+ }
@@ -0,0 +1,2 @@
1
+ import type App from '../app/index.js';
2
+ export default function (app: App): void;