@openreplay/tracker 3.3.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,38 +1,42 @@
1
- import { stars, hasOpenreplayAttribute, getBaseURI } from '../utils';
2
- import { CreateDocument, CreateElementNode, CreateTextNode, SetNodeData, SetCSSDataURLBased, SetNodeAttribute, SetNodeAttributeURLBased, RemoveNodeAttribute, MoveNode, RemoveNode, } from '../messages';
1
+ import { stars, hasOpenreplayAttribute } from '../utils';
2
+ import { CreateDocument, CreateElementNode, CreateTextNode, SetNodeData, SetCSSDataURLBased, SetNodeAttribute, SetNodeAttributeURLBased, RemoveNodeAttribute, MoveNode, RemoveNode, CreateIFrameDocument, } from '../messages';
3
3
  function isSVGElement(node) {
4
4
  return node.namespaceURI === 'http://www.w3.org/2000/svg';
5
5
  }
6
- function isIgnored(node) {
7
- if (node instanceof Text) {
8
- return false;
9
- }
10
- if (!(node instanceof Element)) {
11
- return true;
12
- }
13
- const tag = node.tagName.toUpperCase();
14
- if (tag === 'LINK') {
15
- const rel = node.getAttribute('rel');
16
- const as = node.getAttribute('as');
17
- return !((rel === null || rel === void 0 ? void 0 : rel.includes('stylesheet')) || as === "style" || as === "font");
18
- }
19
- return (tag === 'SCRIPT' ||
20
- tag === 'NOSCRIPT' ||
21
- tag === 'META' ||
22
- tag === 'TITLE' ||
23
- tag === 'BASE');
24
- }
25
6
  export default class Observer {
26
- constructor(app, opts) {
7
+ constructor(app, options, context = window) {
27
8
  this.app = app;
28
- this.options = opts;
9
+ this.options = options;
10
+ this.context = context;
11
+ this.iframeObservers = [];
29
12
  this.observer = new MutationObserver(this.app.safe((mutations) => {
13
+ var _a;
30
14
  for (const mutation of mutations) {
31
15
  const target = mutation.target;
32
- if (isIgnored(target) || !document.contains(target)) {
16
+ const type = mutation.type;
17
+ // Special case
18
+ // Document 'childList' might happen in case of iframe.
19
+ // TODO: generalize as much as possible
20
+ if (this.isInstance(target, Document)
21
+ && type === 'childList'
22
+ //&& new Array(mutation.addedNodes).some(node => this.isInstance(node, HTMLHtmlElement))
23
+ ) {
24
+ const parentFrame = (_a = target.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement;
25
+ if (!parentFrame) {
26
+ continue;
27
+ }
28
+ this.bindTree(target.documentElement);
29
+ const frameID = this.app.nodes.getID(parentFrame);
30
+ const docID = this.app.nodes.getID(target.documentElement);
31
+ if (frameID === undefined || docID === undefined) {
32
+ continue;
33
+ }
34
+ this.app.send(CreateIFrameDocument(frameID, docID));
35
+ continue;
36
+ }
37
+ if (this.isIgnored(target) || !context.document.contains(target)) {
33
38
  continue;
34
39
  }
35
- const type = mutation.type;
36
40
  if (type === 'childList') {
37
41
  for (let i = 0; i < mutation.removedNodes.length; i++) {
38
42
  this.bindTree(mutation.removedNodes[i]);
@@ -83,6 +87,39 @@ export default class Observer {
83
87
  this.textSet.clear();
84
88
  this.textMasked.clear();
85
89
  }
90
+ // TODO: we need a type expert here so we won't have to ignore the lines
91
+ isInstance(node, constr) {
92
+ let context = this.context;
93
+ while (context.parent && context.parent !== context) {
94
+ // @ts-ignore
95
+ if (node instanceof context[constr.name]) {
96
+ return true;
97
+ }
98
+ // @ts-ignore
99
+ context = context.parent;
100
+ }
101
+ // @ts-ignore
102
+ return node instanceof context[constr.name];
103
+ }
104
+ isIgnored(node) {
105
+ if (this.isInstance(node, Text)) {
106
+ return false;
107
+ }
108
+ if (!this.isInstance(node, Element)) {
109
+ return true;
110
+ }
111
+ const tag = node.tagName.toUpperCase();
112
+ if (tag === 'LINK') {
113
+ const rel = node.getAttribute('rel');
114
+ const as = node.getAttribute('as');
115
+ return !((rel === null || rel === void 0 ? void 0 : rel.includes('stylesheet')) || as === "style" || as === "font");
116
+ }
117
+ return (tag === 'SCRIPT' ||
118
+ tag === 'NOSCRIPT' ||
119
+ tag === 'META' ||
120
+ tag === 'TITLE' ||
121
+ tag === 'BASE');
122
+ }
86
123
  sendNodeAttribute(id, node, name, value) {
87
124
  if (isSVGElement(node)) {
88
125
  if (name.substr(0, 6) === 'xlink:') {
@@ -95,7 +132,7 @@ export default class Observer {
95
132
  if (value.length > 1e5) {
96
133
  value = '';
97
134
  }
98
- this.app.send(new SetNodeAttributeURLBased(id, name, value, getBaseURI()));
135
+ this.app.send(new SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
99
136
  }
100
137
  else {
101
138
  this.app.send(new SetNodeAttribute(id, name, value));
@@ -111,7 +148,7 @@ export default class Observer {
111
148
  return;
112
149
  }
113
150
  if (name === 'value' &&
114
- node instanceof HTMLInputElement &&
151
+ this.isInstance(node, HTMLInputElement) &&
115
152
  node.type !== 'button' &&
116
153
  node.type !== 'reset' &&
117
154
  node.type !== 'submit') {
@@ -121,8 +158,8 @@ export default class Observer {
121
158
  this.app.send(new RemoveNodeAttribute(id, name));
122
159
  return;
123
160
  }
124
- if (name === 'style' || name === 'href' && node instanceof HTMLLinkElement) {
125
- this.app.send(new SetNodeAttributeURLBased(id, name, value, getBaseURI()));
161
+ if (name === 'style' || name === 'href' && this.isInstance(node, HTMLLinkElement)) {
162
+ this.app.send(new SetNodeAttributeURLBased(id, name, value, this.app.getBaseHref()));
126
163
  return;
127
164
  }
128
165
  if (name === 'href' || value.length > 1e5) {
@@ -131,8 +168,8 @@ export default class Observer {
131
168
  this.app.send(new SetNodeAttribute(id, name, value));
132
169
  }
133
170
  sendNodeData(id, parentElement, data) {
134
- if (parentElement instanceof HTMLStyleElement || parentElement instanceof SVGStyleElement) {
135
- this.app.send(new SetCSSDataURLBased(id, data, getBaseURI()));
171
+ if (this.isInstance(parentElement, HTMLStyleElement) || this.isInstance(parentElement, SVGStyleElement)) {
172
+ this.app.send(new SetCSSDataURLBased(id, data, this.app.getBaseHref()));
136
173
  return;
137
174
  }
138
175
  if (this.textMasked.has(id)) {
@@ -154,12 +191,12 @@ export default class Observer {
154
191
  this.recents[id] = r[1] || this.recents[id] || false;
155
192
  }
156
193
  bindTree(node) {
157
- if (isIgnored(node)) {
194
+ if (this.isIgnored(node)) {
158
195
  return;
159
196
  }
160
197
  this.bindNode(node);
161
198
  const walker = document.createTreeWalker(node, NodeFilter.SHOW_ELEMENT + NodeFilter.SHOW_TEXT, {
162
- acceptNode: (node) => isIgnored(node) || this.app.nodes.getID(node) !== undefined
199
+ acceptNode: (node) => this.isIgnored(node) || this.app.nodes.getID(node) !== undefined
163
200
  ? NodeFilter.FILTER_REJECT
164
201
  : NodeFilter.FILTER_ACCEPT,
165
202
  }, false);
@@ -176,7 +213,10 @@ export default class Observer {
176
213
  _commitNode(id, node) {
177
214
  const parent = node.parentNode;
178
215
  let parentID;
179
- if (id !== 0) {
216
+ if (this.isInstance(node, HTMLHtmlElement)) {
217
+ this.indexes[id] = 0;
218
+ }
219
+ else {
180
220
  if (parent === null) {
181
221
  this.unbindNode(node);
182
222
  return false;
@@ -191,7 +231,7 @@ export default class Observer {
191
231
  return false;
192
232
  }
193
233
  if (this.textMasked.has(parentID) ||
194
- (node instanceof Element && hasOpenreplayAttribute(node, 'masked'))) {
234
+ (this.isInstance(node, Element) && hasOpenreplayAttribute(node, 'masked'))) {
195
235
  this.textMasked.add(id);
196
236
  }
197
237
  let sibling = node.previousSibling;
@@ -214,7 +254,7 @@ export default class Observer {
214
254
  throw 'commitNode: missing node index';
215
255
  }
216
256
  if (isNew === true) {
217
- if (node instanceof Element) {
257
+ if (this.isInstance(node, Element)) {
218
258
  if (parentID !== undefined) {
219
259
  this.app.send(new CreateElementNode(id, parentID, index, node.tagName, isSVGElement(node)));
220
260
  }
@@ -222,8 +262,12 @@ export default class Observer {
222
262
  const attr = node.attributes[i];
223
263
  this.sendNodeAttribute(id, node, attr.nodeName, attr.value);
224
264
  }
265
+ if (this.isInstance(node, HTMLIFrameElement) &&
266
+ (this.options.captureIFrames || node.getAttribute("data-openreplay-capture"))) {
267
+ this.handleIframe(node);
268
+ }
225
269
  }
226
- else if (node instanceof Text) {
270
+ else if (this.isInstance(node, Text)) {
227
271
  // for text node id != 0, hence parentID !== undefined and parent is Element
228
272
  this.app.send(new CreateTextNode(id, parentID, index));
229
273
  this.sendNodeData(id, parent, node.data);
@@ -235,7 +279,7 @@ export default class Observer {
235
279
  }
236
280
  const attr = this.attributesList[id];
237
281
  if (attr !== undefined) {
238
- if (!(node instanceof Element)) {
282
+ if (!this.isInstance(node, Element)) {
239
283
  throw 'commitNode: node is not an element';
240
284
  }
241
285
  for (const name of attr) {
@@ -243,7 +287,7 @@ export default class Observer {
243
287
  }
244
288
  }
245
289
  if (this.textSet.has(id)) {
246
- if (!(node instanceof Text)) {
290
+ if (!this.isInstance(node, Text)) {
247
291
  throw 'commitNode: node is not a text';
248
292
  }
249
293
  // for text node id != 0, hence parent is Element
@@ -272,8 +316,42 @@ export default class Observer {
272
316
  }
273
317
  this.clear();
274
318
  }
319
+ handleIframe(iframe) {
320
+ const handle = () => {
321
+ const context = iframe.contentWindow;
322
+ const id = this.app.nodes.getID(iframe);
323
+ if (!context || id === undefined) {
324
+ return;
325
+ }
326
+ const observer = new Observer(this.app, this.options, context);
327
+ this.iframeObservers.push(observer);
328
+ observer.observeIframe(id, context);
329
+ };
330
+ this.app.attachEventListener(iframe, "load", handle);
331
+ handle();
332
+ }
333
+ // TODO: abstract common functionality, separate FrameObserver
334
+ observeIframe(id, context) {
335
+ const doc = context.document;
336
+ this.observer.observe(doc, {
337
+ childList: true,
338
+ attributes: true,
339
+ characterData: true,
340
+ subtree: true,
341
+ attributeOldValue: false,
342
+ characterDataOldValue: false,
343
+ });
344
+ this.bindTree(doc.documentElement);
345
+ const docID = this.app.nodes.getID(doc.documentElement);
346
+ if (docID === undefined) {
347
+ console.log("Wrong");
348
+ return;
349
+ }
350
+ this.app.send(CreateIFrameDocument(id, docID));
351
+ this.commitNodes();
352
+ }
275
353
  observe() {
276
- this.observer.observe(document, {
354
+ this.observer.observe(this.context.document, {
277
355
  childList: true,
278
356
  attributes: true,
279
357
  characterData: true,
@@ -282,10 +360,12 @@ export default class Observer {
282
360
  characterDataOldValue: false,
283
361
  });
284
362
  this.app.send(new CreateDocument());
285
- this.bindTree(document.documentElement);
363
+ this.bindTree(this.context.document.documentElement);
286
364
  this.commitNodes();
287
365
  }
288
366
  disconnect() {
367
+ this.iframeObservers.forEach(o => o.disconnect());
368
+ this.iframeObservers = [];
289
369
  this.observer.disconnect();
290
370
  this.clear();
291
371
  }
package/lib/index.js CHANGED
@@ -15,17 +15,17 @@ import Scroll from './modules/scroll';
15
15
  import Viewport from './modules/viewport';
16
16
  import Longtasks from './modules/longtasks';
17
17
  import CSSRules from './modules/cssrules';
18
- import { IN_BROWSER, deprecationWarn } from './utils';
18
+ import { IN_BROWSER, deprecationWarn, DOCS_HOST } from './utils';
19
19
  const DOCS_SETUP = '/installation/setup-or';
20
20
  function processOptions(obj) {
21
21
  if (obj == null) {
22
- console.error(`OpenReplay: invalid options argument type. Please, check documentation on https://docs.openreplay.com${DOCS_SETUP}`);
22
+ console.error(`OpenReplay: invalid options argument type. Please, check documentation on ${DOCS_HOST}${DOCS_SETUP}`);
23
23
  return false;
24
24
  }
25
25
  if (typeof obj.projectKey !== 'string') {
26
26
  if (typeof obj.projectKey !== 'number') {
27
27
  if (typeof obj.projectID !== 'number') { // Back compatability
28
- console.error(`OpenReplay: projectKey is missing or wrong type (string is expected). Please, check https://docs.openreplay.com${DOCS_SETUP} for more information.`);
28
+ console.error(`OpenReplay: projectKey is missing or wrong type (string is expected). Please, check ${DOCS_HOST}${DOCS_SETUP} for more information.`);
29
29
  return false;
30
30
  }
31
31
  else {
@@ -39,7 +39,7 @@ function processOptions(obj) {
39
39
  }
40
40
  }
41
41
  if (typeof obj.sessionToken !== 'string' && obj.sessionToken != null) {
42
- console.warn(`OpenReplay: invalid options argument type. Please, check documentation on https://docs.openreplay.com${DOCS_SETUP}`);
42
+ console.warn(`OpenReplay: invalid options argument type. Please, check documentation on ${DOCS_HOST}${DOCS_SETUP}`);
43
43
  }
44
44
  return true;
45
45
  }
@@ -65,6 +65,10 @@ export default class API {
65
65
  if (!IN_BROWSER || !processOptions(options)) {
66
66
  return;
67
67
  }
68
+ if (window.__OPENREPLAY__) {
69
+ console.error("OpenReplay: one tracker instance has been initialised already");
70
+ return;
71
+ }
68
72
  if (!options.__DISABLE_SECURE_MODE && location.protocol !== 'https:') {
69
73
  console.error("OpenReplay: Your website must be publicly accessible and running on SSL in order for OpenReplay to properly capture and replay the user session. You can disable this check by setting `__DISABLE_SECURE_MODE` option to `true` if you are testing in localhost. Keep in mind, that asset files on a local machine are not available to the outside world. This might affect tracking if you use css files.");
70
74
  return;
@@ -94,17 +98,17 @@ export default class API {
94
98
  Performance(this.app, options);
95
99
  Scroll(this.app);
96
100
  Longtasks(this.app);
97
- window.__OPENREPLAY__ = window.__OPENREPLAY__ || this;
101
+ window.__OPENREPLAY__ = this;
98
102
  }
99
103
  else {
100
- console.log("OpenReplay: browser doesn't support API required for tracking.");
104
+ console.log("OpenReplay: browser doesn't support API required for tracking or doNotTrack is set to 1.");
101
105
  const req = new XMLHttpRequest();
102
106
  const orig = options.ingestPoint || DEFAULT_INGEST_POINT;
103
107
  req.open("POST", orig + "/v1/web/not-started");
104
108
  // no-cors issue only with text/plain or not-set Content-Type
105
109
  // req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
106
110
  req.send(JSON.stringify({
107
- trackerVersion: '3.3.0',
111
+ trackerVersion: '3.4.1',
108
112
  projectKey: options.projectKey,
109
113
  doNotTrack,
110
114
  // TODO: add precise reason (an exact API missing)
@@ -126,7 +130,7 @@ export default class API {
126
130
  }
127
131
  start() {
128
132
  if (!IN_BROWSER) {
129
- console.error(`OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \`tracker.start()\` line. Check documentation on https://docs.openreplay.com${DOCS_SETUP}`);
133
+ console.error(`OpenReplay: you are trying to start Tracker on a node.js environment. If you want to use OpenReplay with SSR, please, use componentDidMount or useEffect API for placing the \`tracker.start()\` line. Check documentation on ${DOCS_HOST}${DOCS_SETUP}`);
130
134
  return;
131
135
  }
132
136
  if (this.app === null) {
@@ -434,4 +434,12 @@ declare class _MouseClick implements Message {
434
434
  encode(writer: Writer): boolean;
435
435
  }
436
436
  export declare const MouseClick: typeof _MouseClick & ((id: number, hesitationTime: number, label: string, selector: string) => _MouseClick);
437
+ declare class _CreateIFrameDocument implements Message {
438
+ frameID: number;
439
+ id: number;
440
+ readonly _id: number;
441
+ constructor(frameID: number, id: number);
442
+ encode(writer: Writer): boolean;
443
+ }
444
+ export declare const CreateIFrameDocument: typeof _CreateIFrameDocument & ((frameID: number, id: number) => _CreateIFrameDocument);
437
445
  export {};
@@ -774,3 +774,17 @@ class _MouseClick {
774
774
  }
775
775
  export const MouseClick = bindNew(_MouseClick);
776
776
  classes.set(69, MouseClick);
777
+ class _CreateIFrameDocument {
778
+ constructor(frameID, id) {
779
+ this.frameID = frameID;
780
+ this.id = id;
781
+ this._id = 70;
782
+ }
783
+ encode(writer) {
784
+ return writer.uint(70) &&
785
+ writer.uint(this.frameID) &&
786
+ writer.uint(this.id);
787
+ }
788
+ }
789
+ export const CreateIFrameDocument = bindNew(_CreateIFrameDocument);
790
+ classes.set(70, CreateIFrameDocument);
@@ -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.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.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/messages/writer.ts","../../src/messages/message.ts","../../src/messages/index.ts","../../src/messages/webworker.ts","../../node_modules/@types/eslint-visitor-keys/index.d.ts","../../node_modules/@types/estree/index.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/dns.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/string_decoder.d.ts","../../node_modules/@types/node/timers.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/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/base.d.ts","../../node_modules/@types/node/ts3.2/fs.d.ts","../../node_modules/@types/node/ts3.2/util.d.ts","../../node_modules/@types/node/ts3.2/globals.d.ts","../../node_modules/@types/node/ts3.2/base.d.ts","../../node_modules/@types/node/ts3.5/globals.global.d.ts","../../node_modules/@types/node/ts3.5/wasi.d.ts","../../node_modules/@types/node/ts3.5/base.d.ts","../../node_modules/@types/node/ts3.7/assert.d.ts","../../node_modules/@types/node/ts3.7/base.d.ts","../../node_modules/@types/node/ts3.7/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":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"e6ab9b8cc2747eb53fb5bfd339b69857dc2a33415bfbcfbf20f885dd9b43ed5d","8aa4c0659b8a040f765531d17e6cbac53deeb0a7e334d53e80d9dc85cb774546","859fa5a5b11c61b2fbf18a3b61f159b77077556015bb944cf88ff3be94a2b936","fe729eaf166de740549d4f03414e8edcf5c324e316a1eb20a1da3cbb1f72ad60","725d9be2fd48440256f4deb00649adffdbc5ecd282b09e89d4e200663792c34c","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b",{"version":"2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0","affectsGlobalScope":true},"4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682","61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878","465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7","123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803","525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d","90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720","d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb","7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78","aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346","4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e","eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9","e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60","fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7","9440dcf960685f7ec10856891a6cebb52a5ae8cef6a2e85daf9476dafd346cbe","5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90","c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a","6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947","bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665","46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498","ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34","84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35","0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45",{"version":"0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e","affectsGlobalScope":true},"30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1","9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164","6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9","dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4","406a63c7e94107394341e97dbdc3312a1ecea75571d067a69eaa213786d9f154","d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457","b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9","424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca","a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638","3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748","826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357","baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c","289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953","e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e","086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593","f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8","b46af749e3574b83bccc0ec829322b15e834ae90b45760eebc75a189c28c0868","12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1","ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07",{"version":"4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1","affectsGlobalScope":true},"4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade",{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true},"0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0","255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96","a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4","9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392","d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee","1d1e6bd176eee5970968423d7e215bfd66828b6db8d54d17afec05a831322633","64ef5112114bdd77304acb548f93777b263bbf57272776139425a58f68a10775","ecdf947a5111318568ba99f2a87b8498382d8871207f1bc6271ff3b9536a2448","2880728492d6a6baa55411d14cc42fa55714a24b1d1d27ff9a8a610abd47c761"],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[46,69,75,76],[45,46,69,75,76,84,85],[34,35,36,37,38,39,40,41,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,75,76],[45,46,53,62,69,75,76],[37,45,46,53,69,75,76],[41,46,54,69,75,76],[46,62,69,75,76],[43,45,46,53,69,75,76],[45,46,69,75,76],[45,47,62,68,69,75,76],[45,46,53,62,68,69,75,76],[45,46,48,53,62,65,68,69,75,76],[45,46,48,65,68,69,75,76],[46,68,69,75,76],[43,45,46,62,69,75,76],[35,46,69,75,76],[46,67,69,75,76],[45,46,62,69,75,76],[46,60,69,71,75,76],[41,43,46,53,62,69,75,76],[46,69,74,75,76,77],[46,69,76],[34,46,69,75,76],[46,69,75],[46,69,75,76,78,79,80],[46,69,75,76,81,82],[46,69,75,76,83],[46,53,69,75,76],[46,59,69,75,76],[46,75,76],[45,46,62,68,69,71,75,76],[46,69,75,76,84],[28,29,46,69,75,76],[28,46,69,75,76]],"referencedMap":[[32,1],[33,1],[86,2],[87,1],[85,1],[35,1],[74,3],[36,1],[37,4],[38,5],[39,1],[40,6],[41,7],[42,8],[43,1],[44,9],[45,1],[46,10],[47,1],[34,1],[48,11],[49,12],[50,13],[51,9],[52,14],[53,15],[54,1],[55,1],[56,16],[57,17],[58,1],[59,1],[60,18],[61,19],[62,9],[63,1],[64,1],[65,20],[66,1],[78,21],[75,22],[77,23],[76,24],[81,25],[79,1],[80,1],[82,1],[83,26],[84,27],[67,28],[68,29],[69,30],[70,7],[71,1],[72,31],[73,7],[88,32],[7,1],[6,1],[2,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[3,1],[4,1],[19,1],[16,1],[17,1],[18,1],[20,1],[21,1],[22,1],[5,1],[23,1],[24,1],[25,1],[26,1],[1,1],[27,1],[30,33],[29,34],[31,1],[28,1]],"exportedModulesMap":[[32,1],[33,1],[86,2],[87,1],[85,1],[35,1],[74,3],[36,1],[37,4],[38,5],[39,1],[40,6],[41,7],[42,8],[43,1],[44,9],[45,1],[46,10],[47,1],[34,1],[48,11],[49,12],[50,13],[51,9],[52,14],[53,15],[54,1],[55,1],[56,16],[57,17],[58,1],[59,1],[60,18],[61,19],[62,9],[63,1],[64,1],[65,20],[66,1],[78,21],[75,22],[77,23],[76,24],[81,25],[79,1],[80,1],[82,1],[83,26],[84,27],[67,28],[68,29],[69,30],[70,7],[71,1],[72,31],[73,7],[88,32],[7,1],[6,1],[2,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[3,1],[4,1],[19,1],[16,1],[17,1],[18,1],[20,1],[21,1],[22,1],[5,1],[23,1],[24,1],[25,1],[26,1],[1,1],[27,1],[30,33],[29,34],[31,1],[28,1]],"semanticDiagnosticsPerFile":[32,33,86,87,85,35,74,36,37,38,39,40,41,42,43,44,45,46,47,34,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,78,75,77,76,81,79,80,82,83,84,67,68,69,70,71,72,73,88,7,6,2,8,9,10,11,12,13,14,15,3,4,19,16,17,18,20,21,22,5,23,24,25,26,1,27,30,29,31,28]},"version":"4.3.4"}
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.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.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/messages/writer.ts","../../src/messages/message.ts","../../src/messages/index.ts","../../src/messages/webworker.ts","../../node_modules/@types/eslint-visitor-keys/index.d.ts","../../node_modules/@types/estree/index.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/dns.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/string_decoder.d.ts","../../node_modules/@types/node/timers.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/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/base.d.ts","../../node_modules/@types/node/ts3.2/fs.d.ts","../../node_modules/@types/node/ts3.2/util.d.ts","../../node_modules/@types/node/ts3.2/globals.d.ts","../../node_modules/@types/node/ts3.2/base.d.ts","../../node_modules/@types/node/ts3.5/globals.global.d.ts","../../node_modules/@types/node/ts3.5/wasi.d.ts","../../node_modules/@types/node/ts3.5/base.d.ts","../../node_modules/@types/node/ts3.7/assert.d.ts","../../node_modules/@types/node/ts3.7/base.d.ts","../../node_modules/@types/node/ts3.7/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":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"b8aeff6e394e47092b25a03db1c5db0339a3f2d4fa4e9b7118ea43b440068086","8aa4c0659b8a040f765531d17e6cbac53deeb0a7e334d53e80d9dc85cb774546","98dd06c7e91230a93cd752a6a5d75d77c845b72bfc5228f9ff5b24f9ee1019d0","a33ea9d45ef6724cb5a243f0637df91c29b1a20de3051766b9b29eb4a72ec914","725d9be2fd48440256f4deb00649adffdbc5ecd282b09e89d4e200663792c34c","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b",{"version":"2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0","affectsGlobalScope":true},"4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682","61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878","465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7","123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803","525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d","90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720","d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb","7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78","aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346","4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e","eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9","e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60","fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7","9440dcf960685f7ec10856891a6cebb52a5ae8cef6a2e85daf9476dafd346cbe","5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90","c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a","6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947","bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665","46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498","ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34","84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35","0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45",{"version":"0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e","affectsGlobalScope":true},"30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1","9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164","6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9","dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4","406a63c7e94107394341e97dbdc3312a1ecea75571d067a69eaa213786d9f154","d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457","b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9","424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca","a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638","3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748","826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357","baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c","289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953","e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e","086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593","f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8","b46af749e3574b83bccc0ec829322b15e834ae90b45760eebc75a189c28c0868","12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1","ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07",{"version":"4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1","affectsGlobalScope":true},"4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade",{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true},"0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0","255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96","a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4","9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392","d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee","1d1e6bd176eee5970968423d7e215bfd66828b6db8d54d17afec05a831322633","64ef5112114bdd77304acb548f93777b263bbf57272776139425a58f68a10775","ecdf947a5111318568ba99f2a87b8498382d8871207f1bc6271ff3b9536a2448","2880728492d6a6baa55411d14cc42fa55714a24b1d1d27ff9a8a610abd47c761"],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[46,69,75,76],[45,46,69,75,76,84,85],[34,35,36,37,38,39,40,41,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,75,76],[45,46,53,62,69,75,76],[37,45,46,53,69,75,76],[41,46,54,69,75,76],[46,62,69,75,76],[43,45,46,53,69,75,76],[45,46,69,75,76],[45,47,62,68,69,75,76],[45,46,53,62,68,69,75,76],[45,46,48,53,62,65,68,69,75,76],[45,46,48,65,68,69,75,76],[46,68,69,75,76],[43,45,46,62,69,75,76],[35,46,69,75,76],[46,67,69,75,76],[45,46,62,69,75,76],[46,60,69,71,75,76],[41,43,46,53,62,69,75,76],[46,69,74,75,76,77],[46,69,76],[34,46,69,75,76],[46,69,75],[46,69,75,76,78,79,80],[46,69,75,76,81,82],[46,69,75,76,83],[46,53,69,75,76],[46,59,69,75,76],[46,75,76],[45,46,62,68,69,71,75,76],[46,69,75,76,84],[28,29,46,69,75,76],[28,46,69,75,76]],"referencedMap":[[32,1],[33,1],[86,2],[87,1],[85,1],[35,1],[74,3],[36,1],[37,4],[38,5],[39,1],[40,6],[41,7],[42,8],[43,1],[44,9],[45,1],[46,10],[47,1],[34,1],[48,11],[49,12],[50,13],[51,9],[52,14],[53,15],[54,1],[55,1],[56,16],[57,17],[58,1],[59,1],[60,18],[61,19],[62,9],[63,1],[64,1],[65,20],[66,1],[78,21],[75,22],[77,23],[76,24],[81,25],[79,1],[80,1],[82,1],[83,26],[84,27],[67,28],[68,29],[69,30],[70,7],[71,1],[72,31],[73,7],[88,32],[7,1],[6,1],[2,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[3,1],[4,1],[19,1],[16,1],[17,1],[18,1],[20,1],[21,1],[22,1],[5,1],[23,1],[24,1],[25,1],[26,1],[1,1],[27,1],[30,33],[29,34],[31,1],[28,1]],"exportedModulesMap":[[32,1],[33,1],[86,2],[87,1],[85,1],[35,1],[74,3],[36,1],[37,4],[38,5],[39,1],[40,6],[41,7],[42,8],[43,1],[44,9],[45,1],[46,10],[47,1],[34,1],[48,11],[49,12],[50,13],[51,9],[52,14],[53,15],[54,1],[55,1],[56,16],[57,17],[58,1],[59,1],[60,18],[61,19],[62,9],[63,1],[64,1],[65,20],[66,1],[78,21],[75,22],[77,23],[76,24],[81,25],[79,1],[80,1],[82,1],[83,26],[84,27],[67,28],[68,29],[69,30],[70,7],[71,1],[72,31],[73,7],[88,32],[7,1],[6,1],[2,1],[8,1],[9,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[3,1],[4,1],[19,1],[16,1],[17,1],[18,1],[20,1],[21,1],[22,1],[5,1],[23,1],[24,1],[25,1],[26,1],[1,1],[27,1],[30,33],[29,34],[31,1],[28,1]],"semanticDiagnosticsPerFile":[32,33,86,87,85,35,74,36,37,38,39,40,41,42,43,44,45,46,47,34,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,78,75,77,76,81,79,80,82,83,84,67,68,69,70,71,72,73,88,7,6,2,8,9,10,11,12,13,14,15,3,4,19,16,17,18,20,21,22,5,23,24,25,26,1,27,30,29,31,28]},"version":"4.3.4"}
@@ -2,6 +2,7 @@ export interface Options {
2
2
  connAttemptCount?: number;
3
3
  connAttemptGap?: number;
4
4
  beaconSize?: number;
5
+ __debug_log?: boolean;
5
6
  }
6
7
  declare type Settings = {
7
8
  ingestPoint?: string;
@@ -76,6 +76,9 @@ export default class Writer {
76
76
  return this.offset <= this.size;
77
77
  }
78
78
  uint(value) {
79
+ if (value < 0 || value > Number.MAX_SAFE_INTEGER) {
80
+ value = 0;
81
+ }
79
82
  while (value >= 0x80) {
80
83
  this.data[this.offset++] = value % 0x100 | 0x80;
81
84
  value = Math.floor(value / 128);
@@ -99,7 +99,7 @@ export default function (app, opts) {
99
99
  app.ticker.attach(reset, 33, false);
100
100
  options.consoleMethods.forEach((method) => {
101
101
  if (consoleMethods.indexOf(method) === -1) {
102
- console.error(`Asayer: unsupported console method ${method}`);
102
+ console.error(`OpenReplay: unsupported console method "${method}"`);
103
103
  return;
104
104
  }
105
105
  const fn = console[method];
@@ -1,5 +1,4 @@
1
1
  import { CSSInsertRuleURLBased, CSSDeleteRule, TechnicalInfo } from '../messages';
2
- import { getBaseURI } from '../utils';
3
2
  export default function (app) {
4
3
  if (app === null) {
5
4
  return;
@@ -10,7 +9,7 @@ export default function (app) {
10
9
  }
11
10
  const processOperation = app.safe((stylesheet, index, rule) => {
12
11
  const sendMessage = typeof rule === 'string'
13
- ? (nodeID) => app.send(new CSSInsertRuleURLBased(nodeID, rule, index, getBaseURI()))
12
+ ? (nodeID) => app.send(new CSSInsertRuleURLBased(nodeID, rule, index, app.getBaseHref()))
14
13
  : (nodeID) => app.send(new CSSDeleteRule(nodeID, index));
15
14
  // TODO: Extend messages to maintain nested rules (CSSGroupingRule prototype, as well as CSSKeyframesRule)
16
15
  if (stylesheet.ownerNode == null) {
@@ -1,4 +1,4 @@
1
- import { timestamp, isURL, getBaseURI } from '../utils';
1
+ import { timestamp, isURL } from '../utils';
2
2
  import { ResourceTiming, SetNodeAttributeURLBased } from '../messages';
3
3
  export default function (app) {
4
4
  const sendImgSrc = app.safe(function () {
@@ -16,7 +16,7 @@ export default function (app) {
16
16
  }
17
17
  }
18
18
  else if (src.length < 1e5) {
19
- app.send(new SetNodeAttributeURLBased(id, 'src', src, getBaseURI()));
19
+ app.send(new SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
20
20
  }
21
21
  });
22
22
  const observer = new MutationObserver((mutations) => {
@@ -28,7 +28,7 @@ export default function (app) {
28
28
  return;
29
29
  }
30
30
  const src = target.src;
31
- app.send(new SetNodeAttributeURLBased(id, 'src', src, getBaseURI()));
31
+ app.send(new SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
32
32
  }
33
33
  }
34
34
  });
@@ -1,6 +1,10 @@
1
1
  import type { Options as FinderOptions } from '../vendors/finder/finder';
2
2
  import App from '../app';
3
+ interface HeatmapsOptions {
4
+ finder: FinderOptions;
5
+ }
3
6
  export interface Options {
4
- selectorFinder: boolean | FinderOptions;
7
+ heatmaps: boolean | HeatmapsOptions;
5
8
  }
6
9
  export default function (app: App, opts: Partial<Options>): void;
10
+ export {};
@@ -65,7 +65,12 @@ function getTargetLabel(target) {
65
65
  }
66
66
  export default function (app, opts) {
67
67
  const options = Object.assign({
68
- selectorFinder: true,
68
+ heatmaps: {
69
+ finder: {
70
+ threshold: 5,
71
+ maxNumberOfTries: 600,
72
+ },
73
+ },
69
74
  }, opts);
70
75
  let mousePositionX = -1;
71
76
  let mousePositionY = -1;
@@ -86,11 +91,11 @@ export default function (app, opts) {
86
91
  };
87
92
  const selectorMap = {};
88
93
  function getSelector(id, target) {
89
- if (options.selectorFinder === false) {
94
+ if (options.heatmaps === false) {
90
95
  return '';
91
96
  }
92
97
  return selectorMap[id] = selectorMap[id] ||
93
- finder(target, options.selectorFinder === true ? undefined : options.selectorFinder);
98
+ finder(target, options.heatmaps === true ? undefined : options.heatmaps.finder);
94
99
  }
95
100
  app.attachEventListener(document.documentElement, 'mouseover', (e) => {
96
101
  const target = getTarget(e.target);
@@ -66,33 +66,38 @@ export default function (app, opts) {
66
66
  options.captureResourceTimings = false;
67
67
  }
68
68
  if (!options.captureResourceTimings) {
69
- options.capturePageLoadTimings = false;
70
- options.capturePageRenderTimings = false;
69
+ return;
70
+ } // Resources are necessary for all timings
71
+ const mQueue = [];
72
+ function sendOnStart(m) {
73
+ if (app.active()) {
74
+ app.send(m);
75
+ }
76
+ else {
77
+ mQueue.push(m);
78
+ }
71
79
  }
72
- let resources = options.captureResourceTimings
73
- ? {}
74
- : null;
80
+ app.attachStartCallback(function () {
81
+ mQueue.forEach(m => app.send(m));
82
+ });
83
+ let resources = {};
75
84
  function resourceTiming(entry) {
76
85
  if (entry.duration <= 0 || !isURL(entry.name) || app.isServiceURL(entry.name))
77
86
  return;
78
87
  if (resources !== null) {
79
88
  resources[entry.name] = entry.startTime + entry.duration;
80
89
  }
81
- app.send(new ResourceTiming(entry.startTime + performance.timing.navigationStart, entry.duration, entry.responseStart && entry.startTime
90
+ sendOnStart(new ResourceTiming(entry.startTime + performance.timing.navigationStart, entry.duration, entry.responseStart && entry.startTime
82
91
  ? entry.responseStart - entry.startTime
83
92
  : 0, entry.transferSize > entry.encodedBodySize
84
93
  ? entry.transferSize - entry.encodedBodySize
85
94
  : 0, entry.encodedBodySize || 0, entry.decodedBodySize || 0, entry.name, entry.initiatorType));
86
95
  }
87
- const observer = options.captureResourceTimings
88
- ? new PerformanceObserver((list) => list.getEntries().forEach(resourceTiming))
89
- : null;
90
- if (observer !== null) {
91
- performance.getEntriesByType('resource').forEach(resourceTiming);
92
- observer.observe({ entryTypes: ['resource'] });
93
- }
96
+ const observer = new PerformanceObserver((list) => list.getEntries().forEach(resourceTiming));
97
+ performance.getEntriesByType('resource').forEach(resourceTiming);
98
+ observer.observe({ entryTypes: ['resource'] });
94
99
  let firstPaint = 0, firstContentfulPaint = 0;
95
- if (options.capturePageLoadTimings && observer !== null) {
100
+ if (options.capturePageLoadTimings) {
96
101
  let pageLoadTimingSent = false;
97
102
  app.ticker.attach(() => {
98
103
  if (pageLoadTimingSent) {
@@ -120,7 +125,7 @@ export default function (app, opts) {
120
125
  }
121
126
  }, 30);
122
127
  }
123
- if (options.capturePageRenderTimings && observer !== null) {
128
+ if (options.capturePageRenderTimings) {
124
129
  let visuallyComplete = 0, interactiveWindowStartTime = 0, interactiveWindowTickTime = 0, paintBlocks = null;
125
130
  let pageRenderTimingSent = false;
126
131
  app.ticker.attach(() => {