@openreplay/tracker 4.0.1 → 4.1.0

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 (60) hide show
  1. package/cjs/app/guards.d.ts +1 -0
  2. package/cjs/app/guards.js +6 -1
  3. package/cjs/app/index.d.ts +1 -1
  4. package/cjs/app/index.js +14 -8
  5. package/cjs/app/messages.gen.js +1 -0
  6. package/cjs/app/nodes.d.ts +1 -1
  7. package/cjs/app/nodes.js +3 -5
  8. package/cjs/app/observer/iframe_observer.js +1 -0
  9. package/cjs/app/observer/iframe_offsets.d.ts +8 -0
  10. package/cjs/app/observer/iframe_offsets.js +59 -0
  11. package/cjs/app/observer/observer.js +4 -4
  12. package/cjs/app/observer/top_observer.d.ts +2 -4
  13. package/cjs/app/observer/top_observer.js +11 -21
  14. package/cjs/app/sanitizer.d.ts +10 -4
  15. package/cjs/app/sanitizer.js +33 -15
  16. package/cjs/app/session.js +1 -1
  17. package/cjs/common/messages.gen.js +1 -0
  18. package/cjs/index.d.ts +1 -0
  19. package/cjs/index.js +6 -6
  20. package/cjs/modules/constructedStyleSheets.d.ts +4 -0
  21. package/cjs/modules/{adoptedStyleSheets.js → constructedStyleSheets.js} +21 -20
  22. package/cjs/modules/cssrules.js +65 -18
  23. package/cjs/modules/img.js +27 -19
  24. package/cjs/modules/input.js +2 -2
  25. package/cjs/modules/mouse.js +11 -7
  26. package/cjs/modules/scroll.js +32 -12
  27. package/cjs/utils.d.ts +5 -3
  28. package/cjs/utils.js +18 -13
  29. package/lib/app/guards.d.ts +1 -0
  30. package/lib/app/guards.js +4 -0
  31. package/lib/app/index.d.ts +1 -1
  32. package/lib/app/index.js +14 -8
  33. package/lib/app/messages.gen.js +1 -0
  34. package/lib/app/nodes.d.ts +1 -1
  35. package/lib/app/nodes.js +3 -5
  36. package/lib/app/observer/iframe_observer.js +1 -0
  37. package/lib/app/observer/iframe_offsets.d.ts +8 -0
  38. package/lib/app/observer/iframe_offsets.js +56 -0
  39. package/lib/app/observer/observer.js +4 -4
  40. package/lib/app/observer/top_observer.d.ts +2 -4
  41. package/lib/app/observer/top_observer.js +11 -21
  42. package/lib/app/sanitizer.d.ts +10 -4
  43. package/lib/app/sanitizer.js +32 -15
  44. package/lib/app/session.js +1 -1
  45. package/lib/common/messages.gen.js +1 -0
  46. package/lib/common/tsconfig.tsbuildinfo +1 -1
  47. package/lib/index.d.ts +1 -0
  48. package/lib/index.js +4 -5
  49. package/lib/modules/constructedStyleSheets.d.ts +4 -0
  50. package/lib/modules/{adoptedStyleSheets.js → constructedStyleSheets.js} +20 -21
  51. package/lib/modules/cssrules.js +67 -19
  52. package/lib/modules/img.js +28 -20
  53. package/lib/modules/input.js +3 -3
  54. package/lib/modules/mouse.js +11 -7
  55. package/lib/modules/scroll.js +33 -13
  56. package/lib/utils.d.ts +5 -3
  57. package/lib/utils.js +17 -11
  58. package/package.json +1 -1
  59. package/cjs/modules/adoptedStyleSheets.d.ts +0 -2
  60. package/lib/modules/adoptedStyleSheets.d.ts +0 -2
@@ -1,4 +1,5 @@
1
1
  // Auto-generated, do not edit
2
+ /* eslint-disable */
2
3
  export function BatchMetadata(version, pageNo, firstIndex, timestamp, location) {
3
4
  return [
4
5
  81 /* BatchMetadata */,
@@ -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
- attachElementListener(type: string, node: Element, elementListener: EventListener): void;
9
+ attachNodeListener(node: Node, type: string, listener: EventListener): 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,20 +9,18 @@ export default class Nodes {
9
9
  attachNodeCallback(nodeCallback) {
10
10
  this.nodeCallbacks.push(nodeCallback);
11
11
  }
12
- // TODO: what is the difference with app.attachEventListener. can we use only one of those?
13
- attachElementListener(type, node, elementListener) {
12
+ attachNodeListener(node, type, listener) {
14
13
  const id = this.getID(node);
15
14
  if (id === undefined) {
16
15
  return;
17
16
  }
18
- node.addEventListener(type, elementListener);
17
+ node.addEventListener(type, listener);
19
18
  let listeners = this.elementListeners.get(id);
20
19
  if (listeners === undefined) {
21
20
  listeners = [];
22
21
  this.elementListeners.set(id, listeners);
23
- return;
24
22
  }
25
- listeners.push([type, elementListener]);
23
+ listeners.push([type, listener]);
26
24
  }
27
25
  registerNode(node) {
28
26
  let id = node[this.node_id];
@@ -9,6 +9,7 @@ export default class IFrameObserver extends Observer {
9
9
  } //log TODO common app.logger
10
10
  // Have to observe document, because the inner <html> might be changed
11
11
  this.observeRoot(doc, (docID) => {
12
+ //MBTODO: do not send if empty (send on load? it might be in-place iframe, like our replayer, which does not get loaded)
12
13
  if (docID === undefined) {
13
14
  console.log('OpenReplay: Iframe document not bound');
14
15
  return;
@@ -0,0 +1,8 @@
1
+ export declare type Offset = [/*left:*/ number, /*top: */ number];
2
+ export default class IFrameOffsets {
3
+ private readonly states;
4
+ private calcOffset;
5
+ getDocumentOffset(doc: Document): Offset;
6
+ observe(iFrame: HTMLIFrameElement): void;
7
+ clear(): void;
8
+ }
@@ -0,0 +1,56 @@
1
+ // Le truc - for defining an absolute offset for (nested) iframe documents. (To track mouse movments)
2
+ export default class IFrameOffsets {
3
+ constructor() {
4
+ this.states = new Map();
5
+ }
6
+ calcOffset(state) {
7
+ let parLeft = 0, parTop = 0;
8
+ if (state.parent) {
9
+ ;
10
+ [parLeft, parTop] = this.calcOffset(state.parent);
11
+ }
12
+ if (!state.offset) {
13
+ const { left, top } = state.iFrame.getBoundingClientRect();
14
+ state.offset = [left, top];
15
+ }
16
+ const [left, top] = state.offset;
17
+ return [parLeft + left, parTop + top]; // TODO: store absolute sum, invalidate whole subtree. Otherwise it is summated on each mousemove
18
+ }
19
+ getDocumentOffset(doc) {
20
+ const state = this.states.get(doc);
21
+ if (!state) {
22
+ return [0, 0];
23
+ } // topmost doc
24
+ return this.calcOffset(state);
25
+ }
26
+ observe(iFrame) {
27
+ var _a;
28
+ const doc = iFrame.contentDocument;
29
+ if (!doc) {
30
+ return;
31
+ }
32
+ const parentDoc = iFrame.ownerDocument;
33
+ const parentState = this.states.get(parentDoc);
34
+ const state = {
35
+ offset: null,
36
+ iFrame,
37
+ parent: parentState || null,
38
+ clear: () => {
39
+ var _a;
40
+ parentDoc.removeEventListener('scroll', invalidateOffset);
41
+ (_a = parentDoc.defaultView) === null || _a === void 0 ? void 0 : _a.removeEventListener('resize', invalidateOffset);
42
+ },
43
+ };
44
+ const invalidateOffset = () => {
45
+ state.offset = null;
46
+ };
47
+ // anything more reliable? This does not cover all cases (layout changes are ignored, for ex.)
48
+ parentDoc.addEventListener('scroll', invalidateOffset);
49
+ (_a = parentDoc.defaultView) === null || _a === void 0 ? void 0 : _a.addEventListener('resize', invalidateOffset);
50
+ this.states.set(doc, state);
51
+ }
52
+ clear() {
53
+ this.states.forEach((s) => s.clear());
54
+ this.states.clear();
55
+ }
56
+ }
@@ -221,7 +221,7 @@ export default class Observer {
221
221
  return false;
222
222
  }
223
223
  this.app.sanitizer.handleNode(id, parentID, node);
224
- if (this.app.sanitizer.isMaskedContainer(parentID)) {
224
+ if (this.app.sanitizer.isHidden(parentID)) {
225
225
  return false;
226
226
  }
227
227
  }
@@ -249,12 +249,12 @@ export default class Observer {
249
249
  if (isElementNode(node)) {
250
250
  let el = node;
251
251
  if (parentID !== undefined) {
252
- if (this.app.sanitizer.isMaskedContainer(id)) {
252
+ if (this.app.sanitizer.isHidden(id)) {
253
253
  const width = el.clientWidth;
254
254
  const height = el.clientHeight;
255
255
  el = node.cloneNode();
256
- el.style.width = width + 'px';
257
- el.style.height = height + 'px';
256
+ el.style.width = `${width}px`;
257
+ el.style.height = `${height}px`;
258
258
  }
259
259
  this.app.send(CreateElementNode(id, parentID, index, el.tagName, isSVGElement(node)));
260
260
  }
@@ -1,16 +1,14 @@
1
1
  import Observer from './observer.js';
2
+ import { Offset } from './iframe_offsets.js';
2
3
  import App from '../index.js';
3
4
  export interface Options {
4
5
  captureIFrames: boolean;
5
6
  }
6
7
  declare type Context = Window & typeof globalThis;
7
8
  declare type ContextCallback = (context: Context) => void;
8
- declare type Offset = {
9
- top: number;
10
- left: number;
11
- };
12
9
  export default class TopObserver extends Observer {
13
10
  private readonly options;
11
+ private readonly iframeOffsets;
14
12
  constructor(app: App, options: Partial<Options>);
15
13
  private readonly contextCallbacks;
16
14
  private readonly contextsSet;
@@ -2,16 +2,14 @@ import Observer from './observer.js';
2
2
  import { isElementNode, hasTag } from '../guards.js';
3
3
  import IFrameObserver from './iframe_observer.js';
4
4
  import ShadowRootObserver from './shadow_root_observer.js';
5
+ import IFrameOffsets from './iframe_offsets.js';
5
6
  import { CreateDocument } from '../messages.gen.js';
6
7
  import { IN_BROWSER, hasOpenreplayAttribute } from '../../utils.js';
7
- function isPatchedDocument(doc) {
8
- // @ts-ignore
9
- return typeof doc.__openreplay__getOffset === 'function';
10
- }
11
8
  const attachShadowNativeFn = IN_BROWSER ? Element.prototype.attachShadow : () => new ShadowRoot();
12
9
  export default class TopObserver extends Observer {
13
10
  constructor(app, options) {
14
11
  super(app, true);
12
+ this.iframeOffsets = new IFrameOffsets();
15
13
  this.contextCallbacks = [];
16
14
  // Attached once per Tracker instance
17
15
  this.contextsSet = new Set();
@@ -38,17 +36,14 @@ export default class TopObserver extends Observer {
38
36
  attachContextCallback(cb) {
39
37
  this.contextCallbacks.push(cb);
40
38
  }
41
- // Le truc
42
39
  getDocumentOffset(doc) {
43
- if (isPatchedDocument(doc)) {
44
- return doc.__openreplay__getOffset();
45
- }
46
- return { top: 0, left: 0 };
40
+ return this.iframeOffsets.getDocumentOffset(doc);
47
41
  }
48
42
  handleIframe(iframe) {
49
43
  let doc = null;
50
- let win = null;
51
- const handle = this.app.safe(() => {
44
+ // setTimeout is required. Otherwise some event listeners (scroll, mousemove) applied in modules
45
+ // do not work on the iframe document when it 've been loaded dynamically ((why?))
46
+ const handle = this.app.safe(() => setTimeout(() => {
52
47
  const id = this.app.nodes.getID(iframe);
53
48
  if (id === undefined) {
54
49
  //log
@@ -59,27 +54,21 @@ export default class TopObserver extends Observer {
59
54
  if (currentDoc && currentDoc !== doc) {
60
55
  const observer = new IFrameObserver(this.app);
61
56
  this.iframeObservers.push(observer);
62
- observer.observe(iframe);
57
+ observer.observe(iframe); // TODO: call unregisterNode for the previous doc if present (incapsulate: one iframe - one observer)
63
58
  doc = currentDoc;
64
- doc.__openreplay__getOffset = () => {
65
- const { top, left } = this.getDocumentOffset(iframe.ownerDocument);
66
- return {
67
- top: iframe.offsetTop + top,
68
- left: iframe.offsetLeft + left,
69
- };
70
- };
59
+ this.iframeOffsets.observe(iframe);
71
60
  }
72
61
  if (currentWin &&
73
62
  // Sometimes currentWin.window is null (not in specification). Such window object is not functional
74
63
  currentWin === currentWin.window &&
75
64
  !this.contextsSet.has(currentWin) // for each context callbacks called once per Tracker (TopObserver) instance
65
+ //TODO: more explicit logic
76
66
  ) {
77
67
  this.contextsSet.add(currentWin);
78
68
  //@ts-ignore https://github.com/microsoft/TypeScript/issues/41684
79
69
  this.contextCallbacks.forEach((cb) => cb(currentWin));
80
- win = currentWin;
81
70
  }
82
- });
71
+ }, 0));
83
72
  iframe.addEventListener('load', handle); // why app.attachEventListener not working?
84
73
  handle();
85
74
  }
@@ -108,6 +97,7 @@ export default class TopObserver extends Observer {
108
97
  }, window.document.documentElement);
109
98
  }
110
99
  disconnect() {
100
+ this.iframeOffsets.clear();
111
101
  Element.prototype.attachShadow = attachShadowNativeFn;
112
102
  this.iframeObservers.forEach((o) => o.disconnect());
113
103
  this.iframeObservers = [];
@@ -1,18 +1,24 @@
1
1
  import type App from './index.js';
2
+ export declare enum SanitizeLevel {
3
+ Plain = 0,
4
+ Obscured = 1,
5
+ Hidden = 2
6
+ }
2
7
  export interface Options {
3
8
  obscureTextEmails: boolean;
4
9
  obscureTextNumbers: boolean;
10
+ domSanitizer?: (node: Element) => SanitizeLevel;
5
11
  }
6
12
  export default class Sanitizer {
7
13
  private readonly app;
8
- private readonly masked;
9
- private readonly maskedContainers;
14
+ private readonly obscured;
15
+ private readonly hidden;
10
16
  private readonly options;
11
17
  constructor(app: App, options: Partial<Options>);
12
18
  handleNode(id: number, parentID: number, node: Node): void;
13
19
  sanitize(id: number, data: string): string;
14
- isMasked(id: number): boolean;
15
- isMaskedContainer(id: number): boolean;
20
+ isObscured(id: number): boolean;
21
+ isHidden(id: number): boolean;
16
22
  getInnerTextSecure(el: HTMLElement): string;
17
23
  clear(): void;
18
24
  }
@@ -1,27 +1,44 @@
1
1
  import { stars, hasOpenreplayAttribute } from '../utils.js';
2
2
  import { isElementNode } from './guards.js';
3
+ export var SanitizeLevel;
4
+ (function (SanitizeLevel) {
5
+ SanitizeLevel[SanitizeLevel["Plain"] = 0] = "Plain";
6
+ SanitizeLevel[SanitizeLevel["Obscured"] = 1] = "Obscured";
7
+ SanitizeLevel[SanitizeLevel["Hidden"] = 2] = "Hidden";
8
+ })(SanitizeLevel || (SanitizeLevel = {}));
3
9
  export default class Sanitizer {
4
10
  constructor(app, options) {
5
11
  this.app = app;
6
- this.masked = new Set();
7
- this.maskedContainers = new Set();
12
+ this.obscured = new Set();
13
+ this.hidden = new Set();
8
14
  this.options = Object.assign({
9
15
  obscureTextEmails: true,
10
16
  obscureTextNumbers: false,
11
17
  }, options);
12
18
  }
13
19
  handleNode(id, parentID, node) {
14
- if (this.masked.has(parentID) ||
15
- (isElementNode(node) && hasOpenreplayAttribute(node, 'masked'))) {
16
- this.masked.add(id);
20
+ if (this.obscured.has(parentID) ||
21
+ (isElementNode(node) &&
22
+ (hasOpenreplayAttribute(node, 'masked') || hasOpenreplayAttribute(node, 'obscured')))) {
23
+ this.obscured.add(id);
17
24
  }
18
- if (this.maskedContainers.has(parentID) ||
19
- (isElementNode(node) && hasOpenreplayAttribute(node, 'htmlmasked'))) {
20
- this.maskedContainers.add(id);
25
+ if (this.hidden.has(parentID) ||
26
+ (isElementNode(node) &&
27
+ (hasOpenreplayAttribute(node, 'htmlmasked') || hasOpenreplayAttribute(node, 'hidden')))) {
28
+ this.hidden.add(id);
29
+ }
30
+ if (this.options.domSanitizer !== undefined && isElementNode(node)) {
31
+ const sanitizeLevel = this.options.domSanitizer(node);
32
+ if (sanitizeLevel === SanitizeLevel.Obscured) {
33
+ this.obscured.add(id);
34
+ }
35
+ if (sanitizeLevel === SanitizeLevel.Hidden) {
36
+ this.hidden.add(id);
37
+ }
21
38
  }
22
39
  }
23
40
  sanitize(id, data) {
24
- if (this.masked.has(id)) {
41
+ if (this.obscured.has(id)) {
25
42
  // TODO: is it the best place to put trim() ? Might trimmed spaces be considered in layout in certain cases?
26
43
  return data
27
44
  .trim()
@@ -35,11 +52,11 @@ export default class Sanitizer {
35
52
  }
36
53
  return data;
37
54
  }
38
- isMasked(id) {
39
- return this.masked.has(id);
55
+ isObscured(id) {
56
+ return this.obscured.has(id);
40
57
  }
41
- isMaskedContainer(id) {
42
- return this.maskedContainers.has(id);
58
+ isHidden(id) {
59
+ return this.hidden.has(id);
43
60
  }
44
61
  getInnerTextSecure(el) {
45
62
  const id = this.app.nodes.getID(el);
@@ -49,7 +66,7 @@ export default class Sanitizer {
49
66
  return this.sanitize(id, el.innerText);
50
67
  }
51
68
  clear() {
52
- this.masked.clear();
53
- this.maskedContainers.clear();
69
+ this.obscured.clear();
70
+ this.hidden.clear();
54
71
  }
55
72
  }
@@ -76,7 +76,7 @@ export default class Session {
76
76
  let pageNoStr = '100500'; // back-compat for sessionToken
77
77
  if (hashParts.length == 2) {
78
78
  ;
79
- [token, pageNoStr] = hashParts;
79
+ [pageNoStr, token] = hashParts;
80
80
  }
81
81
  if (!pageNoStr || !token) {
82
82
  return;
@@ -1,2 +1,3 @@
1
1
  // Auto-generated, do not edit
2
+ /* eslint-disable */
2
3
  export {};
@@ -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},"01ec15f8bc58fbddf7a56720f7b4c05cc9bc97489975216bdcfb151a37eae3f3","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","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"}
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"}
package/lib/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import App from './app/index.js';
2
2
  export { default as App } from './app/index.js';
3
3
  import * as _Messages from './app/messages.gen.js';
4
4
  export declare const Messages: typeof _Messages;
5
+ export { SanitizeLevel } from './app/sanitizer.js';
5
6
  import type { Options as AppOptions } from './app/index.js';
6
7
  import type { Options as ConsoleOptions } from './modules/console.js';
7
8
  import type { Options as ExceptionOptions } from './modules/exception.js';
package/lib/index.js CHANGED
@@ -3,6 +3,7 @@ export { default as App } from './app/index.js';
3
3
  import { UserAnonymousID, RawCustomEvent, CustomIssue } from './app/messages.gen.js';
4
4
  import * as _Messages from './app/messages.gen.js';
5
5
  export const Messages = _Messages;
6
+ export { SanitizeLevel } from './app/sanitizer.js';
6
7
  import Connection from './modules/connection.js';
7
8
  import Console from './modules/console.js';
8
9
  import Exception, { getExceptionMessageFromEvent, getExceptionMessage, } from './modules/exception.js';
@@ -14,7 +15,7 @@ import Performance from './modules/performance.js';
14
15
  import Scroll from './modules/scroll.js';
15
16
  import Viewport from './modules/viewport.js';
16
17
  import CSSRules from './modules/cssrules.js';
17
- import AdoptedStyleSheets from './modules/adoptedStyleSheets.js';
18
+ import ConstructedStyleSheets from './modules/constructedStyleSheets.js';
18
19
  import { IN_BROWSER, deprecationWarn, DOCS_HOST } from './utils.js';
19
20
  const DOCS_SETUP = '/installation/setup-or';
20
21
  function processOptions(obj) {
@@ -93,7 +94,7 @@ export default class API {
93
94
  if (app !== null) {
94
95
  Viewport(app);
95
96
  CSSRules(app);
96
- AdoptedStyleSheets(app);
97
+ ConstructedStyleSheets(app);
97
98
  Connection(app);
98
99
  Console(app, options);
99
100
  Exception(app, options);
@@ -159,9 +160,7 @@ export default class API {
159
160
  return;
160
161
  }
161
162
  this.app.stop();
162
- const sessionHash = this.app.session.getSessionHash();
163
- this.app.session.reset();
164
- return sessionHash;
163
+ return this.app.session.getSessionHash();
165
164
  }
166
165
  getSessionToken() {
167
166
  if (this.app === null) {
@@ -0,0 +1,4 @@
1
+ import type App from '../app/index.js';
2
+ export declare function nextID(): number;
3
+ export declare const styleSheetIDMap: Map<CSSStyleSheet, number>;
4
+ export default function (app: App | null): void;
@@ -1,10 +1,16 @@
1
- import { TechnicalInfo, AdoptedSSReplaceURLBased, AdoptedSSInsertRuleURLBased, AdoptedSSDeleteRule, AdoptedSSAddOwner, AdoptedSSRemoveOwner, } from '../app/messages.gen.js';
1
+ import { TechnicalInfo, 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) &&
5
5
  // @ts-ignore
6
6
  !!node.adoptedStyleSheets);
7
7
  }
8
+ // TODO: incapsulate to be init-ed on-start and join with cssrules.ts under one folder
9
+ let _id = 0xf;
10
+ export function nextID() {
11
+ return _id++;
12
+ }
13
+ export const styleSheetIDMap = new Map();
8
14
  export default function (app) {
9
15
  if (app === null) {
10
16
  return;
@@ -16,10 +22,9 @@ export default function (app) {
16
22
  });
17
23
  return;
18
24
  }
19
- let nextID = 0xf;
20
25
  const styleSheetIDMap = new Map();
21
26
  const adoptedStyleSheetsOwnings = new Map();
22
- const updateAdoptedStyleSheets = (root) => {
27
+ const sendAdoptedStyleSheetsUpdate = (root) => {
23
28
  let nodeID = app.nodes.getID(root);
24
29
  if (root === document) {
25
30
  nodeID = 0; // main document doesn't have nodeID. ID count starts from the documentElement
@@ -37,7 +42,7 @@ export default function (app) {
37
42
  let sheetID = styleSheetIDMap.get(s);
38
43
  const init = !sheetID;
39
44
  if (!sheetID) {
40
- sheetID = ++nextID;
45
+ sheetID = nextID();
41
46
  }
42
47
  nowOwning.push(sheetID);
43
48
  if (!pastOwning.includes(sheetID)) {
@@ -63,12 +68,20 @@ export default function (app) {
63
68
  Object.defineProperty(prototype, 'adoptedStyleSheets', Object.assign(Object.assign({}, nativeAdoptedStyleSheetsDescriptor), { set: function (value) {
64
69
  // @ts-ignore
65
70
  const retVal = nativeAdoptedStyleSheetsDescriptor.set.call(this, value);
66
- updateAdoptedStyleSheets(this);
71
+ sendAdoptedStyleSheetsUpdate(this);
67
72
  return retVal;
68
73
  } }));
69
74
  }
70
75
  }
71
76
  const patchContext = (context) => {
77
+ // @ts-ignore
78
+ if (context.__openreplay_adpss_patched__) {
79
+ return;
80
+ }
81
+ else {
82
+ // @ts-ignore
83
+ context.__openreplay_adpss_patched__ = true;
84
+ }
72
85
  patchAdoptedStyleSheets(context.Document.prototype);
73
86
  patchAdoptedStyleSheets(context.ShadowRoot.prototype);
74
87
  //@ts-ignore TODO: configure ts (use necessary lib)
@@ -91,20 +104,6 @@ export default function (app) {
91
104
  }
92
105
  return replaceSync.call(this, text);
93
106
  };
94
- context.CSSStyleSheet.prototype.insertRule = function (rule, index = 0) {
95
- const sheetID = styleSheetIDMap.get(this);
96
- if (sheetID) {
97
- app.send(AdoptedSSInsertRuleURLBased(sheetID, rule, index, app.getBaseHref()));
98
- }
99
- return insertRule.call(this, rule, index);
100
- };
101
- context.CSSStyleSheet.prototype.deleteRule = function (index) {
102
- const sheetID = styleSheetIDMap.get(this);
103
- if (sheetID) {
104
- app.send(AdoptedSSDeleteRule(sheetID, index));
105
- }
106
- return deleteRule.call(this, index);
107
- };
108
107
  };
109
108
  patchContext(window);
110
109
  app.observer.attachContextCallback(patchContext);
@@ -114,11 +113,11 @@ export default function (app) {
114
113
  });
115
114
  // So far main Document is not triggered with nodeCallbacks
116
115
  app.attachStartCallback(() => {
117
- updateAdoptedStyleSheets(document);
116
+ sendAdoptedStyleSheetsUpdate(document);
118
117
  });
119
118
  app.nodes.attachNodeCallback((node) => {
120
119
  if (hasAdoptedSS(node)) {
121
- updateAdoptedStyleSheets(node);
120
+ sendAdoptedStyleSheetsUpdate(node);
122
121
  }
123
122
  });
124
123
  }