@openreplay/tracker 3.5.14 → 3.5.16-beta.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.
@@ -46,6 +46,8 @@ declare type AppOptions = {
46
46
  __debug__?: LoggerOptions;
47
47
  localStorage: Storage;
48
48
  sessionStorage: Storage;
49
+ maxMemorySize: number;
50
+ memoryCheckInterval: number;
49
51
  onStart?: StartCallback;
50
52
  } & WebworkerOptions;
51
53
  export declare type Options = AppOptions & ObserverOptions & SanitizerOptions;
@@ -60,6 +62,7 @@ export default class App {
60
62
  readonly session: Session;
61
63
  readonly localStorage: Storage;
62
64
  readonly sessionStorage: Storage;
65
+ private gc;
63
66
  private readonly messages;
64
67
  private readonly observer;
65
68
  private readonly startCallbacks;
@@ -103,6 +106,7 @@ export default class App {
103
106
  resetNextPageSession(flag: boolean): void;
104
107
  private _start;
105
108
  start(options?: StartOptions): Promise<StartPromiseReturn>;
106
- stop(calledFromAPI?: boolean): void;
109
+ stop(calledFromAPI?: boolean, restarting?: boolean): void;
110
+ restart(): void;
107
111
  }
108
112
  export {};
package/cjs/app/index.js CHANGED
@@ -32,7 +32,7 @@ class App {
32
32
  this.stopCallbacks = [];
33
33
  this.commitCallbacks = [];
34
34
  this.activityState = ActivityState.NotActive;
35
- this.version = '3.5.14'; // TODO: version compatability check inside each plugin.
35
+ this.version = '3.5.16-beta.1'; // TODO: version compatability check inside each plugin.
36
36
  this.projectKey = projectKey;
37
37
  this.options = Object.assign({
38
38
  revID: '',
@@ -48,6 +48,8 @@ class App {
48
48
  __debug_report_edp: null,
49
49
  localStorage: window.localStorage,
50
50
  sessionStorage: window.sessionStorage,
51
+ maxMemorySize: 650 * 1e6,
52
+ memoryCheckInterval: 2 * 60 * 1000,
51
53
  }, options);
52
54
  this.revID = this.options.revID;
53
55
  this.sanitizer = new sanitizer_js_1.default(this, options);
@@ -316,6 +318,16 @@ class App {
316
318
  this.observer.observe();
317
319
  this.ticker.start();
318
320
  this.notify.log("OpenReplay tracking started.");
321
+ // GC
322
+ if (this.gc) {
323
+ clearInterval(this.gc);
324
+ }
325
+ this.gc = setInterval(() => {
326
+ // @ts-ignore
327
+ if (window.performance.memory.usedJSHeapSize > this.options.maxMemorySize) {
328
+ this.restart();
329
+ }
330
+ }, this.options.memoryCheckInterval);
319
331
  // get rid of onStart ?
320
332
  if (typeof this.options.onStart === 'function') {
321
333
  this.options.onStart(onStartInfo);
@@ -349,7 +361,7 @@ class App {
349
361
  });
350
362
  }
351
363
  }
352
- stop(calledFromAPI = false) {
364
+ stop(calledFromAPI = false, restarting = false) {
353
365
  if (this.activityState !== ActivityState.NotActive) {
354
366
  try {
355
367
  this.sanitizer.clear();
@@ -361,7 +373,7 @@ class App {
361
373
  this.session.reset();
362
374
  }
363
375
  this.notify.log("OpenReplay tracking stopped.");
364
- if (this.worker) {
376
+ if (this.worker && !restarting) {
365
377
  this.worker.postMessage("stop");
366
378
  }
367
379
  }
@@ -370,5 +382,9 @@ class App {
370
382
  }
371
383
  }
372
384
  }
385
+ restart() {
386
+ this.stop(false, true);
387
+ this.start({ forceNew: false });
388
+ }
373
389
  }
374
390
  exports.default = App;
@@ -1,7 +1,7 @@
1
1
  declare type NodeCallback = (node: Node, isStart: boolean) => void;
2
2
  export default class Nodes {
3
3
  private readonly node_id;
4
- private readonly nodes;
4
+ private nodes;
5
5
  private readonly nodeCallbacks;
6
6
  private readonly elementListeners;
7
7
  constructor(node_id: string);
package/cjs/app/nodes.js CHANGED
@@ -47,6 +47,12 @@ class Nodes {
47
47
  }
48
48
  return id;
49
49
  }
50
+ // cleanTree() {
51
+ // if (this.nodes.length > 10000) {
52
+ // this.nodes = this.nodes.filter((n) => n !== undefined && document.contains(n))
53
+ // }
54
+ // return;
55
+ // }
50
56
  callNodeCallbacks(node, isStart) {
51
57
  this.nodeCallbacks.forEach((cb) => cb(node, isStart));
52
58
  }
@@ -157,7 +157,7 @@ class Observer {
157
157
  if (isNew) {
158
158
  this.recents.set(id, RecentsType.New);
159
159
  }
160
- else if (!this.recents.has(id)) {
160
+ else if (this.recents.get(id) !== RecentsType.New) { // can we do just `else` here?
161
161
  this.recents.set(id, RecentsType.Removed);
162
162
  }
163
163
  }
@@ -182,6 +182,7 @@ class Observer {
182
182
  if (id !== undefined && this.recents.get(id) === RecentsType.Removed) {
183
183
  this.app.send(new messages_js_1.RemoveNode(id));
184
184
  }
185
+ return id;
185
186
  }
186
187
  // A top-consumption function on the infinite lists test. (~1% of performance resources)
187
188
  _commitNode(id, node) {
@@ -195,6 +196,8 @@ class Observer {
195
196
  // TODO: Clean the logic (though now it workd fine)
196
197
  if (!(0, guards_js_1.hasTag)(node, "HTML") || !this.isTopContext) {
197
198
  if (parent === null) {
199
+ // Sometimes one observation contains attribute mutations for the removimg node, which gets ignored here.
200
+ // That shouldn't affect the visual rendering ( should it? )
198
201
  this.unbindNode(node);
199
202
  return false;
200
203
  }
package/cjs/index.js CHANGED
@@ -127,7 +127,7 @@ class API {
127
127
  // no-cors issue only with text/plain or not-set Content-Type
128
128
  // req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
129
129
  req.send(JSON.stringify({
130
- trackerVersion: '3.5.14',
130
+ trackerVersion: '3.5.16-beta.1',
131
131
  projectKey: options.projectKey,
132
132
  doNotTrack,
133
133
  // TODO: add precise reason (an exact API missing)
@@ -3,6 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const utils_js_1 = require("../utils.js");
4
4
  const messages_js_1 = require("../common/messages.js");
5
5
  const guards_js_1 = require("../app/guards.js");
6
+ function resolveURL(url, location = document.location) {
7
+ url = url.trim();
8
+ if (url.startsWith('/')) {
9
+ return location.origin + url;
10
+ }
11
+ else if (url.startsWith('http://') ||
12
+ url.startsWith('https://') ||
13
+ url.startsWith('data:') // any other possible value here?
14
+ ) {
15
+ return url;
16
+ }
17
+ else {
18
+ return location.origin + location.pathname + url;
19
+ }
20
+ }
6
21
  const PLACEHOLDER_SRC = "https://static.openreplay.com/tracker/placeholder.jpeg";
7
22
  function default_1(app) {
8
23
  function sendPlaceholder(id, node) {
@@ -24,17 +39,21 @@ function default_1(app) {
24
39
  if (!complete) {
25
40
  return;
26
41
  }
42
+ const resolvedSrc = resolveURL(src || ''); // Src type is null sometimes. - is it true?
27
43
  if (naturalWidth === 0 && naturalHeight === 0) {
28
- if (src != null && (0, utils_js_1.isURL)(src)) { // TODO: How about relative urls ? Src type is null sometimes.
29
- app.send(new messages_js_1.ResourceTiming((0, utils_js_1.timestamp)(), 0, 0, 0, 0, 0, src, 'img'));
44
+ if ((0, utils_js_1.isURL)(resolvedSrc)) {
45
+ app.send(new messages_js_1.ResourceTiming((0, utils_js_1.timestamp)(), 0, 0, 0, 0, 0, resolvedSrc, 'img'));
30
46
  }
31
47
  }
32
- else if (src.length >= 1e5 || app.sanitizer.isMasked(id)) {
48
+ else if (resolvedSrc.length >= 1e5 || app.sanitizer.isMasked(id)) {
33
49
  sendPlaceholder(id, this);
34
50
  }
35
51
  else {
36
- app.send(new messages_js_1.SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
37
- srcset && app.send(new messages_js_1.SetNodeAttribute(id, 'srcset', srcset));
52
+ app.send(new messages_js_1.SetNodeAttribute(id, 'src', resolvedSrc));
53
+ if (srcset) {
54
+ const resolvedSrcset = srcset.split(',').map(str => resolveURL(str)).join(',');
55
+ app.send(new messages_js_1.SetNodeAttribute(id, 'srcset', resolvedSrcset));
56
+ }
38
57
  }
39
58
  });
40
59
  const observer = new MutationObserver((mutations) => {
package/cjs/utils.js CHANGED
@@ -14,7 +14,7 @@ function normSpaces(str) {
14
14
  exports.normSpaces = normSpaces;
15
15
  // isAbsoluteUrl regexp: /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url)
16
16
  function isURL(s) {
17
- return s.substr(0, 8) === 'https://' || s.substr(0, 7) === 'http://';
17
+ return s.startsWith('https://') || s.startsWith('http://');
18
18
  }
19
19
  exports.isURL = isURL;
20
20
  exports.IN_BROWSER = !(typeof window === "undefined");
@@ -46,6 +46,8 @@ declare type AppOptions = {
46
46
  __debug__?: LoggerOptions;
47
47
  localStorage: Storage;
48
48
  sessionStorage: Storage;
49
+ maxMemorySize: number;
50
+ memoryCheckInterval: number;
49
51
  onStart?: StartCallback;
50
52
  } & WebworkerOptions;
51
53
  export declare type Options = AppOptions & ObserverOptions & SanitizerOptions;
@@ -60,6 +62,7 @@ export default class App {
60
62
  readonly session: Session;
61
63
  readonly localStorage: Storage;
62
64
  readonly sessionStorage: Storage;
65
+ private gc;
63
66
  private readonly messages;
64
67
  private readonly observer;
65
68
  private readonly startCallbacks;
@@ -103,6 +106,7 @@ export default class App {
103
106
  resetNextPageSession(flag: boolean): void;
104
107
  private _start;
105
108
  start(options?: StartOptions): Promise<StartPromiseReturn>;
106
- stop(calledFromAPI?: boolean): void;
109
+ stop(calledFromAPI?: boolean, restarting?: boolean): void;
110
+ restart(): void;
107
111
  }
108
112
  export {};
package/lib/app/index.js CHANGED
@@ -29,7 +29,7 @@ export default class App {
29
29
  this.stopCallbacks = [];
30
30
  this.commitCallbacks = [];
31
31
  this.activityState = ActivityState.NotActive;
32
- this.version = '3.5.14'; // TODO: version compatability check inside each plugin.
32
+ this.version = '3.5.16-beta.1'; // TODO: version compatability check inside each plugin.
33
33
  this.projectKey = projectKey;
34
34
  this.options = Object.assign({
35
35
  revID: '',
@@ -45,6 +45,8 @@ export default class App {
45
45
  __debug_report_edp: null,
46
46
  localStorage: window.localStorage,
47
47
  sessionStorage: window.sessionStorage,
48
+ maxMemorySize: 650 * 1e6,
49
+ memoryCheckInterval: 2 * 60 * 1000,
48
50
  }, options);
49
51
  this.revID = this.options.revID;
50
52
  this.sanitizer = new Sanitizer(this, options);
@@ -313,6 +315,16 @@ export default class App {
313
315
  this.observer.observe();
314
316
  this.ticker.start();
315
317
  this.notify.log("OpenReplay tracking started.");
318
+ // GC
319
+ if (this.gc) {
320
+ clearInterval(this.gc);
321
+ }
322
+ this.gc = setInterval(() => {
323
+ // @ts-ignore
324
+ if (window.performance.memory.usedJSHeapSize > this.options.maxMemorySize) {
325
+ this.restart();
326
+ }
327
+ }, this.options.memoryCheckInterval);
316
328
  // get rid of onStart ?
317
329
  if (typeof this.options.onStart === 'function') {
318
330
  this.options.onStart(onStartInfo);
@@ -346,7 +358,7 @@ export default class App {
346
358
  });
347
359
  }
348
360
  }
349
- stop(calledFromAPI = false) {
361
+ stop(calledFromAPI = false, restarting = false) {
350
362
  if (this.activityState !== ActivityState.NotActive) {
351
363
  try {
352
364
  this.sanitizer.clear();
@@ -358,7 +370,7 @@ export default class App {
358
370
  this.session.reset();
359
371
  }
360
372
  this.notify.log("OpenReplay tracking stopped.");
361
- if (this.worker) {
373
+ if (this.worker && !restarting) {
362
374
  this.worker.postMessage("stop");
363
375
  }
364
376
  }
@@ -367,4 +379,8 @@ export default class App {
367
379
  }
368
380
  }
369
381
  }
382
+ restart() {
383
+ this.stop(false, true);
384
+ this.start({ forceNew: false });
385
+ }
370
386
  }
@@ -1,7 +1,7 @@
1
1
  declare type NodeCallback = (node: Node, isStart: boolean) => void;
2
2
  export default class Nodes {
3
3
  private readonly node_id;
4
- private readonly nodes;
4
+ private nodes;
5
5
  private readonly nodeCallbacks;
6
6
  private readonly elementListeners;
7
7
  constructor(node_id: string);
package/lib/app/nodes.js CHANGED
@@ -45,6 +45,12 @@ export default class Nodes {
45
45
  }
46
46
  return id;
47
47
  }
48
+ // cleanTree() {
49
+ // if (this.nodes.length > 10000) {
50
+ // this.nodes = this.nodes.filter((n) => n !== undefined && document.contains(n))
51
+ // }
52
+ // return;
53
+ // }
48
54
  callNodeCallbacks(node, isStart) {
49
55
  this.nodeCallbacks.forEach((cb) => cb(node, isStart));
50
56
  }
@@ -155,7 +155,7 @@ export default class Observer {
155
155
  if (isNew) {
156
156
  this.recents.set(id, RecentsType.New);
157
157
  }
158
- else if (!this.recents.has(id)) {
158
+ else if (this.recents.get(id) !== RecentsType.New) { // can we do just `else` here?
159
159
  this.recents.set(id, RecentsType.Removed);
160
160
  }
161
161
  }
@@ -180,6 +180,7 @@ export default class Observer {
180
180
  if (id !== undefined && this.recents.get(id) === RecentsType.Removed) {
181
181
  this.app.send(new RemoveNode(id));
182
182
  }
183
+ return id;
183
184
  }
184
185
  // A top-consumption function on the infinite lists test. (~1% of performance resources)
185
186
  _commitNode(id, node) {
@@ -193,6 +194,8 @@ export default class Observer {
193
194
  // TODO: Clean the logic (though now it workd fine)
194
195
  if (!hasTag(node, "HTML") || !this.isTopContext) {
195
196
  if (parent === null) {
197
+ // Sometimes one observation contains attribute mutations for the removimg node, which gets ignored here.
198
+ // That shouldn't affect the visual rendering ( should it? )
196
199
  this.unbindNode(node);
197
200
  return false;
198
201
  }
@@ -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.date.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.es2020.number.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/common/types.ts","../../src/common/messages.ts","../../src/common/webworker.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":"f5c28122bee592cfaf5c72ed7bcc47f453b79778ffa6e301f45d21a0970719d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","impliedFormat":1},{"version":"7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","impliedFormat":1},{"version":"8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","impliedFormat":1},{"version":"5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","impliedFormat":1},{"version":"e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","impliedFormat":1},{"version":"1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","impliedFormat":1},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true,"impliedFormat":1},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true,"impliedFormat":1},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","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":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","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":"cd483c056da900716879771893a3c9772b66c3c88f8943b4205aec738a94b1d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true,"impliedFormat":1},{"version":"c37f8a49593a0030eecb51bbfa270e709bec9d79a6cc3bb851ef348d4e6b26f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f2ce078b846e85a1e1d9608ee441d1b01babad7059966dafb3fb203c0be58b3","signature":"bb0fa248710a48974d667db1160c447703c893e03215d4ce4f459dae1808b37f","impliedFormat":99},{"version":"57f6a26ef13806a81f4fd41f0afc9745f8133850172d593bd8a873f8ac8ef8e1","signature":"d3b3836cbf2ca0d996b56065e5b66dd5c2e483e2aed61f11fc17e99b1d002411","impliedFormat":99},{"version":"f7bf98d3ccfb7f6ef1048b3e7a947df1494dd7a5ee1013745450814613920c51","signature":"fa1298efbba0e5b532e59a74af1681ea116ae8fb8ef9673f257fd72cd56a9690","impliedFormat":99},{"version":"89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","impliedFormat":1},{"version":"9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","impliedFormat":1},{"version":"a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a","impliedFormat":1},{"version":"bd62cf55d89484b34824808701fc0f4daca629878817bf65eec98a9bbdb1223a","affectsGlobalScope":true,"impliedFormat":1},{"version":"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9","impliedFormat":1},{"version":"3e4624c306340ad303cc536a07004e81336c3f088308a9e4a9f4c957a3cda2fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","impliedFormat":1},{"version":"5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713","impliedFormat":1},{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","impliedFormat":1},{"version":"025fc13211ed47d2798269017af3ec869122a050d5431a6ad3c1997900e65c58","impliedFormat":1},{"version":"bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","impliedFormat":1},{"version":"75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","impliedFormat":1},{"version":"f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","impliedFormat":1},{"version":"14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","impliedFormat":1},{"version":"5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea","impliedFormat":1},{"version":"249a2b90439cdfd51709539fbfa4dfe0791cbae6efce1e9b327ba8f8cd703f49","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f60ac046e587e917d739f1edc77540eb0ec34f83090dae4ebd5f96c1c9578d4","impliedFormat":1},{"version":"a9b6b0f7b1e30359283b131ba6d1c51ee2d3601a2f12e1623141e6a1a60c92a5","impliedFormat":1},{"version":"74f2bb83d1ccf390f48681be57a30c09e85b4c7a801267746e382b2386fc667e","impliedFormat":1},{"version":"7bac475dcdd9f7e4e9da934d32c305bc889c4ce3c8ac0ef45a93a8d670fff607","impliedFormat":1},{"version":"5d357e7965026197a3152fa4e990fa7a4cbaf1578a17dff920ff1a71a325e198","impliedFormat":1},{"version":"8acf99b1c8682276a63ea5bb68433782715892726b97e4604a415e4e56bce41c","impliedFormat":1},{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b145a2351f5cf16abf999c8d5f4481c74dffdc54ec1e9a89992e2622e1226c5","impliedFormat":1},{"version":"a907bf91df26df2400858ef75f749498fb5cf00062bf90a737ac3949cc07978d","impliedFormat":1},{"version":"d270fd4b565eda11a0a737c181892316b7a1ace06c7988d0246219c3df11db06","impliedFormat":1},{"version":"70caef0271088abc5f5ae7ff6d84421d35bb192b690fbaa1b2ecf2b0ef01deb6","impliedFormat":1},{"version":"59a638a504490fecaacf0020b9814b6abee37edb66047eb1ab9f7c2274bf1da0","affectsGlobalScope":true,"impliedFormat":1},{"version":"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","impliedFormat":1},{"version":"d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","impliedFormat":1},{"version":"8c4c1a64db28930732033c31418f817dcb9d09d706766707ae6d38f23faf0c53","impliedFormat":1},{"version":"25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","impliedFormat":1},{"version":"12a70315c8281e46d65696086dd25827408e967b305a22276ae2779fe519e0fe","impliedFormat":1},{"version":"1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","impliedFormat":1},{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true,"impliedFormat":1},{"version":"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","impliedFormat":1},{"version":"23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","impliedFormat":1},{"version":"29d613c3964ea75b2b4e0d17098245c34529282e9cc72b7e4eeb2a7b12c27cb7","impliedFormat":1},{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","impliedFormat":1},{"version":"a381f079c4804442f179d742fdb2e495fe28d67a47cac673485f75ae2e77aeca","impliedFormat":1},{"version":"3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","impliedFormat":1},{"version":"5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2","impliedFormat":1},{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2af17363f8a062e3a8cd1b26030af0058b3f86e783f4fc6aa9f57247f240ebaa","impliedFormat":1},{"version":"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","impliedFormat":1},{"version":"dfe08140492cdc135fb7fd9c4a652c05207b61a436906079b87da1d3111314bf","impliedFormat":1},{"version":"e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","impliedFormat":1},{"version":"089e1f8603cbc35ab977c8dcc662eb754b82fca32ed1dfb16bd682726c2d5432","impliedFormat":1},{"version":"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"82fc37849846a3a0264047621d5beb6ce2ddeb2f83bdee2c79523af3c3282d97","impliedFormat":1},{"version":"8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","impliedFormat":1},{"version":"8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","impliedFormat":1}],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[89],[60,61,89,96,97],[45,89],[48,89],[49,54,89],[50,60,61,68,77,88,89],[50,51,60,68,89],[52,89],[53,54,61,69,89],[54,77,85,89],[55,57,60,68,89],[56,89],[57,58,89],[59,60,89],[60,89],[60,61,62,77,88,89],[60,61,62,77,80,89],[89,93],[63,68,77,88,89],[60,61,63,64,68,77,85,88,89],[63,65,77,85,88,89],[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,93,94,95],[60,66,89],[67,88,89],[57,60,68,77,89],[69,89],[70,89],[48,71,89],[72,87,89,93],[73,89],[74,89],[60,75,89],[75,76,89,91],[60,77,78,79,80,89],[77,79,89],[77,78,89],[80,89],[81,89],[60,83,84,89],[83,84,89],[54,68,77,85,89],[86,89],[68,87,89],[49,63,74,88,89],[54,89],[77,89,90],[89,91],[89,92],[49,54,60,62,71,77,88,89,91,93],[77,89,94],[89,96],[41,89],[41]],"referencedMap":[[44,1],[98,2],[99,1],[97,1],[45,3],[46,3],[48,4],[49,5],[50,6],[51,7],[52,8],[53,9],[54,10],[55,11],[56,12],[57,13],[58,13],[59,14],[60,15],[61,16],[62,17],[47,18],[95,1],[63,19],[64,20],[65,21],[96,22],[66,23],[67,24],[68,25],[69,26],[70,27],[71,28],[72,29],[73,30],[74,31],[75,32],[76,33],[77,34],[79,35],[78,36],[80,37],[81,38],[82,1],[83,39],[84,40],[85,41],[86,42],[87,43],[88,44],[89,45],[90,46],[91,47],[92,48],[93,49],[94,50],[100,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],[33,1],[38,1],[39,1],[34,1],[35,1],[36,1],[37,1],[1,1],[40,1],[42,52],[41,1],[43,1]],"exportedModulesMap":[[44,1],[98,2],[99,1],[97,1],[45,3],[46,3],[48,4],[49,5],[50,6],[51,7],[52,8],[53,9],[54,10],[55,11],[56,12],[57,13],[58,13],[59,14],[60,15],[61,16],[62,17],[47,18],[95,1],[63,19],[64,20],[65,21],[96,22],[66,23],[67,24],[68,25],[69,26],[70,27],[71,28],[72,29],[73,30],[74,31],[75,32],[76,33],[77,34],[79,35],[78,36],[80,37],[81,38],[82,1],[83,39],[84,40],[85,41],[86,42],[87,43],[88,44],[89,45],[90,46],[91,47],[92,48],[93,49],[94,50],[100,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],[33,1],[38,1],[39,1],[34,1],[35,1],[36,1],[37,1],[1,1],[40,1],[42,53]],"semanticDiagnosticsPerFile":[44,98,99,97,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,47,95,63,64,65,96,66,67,68,69,70,71,72,73,74,75,76,77,79,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,100,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,33,38,39,34,35,36,37,1,40,42,41,43]},"version":"4.7.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.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.date.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.es2020.number.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/common/types.ts","../../src/common/messages.ts","../../src/common/webworker.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":"f5c28122bee592cfaf5c72ed7bcc47f453b79778ffa6e301f45d21a0970719d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","impliedFormat":1},{"version":"7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","impliedFormat":1},{"version":"8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","impliedFormat":1},{"version":"5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","impliedFormat":1},{"version":"e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","impliedFormat":1},{"version":"1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","impliedFormat":1},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true,"impliedFormat":1},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true,"impliedFormat":1},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","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":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","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":"cd483c056da900716879771893a3c9772b66c3c88f8943b4205aec738a94b1d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true,"impliedFormat":1},{"version":"c37f8a49593a0030eecb51bbfa270e709bec9d79a6cc3bb851ef348d4e6b26f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f2ce078b846e85a1e1d9608ee441d1b01babad7059966dafb3fb203c0be58b3","signature":"bb0fa248710a48974d667db1160c447703c893e03215d4ce4f459dae1808b37f","impliedFormat":99},{"version":"57f6a26ef13806a81f4fd41f0afc9745f8133850172d593bd8a873f8ac8ef8e1","signature":"d3b3836cbf2ca0d996b56065e5b66dd5c2e483e2aed61f11fc17e99b1d002411","impliedFormat":99},{"version":"f7bf98d3ccfb7f6ef1048b3e7a947df1494dd7a5ee1013745450814613920c51","signature":"fa1298efbba0e5b532e59a74af1681ea116ae8fb8ef9673f257fd72cd56a9690","impliedFormat":99},{"version":"89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","impliedFormat":1},{"version":"9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","impliedFormat":1},{"version":"a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a","impliedFormat":1},{"version":"baec8b4c43740360bd330f9d1870063a421f4c0070580f329777c0df8604bc72","affectsGlobalScope":true,"impliedFormat":1},{"version":"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9","impliedFormat":1},{"version":"3e4624c306340ad303cc536a07004e81336c3f088308a9e4a9f4c957a3cda2fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","impliedFormat":1},{"version":"5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713","impliedFormat":1},{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","impliedFormat":1},{"version":"025fc13211ed47d2798269017af3ec869122a050d5431a6ad3c1997900e65c58","impliedFormat":1},{"version":"bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","impliedFormat":1},{"version":"75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","impliedFormat":1},{"version":"f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","impliedFormat":1},{"version":"14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","impliedFormat":1},{"version":"5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea","impliedFormat":1},{"version":"249a2b90439cdfd51709539fbfa4dfe0791cbae6efce1e9b327ba8f8cd703f49","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f60ac046e587e917d739f1edc77540eb0ec34f83090dae4ebd5f96c1c9578d4","impliedFormat":1},{"version":"a9b6b0f7b1e30359283b131ba6d1c51ee2d3601a2f12e1623141e6a1a60c92a5","impliedFormat":1},{"version":"74f2bb83d1ccf390f48681be57a30c09e85b4c7a801267746e382b2386fc667e","impliedFormat":1},{"version":"7bac475dcdd9f7e4e9da934d32c305bc889c4ce3c8ac0ef45a93a8d670fff607","impliedFormat":1},{"version":"5d357e7965026197a3152fa4e990fa7a4cbaf1578a17dff920ff1a71a325e198","impliedFormat":1},{"version":"8acf99b1c8682276a63ea5bb68433782715892726b97e4604a415e4e56bce41c","impliedFormat":1},{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b145a2351f5cf16abf999c8d5f4481c74dffdc54ec1e9a89992e2622e1226c5","impliedFormat":1},{"version":"a907bf91df26df2400858ef75f749498fb5cf00062bf90a737ac3949cc07978d","impliedFormat":1},{"version":"d270fd4b565eda11a0a737c181892316b7a1ace06c7988d0246219c3df11db06","impliedFormat":1},{"version":"70caef0271088abc5f5ae7ff6d84421d35bb192b690fbaa1b2ecf2b0ef01deb6","impliedFormat":1},{"version":"59a638a504490fecaacf0020b9814b6abee37edb66047eb1ab9f7c2274bf1da0","affectsGlobalScope":true,"impliedFormat":1},{"version":"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","impliedFormat":1},{"version":"d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","impliedFormat":1},{"version":"8c4c1a64db28930732033c31418f817dcb9d09d706766707ae6d38f23faf0c53","impliedFormat":1},{"version":"25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","impliedFormat":1},{"version":"12a70315c8281e46d65696086dd25827408e967b305a22276ae2779fe519e0fe","impliedFormat":1},{"version":"1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","impliedFormat":1},{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true,"impliedFormat":1},{"version":"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","impliedFormat":1},{"version":"23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","impliedFormat":1},{"version":"29d613c3964ea75b2b4e0d17098245c34529282e9cc72b7e4eeb2a7b12c27cb7","impliedFormat":1},{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","impliedFormat":1},{"version":"a381f079c4804442f179d742fdb2e495fe28d67a47cac673485f75ae2e77aeca","impliedFormat":1},{"version":"3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","impliedFormat":1},{"version":"5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2","impliedFormat":1},{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2af17363f8a062e3a8cd1b26030af0058b3f86e783f4fc6aa9f57247f240ebaa","impliedFormat":1},{"version":"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","impliedFormat":1},{"version":"dfe08140492cdc135fb7fd9c4a652c05207b61a436906079b87da1d3111314bf","impliedFormat":1},{"version":"e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","impliedFormat":1},{"version":"089e1f8603cbc35ab977c8dcc662eb754b82fca32ed1dfb16bd682726c2d5432","impliedFormat":1},{"version":"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"82fc37849846a3a0264047621d5beb6ce2ddeb2f83bdee2c79523af3c3282d97","impliedFormat":1},{"version":"8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","impliedFormat":1},{"version":"8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","impliedFormat":1}],"options":{"composite":true,"declaration":true,"module":5,"noImplicitAny":true,"noImplicitThis":true,"outDir":"..","rootDir":"../../src","strictNullChecks":true,"target":2},"fileIdsList":[[89],[60,61,89,96,97],[45,89],[48,89],[49,54,89],[50,60,61,68,77,88,89],[50,51,60,68,89],[52,89],[53,54,61,69,89],[54,77,85,89],[55,57,60,68,89],[56,89],[57,58,89],[59,60,89],[60,89],[60,61,62,77,88,89],[60,61,62,77,80,89],[89,93],[63,68,77,88,89],[60,61,63,64,68,77,85,88,89],[63,65,77,85,88,89],[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,93,94,95],[60,66,89],[67,88,89],[57,60,68,77,89],[69,89],[70,89],[48,71,89],[72,87,89,93],[73,89],[74,89],[60,75,89],[75,76,89,91],[60,77,78,79,80,89],[77,79,89],[77,78,89],[80,89],[81,89],[60,83,84,89],[83,84,89],[54,68,77,85,89],[86,89],[68,87,89],[49,63,74,88,89],[54,89],[77,89,90],[89,91],[89,92],[49,54,60,62,71,77,88,89,91,93],[77,89,94],[89,96],[41,89],[41]],"referencedMap":[[44,1],[98,2],[99,1],[97,1],[45,3],[46,3],[48,4],[49,5],[50,6],[51,7],[52,8],[53,9],[54,10],[55,11],[56,12],[57,13],[58,13],[59,14],[60,15],[61,16],[62,17],[47,18],[95,1],[63,19],[64,20],[65,21],[96,22],[66,23],[67,24],[68,25],[69,26],[70,27],[71,28],[72,29],[73,30],[74,31],[75,32],[76,33],[77,34],[79,35],[78,36],[80,37],[81,38],[82,1],[83,39],[84,40],[85,41],[86,42],[87,43],[88,44],[89,45],[90,46],[91,47],[92,48],[93,49],[94,50],[100,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],[33,1],[38,1],[39,1],[34,1],[35,1],[36,1],[37,1],[1,1],[40,1],[42,52],[41,1],[43,1]],"exportedModulesMap":[[44,1],[98,2],[99,1],[97,1],[45,3],[46,3],[48,4],[49,5],[50,6],[51,7],[52,8],[53,9],[54,10],[55,11],[56,12],[57,13],[58,13],[59,14],[60,15],[61,16],[62,17],[47,18],[95,1],[63,19],[64,20],[65,21],[96,22],[66,23],[67,24],[68,25],[69,26],[70,27],[71,28],[72,29],[73,30],[74,31],[75,32],[76,33],[77,34],[79,35],[78,36],[80,37],[81,38],[82,1],[83,39],[84,40],[85,41],[86,42],[87,43],[88,44],[89,45],[90,46],[91,47],[92,48],[93,49],[94,50],[100,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],[33,1],[38,1],[39,1],[34,1],[35,1],[36,1],[37,1],[1,1],[40,1],[42,53]],"semanticDiagnosticsPerFile":[44,98,99,97,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,47,95,63,64,65,96,66,67,68,69,70,71,72,73,74,75,76,77,79,78,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,100,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,33,38,39,34,35,36,37,1,40,42,41,43]},"version":"4.7.4"}
package/lib/index.js CHANGED
@@ -123,7 +123,7 @@ export default class API {
123
123
  // no-cors issue only with text/plain or not-set Content-Type
124
124
  // req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
125
125
  req.send(JSON.stringify({
126
- trackerVersion: '3.5.14',
126
+ trackerVersion: '3.5.16-beta.1',
127
127
  projectKey: options.projectKey,
128
128
  doNotTrack,
129
129
  // TODO: add precise reason (an exact API missing)
@@ -1,6 +1,21 @@
1
1
  import { timestamp, isURL } from "../utils.js";
2
2
  import { ResourceTiming, SetNodeAttributeURLBased, SetNodeAttribute } from "../common/messages.js";
3
3
  import { hasTag } from "../app/guards.js";
4
+ function resolveURL(url, location = document.location) {
5
+ url = url.trim();
6
+ if (url.startsWith('/')) {
7
+ return location.origin + url;
8
+ }
9
+ else if (url.startsWith('http://') ||
10
+ url.startsWith('https://') ||
11
+ url.startsWith('data:') // any other possible value here?
12
+ ) {
13
+ return url;
14
+ }
15
+ else {
16
+ return location.origin + location.pathname + url;
17
+ }
18
+ }
4
19
  const PLACEHOLDER_SRC = "https://static.openreplay.com/tracker/placeholder.jpeg";
5
20
  export default function (app) {
6
21
  function sendPlaceholder(id, node) {
@@ -22,17 +37,21 @@ export default function (app) {
22
37
  if (!complete) {
23
38
  return;
24
39
  }
40
+ const resolvedSrc = resolveURL(src || ''); // Src type is null sometimes. - is it true?
25
41
  if (naturalWidth === 0 && naturalHeight === 0) {
26
- if (src != null && isURL(src)) { // TODO: How about relative urls ? Src type is null sometimes.
27
- app.send(new ResourceTiming(timestamp(), 0, 0, 0, 0, 0, src, 'img'));
42
+ if (isURL(resolvedSrc)) {
43
+ app.send(new ResourceTiming(timestamp(), 0, 0, 0, 0, 0, resolvedSrc, 'img'));
28
44
  }
29
45
  }
30
- else if (src.length >= 1e5 || app.sanitizer.isMasked(id)) {
46
+ else if (resolvedSrc.length >= 1e5 || app.sanitizer.isMasked(id)) {
31
47
  sendPlaceholder(id, this);
32
48
  }
33
49
  else {
34
- app.send(new SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
35
- srcset && app.send(new SetNodeAttribute(id, 'srcset', srcset));
50
+ app.send(new SetNodeAttribute(id, 'src', resolvedSrc));
51
+ if (srcset) {
52
+ const resolvedSrcset = srcset.split(',').map(str => resolveURL(str)).join(',');
53
+ app.send(new SetNodeAttribute(id, 'srcset', resolvedSrcset));
54
+ }
36
55
  }
37
56
  });
38
57
  const observer = new MutationObserver((mutations) => {
package/lib/utils.js CHANGED
@@ -9,7 +9,7 @@ export function normSpaces(str) {
9
9
  }
10
10
  // isAbsoluteUrl regexp: /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url)
11
11
  export function isURL(s) {
12
- return s.substr(0, 8) === 'https://' || s.substr(0, 7) === 'http://';
12
+ return s.startsWith('https://') || s.startsWith('http://');
13
13
  }
14
14
  export const IN_BROWSER = !(typeof window === "undefined");
15
15
  // TODO: JOIN IT WITH LOGGER somehow (use logging decorators?); Don't forget about index.js loggin when there is no logger instance.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openreplay/tracker",
3
3
  "description": "The OpenReplay tracker main package",
4
- "version": "3.5.14",
4
+ "version": "3.5.16-beta.1",
5
5
  "keywords": [
6
6
  "logging",
7
7
  "replay"
@@ -18,7 +18,7 @@
18
18
  "clean": "rm -Rf build && rm -Rf lib && rm -Rf cjs",
19
19
  "tsc": "tsc -b src/main && tsc -b src/webworker && tsc --project src/main/tsconfig-cjs.json",
20
20
  "rollup": "rollup --config rollup.config.js",
21
- "compile": "node --experimental-modules --experimental-json-modules scripts/compile.js",
21
+ "compile": "node --experimental-modules --experimental-json-modules scripts/compile.cjs",
22
22
  "build": "npm run clean && npm run tsc && npm run rollup && npm run compile",
23
23
  "prepare": "node scripts/checkver.cjs && npm run build"
24
24
  },
@@ -41,6 +41,6 @@
41
41
  "error-stack-parser": "^2.0.6"
42
42
  },
43
43
  "engines": {
44
- "node": ">=14.15"
44
+ "node": ">=14.0"
45
45
  }
46
46
  }