@openreplay/tracker 3.5.13-beta.0 → 3.5.15

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.
@@ -25,28 +25,35 @@ function isObservable(node) {
25
25
  }
26
26
  return !isIgnored(node);
27
27
  }
28
+ /*
29
+ TODO:
30
+ - fix unbinding logic + send all removals first (ensure sequence is correct)
31
+ - use document as a 0-node in the upper context (should be updated in player at first)
32
+ */
33
+ var RecentsType;
34
+ (function (RecentsType) {
35
+ RecentsType[RecentsType["New"] = 0] = "New";
36
+ RecentsType[RecentsType["Removed"] = 1] = "Removed";
37
+ RecentsType[RecentsType["Changed"] = 2] = "Changed";
38
+ })(RecentsType || (RecentsType = {}));
28
39
  export default class Observer {
29
40
  constructor(app, isTopContext = false) {
30
41
  this.app = app;
31
42
  this.isTopContext = isTopContext;
32
43
  this.commited = [];
44
+ this.recents = new Map();
33
45
  this.indexes = [];
34
- this.attributesList = [];
46
+ this.attributesMap = new Map();
35
47
  this.textSet = new Set();
36
- this.newSet = new Set();
37
- this.affectedSet = new Set();
38
48
  this.observer = new MutationObserver(this.app.safe((mutations) => {
39
- for (const mutation of mutations) {
49
+ for (const mutation of mutations) { // mutations order is sequential
40
50
  const target = mutation.target;
41
51
  const type = mutation.type;
42
- if (!isObservable(target) /*|| !inDocument() */) {
52
+ if (!isObservable(target)) {
43
53
  continue;
44
54
  }
45
55
  if (type === 'childList') {
46
56
  for (let i = 0; i < mutation.removedNodes.length; i++) {
47
- // TODO: handle node removal separately from binding.
48
- // Node removals should go first in the commit.
49
- // To check: MoveNode and other possible unbinding behaviours
50
57
  this.bindTree(mutation.removedNodes[i]);
51
58
  }
52
59
  for (let i = 0; i < mutation.addedNodes.length; i++) {
@@ -58,22 +65,23 @@ export default class Observer {
58
65
  if (id === undefined) {
59
66
  continue;
60
67
  }
68
+ if (!this.recents.has(id)) {
69
+ this.recents.set(id, RecentsType.Changed); // TODO only when altered
70
+ }
61
71
  if (type === 'attributes') {
62
72
  const name = mutation.attributeName;
63
73
  if (name === null) {
64
74
  continue;
65
75
  }
66
- let attr = this.attributesList[id];
76
+ let attr = this.attributesMap.get(id);
67
77
  if (attr === undefined) {
68
- this.attributesList[id] = attr = new Set();
78
+ this.attributesMap.set(id, attr = new Set());
69
79
  }
70
80
  attr.add(name);
71
- this.affectedSet.add(id);
72
81
  continue;
73
82
  }
74
83
  if (type === 'characterData') {
75
84
  this.textSet.add(id);
76
- this.affectedSet.add(id);
77
85
  continue;
78
86
  }
79
87
  }
@@ -82,11 +90,10 @@ export default class Observer {
82
90
  }
83
91
  clear() {
84
92
  this.commited.length = 0;
93
+ this.recents.clear();
85
94
  this.indexes.length = 1;
86
- this.attributesList.length = 0;
95
+ this.attributesMap.clear();
87
96
  this.textSet.clear();
88
- this.newSet.clear();
89
- this.affectedSet.clear();
90
97
  }
91
98
  sendNodeAttribute(id, node, name, value) {
92
99
  if (isSVGElement(node)) {
@@ -136,7 +143,7 @@ export default class Observer {
136
143
  this.app.send(new SetNodeAttribute(id, name, value));
137
144
  }
138
145
  sendNodeData(id, parentElement, data) {
139
- if (hasTag(parentElement, "STYLE")) {
146
+ if (hasTag(parentElement, "STYLE") || hasTag(parentElement, "style")) {
140
147
  this.app.send(new SetCSSDataURLBased(id, data, this.app.getBaseHref()));
141
148
  return;
142
149
  }
@@ -146,9 +153,11 @@ export default class Observer {
146
153
  bindNode(node) {
147
154
  const [id, isNew] = this.app.nodes.registerNode(node);
148
155
  if (isNew) {
149
- this.newSet.add(id);
156
+ this.recents.set(id, RecentsType.New);
157
+ }
158
+ else if (this.recents.get(id) !== RecentsType.New) { // can we do just `else` here?
159
+ this.recents.set(id, RecentsType.Removed);
150
160
  }
151
- this.affectedSet.add(id);
152
161
  }
153
162
  bindTree(node) {
154
163
  if (!isObservable(node)) {
@@ -168,11 +177,11 @@ export default class Observer {
168
177
  }
169
178
  unbindNode(node) {
170
179
  const id = this.app.nodes.unregisterNode(node);
171
- // if (id !== undefined && this.recents[id] === false) { // In the old version it === flase when bindNode() was called on node but it was not new
172
- if (id !== undefined && !this.newSet.has(id) && this.affectedSet.has(id)) { // Unbinding logic should be simplified. Node removals should go first.
180
+ if (id !== undefined && this.recents.get(id) === RecentsType.Removed) {
173
181
  this.app.send(new RemoveNode(id));
174
182
  }
175
183
  }
184
+ // A top-consumption function on the infinite lists test. (~1% of performance resources)
176
185
  _commitNode(id, node) {
177
186
  if (isRootNode(node)) {
178
187
  return true;
@@ -181,9 +190,11 @@ export default class Observer {
181
190
  let parentID;
182
191
  // Disable parent check for the upper context HTMLHtmlElement, because it is root there... (before)
183
192
  // TODO: get rid of "special" cases (there is an issue with CreateDocument altered behaviour though)
184
- // TODO: Clean the logic (though now it workd fine)
193
+ // TODO: Clean the logic (though now it workd fine)
185
194
  if (!hasTag(node, "HTML") || !this.isTopContext) {
186
195
  if (parent === null) {
196
+ // Sometimes one observation contains attribute mutations for the removimg node, which gets ignored here.
197
+ // That shouldn't affect the visual rendering ( should it? )
187
198
  this.unbindNode(node);
188
199
  return false;
189
200
  }
@@ -197,7 +208,11 @@ export default class Observer {
197
208
  return false;
198
209
  }
199
210
  this.app.sanitizer.handleNode(id, parentID, node);
211
+ if (this.app.sanitizer.isMaskedContainer(parentID)) {
212
+ return false;
213
+ }
200
214
  }
215
+ // From here parentID === undefined if node is top context HTML node
201
216
  let sibling = node.previousSibling;
202
217
  while (sibling !== null) {
203
218
  const siblingID = this.app.nodes.getID(sibling);
@@ -211,19 +226,28 @@ export default class Observer {
211
226
  if (sibling === null) {
212
227
  this.indexes[id] = 0;
213
228
  }
214
- const isNew = this.newSet.has(id);
229
+ const recentsType = this.recents.get(id);
230
+ const isNew = recentsType === RecentsType.New;
215
231
  const index = this.indexes[id];
216
232
  if (index === undefined) {
217
233
  throw 'commitNode: missing node index';
218
234
  }
219
- if (isNew === true) {
235
+ if (isNew) {
220
236
  if (isElementNode(node)) {
237
+ let el = node;
221
238
  if (parentID !== undefined) {
222
- this.app.send(new CreateElementNode(id, parentID, index, node.tagName, isSVGElement(node)));
239
+ if (this.app.sanitizer.isMaskedContainer(id)) {
240
+ const width = el.clientWidth;
241
+ const height = el.clientHeight;
242
+ el = node.cloneNode();
243
+ el.style.width = width + 'px';
244
+ el.style.height = height + 'px';
245
+ }
246
+ this.app.send(new CreateElementNode(id, parentID, index, el.tagName, isSVGElement(node)));
223
247
  }
224
- for (let i = 0; i < node.attributes.length; i++) {
225
- const attr = node.attributes[i];
226
- this.sendNodeAttribute(id, node, attr.nodeName, attr.value);
248
+ for (let i = 0; i < el.attributes.length; i++) {
249
+ const attr = el.attributes[i];
250
+ this.sendNodeAttribute(id, el, attr.nodeName, attr.value);
227
251
  }
228
252
  }
229
253
  else if (isTextNode(node)) {
@@ -233,11 +257,10 @@ export default class Observer {
233
257
  }
234
258
  return true;
235
259
  }
236
- if (isNew === false && parentID !== undefined) {
237
- // does this happen a lot?
260
+ if (recentsType === RecentsType.Removed && parentID !== undefined) {
238
261
  this.app.send(new MoveNode(id, parentID, index));
239
262
  }
240
- const attr = this.attributesList[id];
263
+ const attr = this.attributesMap.get(id);
241
264
  if (attr !== undefined) {
242
265
  if (!isElementNode(node)) {
243
266
  throw 'commitNode: node is not an element';
@@ -266,12 +289,12 @@ export default class Observer {
266
289
  }
267
290
  return (this.commited[id] = this._commitNode(id, node));
268
291
  }
269
- commitNodes() {
292
+ commitNodes(isStart = false) {
270
293
  let node;
271
- this.affectedSet.forEach(id => {
294
+ this.recents.forEach((type, id) => {
272
295
  this.commitNode(id);
273
- if (this.newSet.has(id) && (node = this.app.nodes.getNode(id))) {
274
- this.app.nodes.callNodeCallbacks(node);
296
+ if (type === RecentsType.New && (node = this.app.nodes.getNode(id))) {
297
+ this.app.nodes.callNodeCallbacks(node, isStart);
275
298
  }
276
299
  });
277
300
  this.clear();
@@ -288,7 +311,7 @@ export default class Observer {
288
311
  });
289
312
  this.bindTree(nodeToBind);
290
313
  beforeCommit(this.app.nodes.getID(node));
291
- this.commitNodes();
314
+ this.commitNodes(true);
292
315
  }
293
316
  disconnect() {
294
317
  this.observer.disconnect();
@@ -1,4 +1,4 @@
1
- import App from "./index.js";
1
+ import type App from "./index.js";
2
2
  export interface Options {
3
3
  obscureTextEmails: boolean;
4
4
  obscureTextNumbers: boolean;
@@ -6,11 +6,13 @@ export interface Options {
6
6
  export default class Sanitizer {
7
7
  private readonly app;
8
8
  private readonly masked;
9
+ private readonly maskedContainers;
9
10
  private readonly options;
10
11
  constructor(app: App, options: Partial<Options>);
11
12
  handleNode(id: number, parentID: number, node: Node): void;
12
13
  sanitize(id: number, data: string): string;
13
14
  isMasked(id: number): boolean;
15
+ isMaskedContainer(id: number): boolean;
14
16
  getInnerTextSecure(el: HTMLElement): string;
15
17
  clear(): void;
16
18
  }
@@ -4,6 +4,7 @@ export default class Sanitizer {
4
4
  constructor(app, options) {
5
5
  this.app = app;
6
6
  this.masked = new Set();
7
+ this.maskedContainers = new Set();
7
8
  this.options = Object.assign({
8
9
  obscureTextEmails: true,
9
10
  obscureTextNumbers: false,
@@ -11,9 +12,15 @@ export default class Sanitizer {
11
12
  }
12
13
  handleNode(id, parentID, node) {
13
14
  if (this.masked.has(parentID) ||
14
- (isElementNode(node) && hasOpenreplayAttribute(node, 'masked'))) {
15
+ (isElementNode(node) &&
16
+ hasOpenreplayAttribute(node, 'masked'))) {
15
17
  this.masked.add(id);
16
18
  }
19
+ if (this.maskedContainers.has(parentID) ||
20
+ (isElementNode(node) &&
21
+ hasOpenreplayAttribute(node, 'htmlmasked'))) {
22
+ this.maskedContainers.add(id);
23
+ }
17
24
  }
18
25
  sanitize(id, data) {
19
26
  if (this.masked.has(id)) {
@@ -31,6 +38,9 @@ export default class Sanitizer {
31
38
  isMasked(id) {
32
39
  return this.masked.has(id);
33
40
  }
41
+ isMaskedContainer(id) {
42
+ return this.maskedContainers.has(id);
43
+ }
34
44
  getInnerTextSecure(el) {
35
45
  const id = this.app.nodes.getID(el);
36
46
  if (!id) {
@@ -40,5 +50,6 @@ export default class Sanitizer {
40
50
  }
41
51
  clear() {
42
52
  this.masked.clear();
53
+ this.maskedContainers.clear();
43
54
  }
44
55
  }
@@ -1,4 +1,3 @@
1
- import App from "./index.js";
2
1
  interface SessionInfo {
3
2
  sessionID: string | null;
4
3
  metadata: Record<string, string>;
@@ -6,20 +5,16 @@ interface SessionInfo {
6
5
  }
7
6
  declare type OnUpdateCallback = (i: Partial<SessionInfo>) => void;
8
7
  export default class Session {
9
- private app;
10
8
  private metadata;
11
9
  private userID;
12
10
  private sessionID;
13
- private activityState;
14
11
  private callbacks;
15
- constructor(app: App);
16
12
  attachUpdateCallback(cb: OnUpdateCallback): void;
17
13
  private handleUpdate;
18
- update({ userID, metadata, sessionID }: Partial<SessionInfo>): void;
19
- private _setMetadata;
20
- private _setUserID;
14
+ update(newInfo: Partial<SessionInfo>): void;
21
15
  setMetadata(key: string, value: string): void;
22
16
  setUserID(userID: string): void;
23
17
  getInfo(): SessionInfo;
18
+ reset(): void;
24
19
  }
25
20
  export {};
@@ -1,59 +1,41 @@
1
- import { UserID, Metadata } from "../common/messages.js";
2
- var ActivityState;
3
- (function (ActivityState) {
4
- ActivityState[ActivityState["NotActive"] = 0] = "NotActive";
5
- ActivityState[ActivityState["Starting"] = 1] = "Starting";
6
- ActivityState[ActivityState["Active"] = 2] = "Active";
7
- })(ActivityState || (ActivityState = {}));
8
1
  export default class Session {
9
- constructor(app) {
10
- this.app = app;
2
+ constructor() {
11
3
  this.metadata = {};
12
4
  this.userID = null;
13
5
  this.sessionID = null;
14
- this.activityState = ActivityState.NotActive;
15
6
  this.callbacks = [];
16
7
  }
17
8
  attachUpdateCallback(cb) {
18
9
  this.callbacks.push(cb);
19
10
  }
20
- handleUpdate() {
21
- const sessInfo = this.getInfo();
22
- if (sessInfo.userID == null) {
23
- delete sessInfo.userID;
11
+ handleUpdate(newInfo) {
12
+ if (newInfo.userID == null) {
13
+ delete newInfo.userID;
24
14
  }
25
- if (sessInfo.sessionID == null) {
26
- delete sessInfo.sessionID;
15
+ if (newInfo.sessionID == null) {
16
+ delete newInfo.sessionID;
27
17
  }
28
- this.callbacks.forEach(cb => cb(sessInfo));
18
+ this.callbacks.forEach(cb => cb(newInfo));
29
19
  }
30
- update({ userID, metadata, sessionID }) {
31
- if (userID != null) { // TODO clear nullable/undefinable types
32
- this._setUserID(userID);
20
+ update(newInfo) {
21
+ if (newInfo.userID !== undefined) { // TODO clear nullable/undefinable types
22
+ this.userID = newInfo.userID;
33
23
  }
34
- if (metadata !== undefined) {
35
- Object.entries(metadata).forEach(kv => this._setMetadata(...kv));
24
+ if (newInfo.metadata !== undefined) {
25
+ Object.entries(newInfo.metadata).forEach(([k, v]) => this.metadata[k] = v);
36
26
  }
37
- if (sessionID !== undefined) {
38
- this.sessionID = sessionID;
27
+ if (newInfo.sessionID !== undefined) {
28
+ this.sessionID = newInfo.sessionID;
39
29
  }
40
- this.handleUpdate();
41
- }
42
- _setMetadata(key, value) {
43
- this.app.send(new Metadata(key, value));
44
- this.metadata[key] = value;
45
- }
46
- _setUserID(userID) {
47
- this.app.send(new UserID(userID));
48
- this.userID = userID;
30
+ this.handleUpdate(newInfo);
49
31
  }
50
32
  setMetadata(key, value) {
51
- this._setMetadata(key, value);
52
- this.handleUpdate();
33
+ this.metadata[key] = value;
34
+ this.handleUpdate({ metadata: { [key]: value } });
53
35
  }
54
36
  setUserID(userID) {
55
- this._setUserID(userID);
56
- this.handleUpdate();
37
+ this.userID = userID;
38
+ this.handleUpdate({ userID });
57
39
  }
58
40
  getInfo() {
59
41
  return {
@@ -62,4 +44,9 @@ export default class Session {
62
44
  userID: this.userID,
63
45
  };
64
46
  }
47
+ reset() {
48
+ this.metadata = {};
49
+ this.userID = null;
50
+ this.sessionID = null;
51
+ }
65
52
  }
@@ -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.es2020.intl.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/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":"f5c28122bee592cfaf5c72ed7bcc47f453b79778ffa6e301f45d21a0970719d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","impliedFormat":1},{"version":"7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","impliedFormat":1},{"version":"8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","impliedFormat":1},{"version":"5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","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":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd483c056da900716879771893a3c9772b66c3c88f8943b4205aec738a94b1d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"c37f8a49593a0030eecb51bbfa270e709bec9d79a6cc3bb851ef348d4e6b26f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f2ce078b846e85a1e1d9608ee441d1b01babad7059966dafb3fb203c0be58b3","signature":"bb0fa248710a48974d667db1160c447703c893e03215d4ce4f459dae1808b37f","impliedFormat":99},{"version":"57f6a26ef13806a81f4fd41f0afc9745f8133850172d593bd8a873f8ac8ef8e1","signature":"d3b3836cbf2ca0d996b56065e5b66dd5c2e483e2aed61f11fc17e99b1d002411","impliedFormat":99},{"version":"7aca4d4f46ed6db51ccb2c75e628f7bef921529e89bd4b5b96bebaf66647e517","signature":"fa1298efbba0e5b532e59a74af1681ea116ae8fb8ef9673f257fd72cd56a9690","impliedFormat":99},{"version":"725d9be2fd48440256f4deb00649adffdbc5ecd282b09e89d4e200663792c34c","impliedFormat":1},{"version":"89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","impliedFormat":1},{"version":"2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682","impliedFormat":1},{"version":"61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878","impliedFormat":1},{"version":"465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7","impliedFormat":1},{"version":"123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803","impliedFormat":1},{"version":"525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d","impliedFormat":1},{"version":"90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720","impliedFormat":1},{"version":"d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb","impliedFormat":1},{"version":"7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78","impliedFormat":1},{"version":"aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346","impliedFormat":1},{"version":"4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e","impliedFormat":1},{"version":"eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9","impliedFormat":1},{"version":"e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60","impliedFormat":1},{"version":"fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7","impliedFormat":1},{"version":"9440dcf960685f7ec10856891a6cebb52a5ae8cef6a2e85daf9476dafd346cbe","impliedFormat":1},{"version":"5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90","impliedFormat":1},{"version":"c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a","impliedFormat":1},{"version":"6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947","impliedFormat":1},{"version":"bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665","impliedFormat":1},{"version":"46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498","impliedFormat":1},{"version":"ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34","impliedFormat":1},{"version":"84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35","impliedFormat":1},{"version":"0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45","impliedFormat":1},{"version":"0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e","affectsGlobalScope":true,"impliedFormat":1},{"version":"30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1","impliedFormat":1},{"version":"9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164","impliedFormat":1},{"version":"6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9","impliedFormat":1},{"version":"dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4","impliedFormat":1},{"version":"406a63c7e94107394341e97dbdc3312a1ecea75571d067a69eaa213786d9f154","impliedFormat":1},{"version":"d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457","impliedFormat":1},{"version":"b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9","impliedFormat":1},{"version":"424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca","impliedFormat":1},{"version":"a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638","impliedFormat":1},{"version":"3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748","impliedFormat":1},{"version":"826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357","impliedFormat":1},{"version":"baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c","impliedFormat":1},{"version":"289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953","impliedFormat":1},{"version":"e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e","impliedFormat":1},{"version":"086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593","impliedFormat":1},{"version":"f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8","impliedFormat":1},{"version":"b46af749e3574b83bccc0ec829322b15e834ae90b45760eebc75a189c28c0868","impliedFormat":1},{"version":"12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1","impliedFormat":1},{"version":"ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07","impliedFormat":1},{"version":"4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1","affectsGlobalScope":true,"impliedFormat":1},{"version":"4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade","impliedFormat":1},{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0","impliedFormat":1},{"version":"255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96","impliedFormat":1},{"version":"a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4","impliedFormat":1},{"version":"9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392","impliedFormat":1},{"version":"d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee","impliedFormat":1},{"version":"1d1e6bd176eee5970968423d7e215bfd66828b6db8d54d17afec05a831322633","impliedFormat":1},{"version":"64ef5112114bdd77304acb548f93777b263bbf57272776139425a58f68a10775","impliedFormat":1},{"version":"ecdf947a5111318568ba99f2a87b8498382d8871207f1bc6271ff3b9536a2448","impliedFormat":1},{"version":"2880728492d6a6baa55411d14cc42fa55714a24b1d1d27ff9a8a610abd47c761","impliedFormat":1}],"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],[29,46,69,75,76],[29]],"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],[27,1],[1,1],[28,1],[30,33],[29,1],[31,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],[27,1],[1,1],[28,1],[30,34]],"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,27,1,28,30,29,31]},"version":"4.7.0-dev.20220505"}
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.es2020.intl.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/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":"f5c28122bee592cfaf5c72ed7bcc47f453b79778ffa6e301f45d21a0970719d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","impliedFormat":1},{"version":"7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","impliedFormat":1},{"version":"8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","impliedFormat":1},{"version":"5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","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":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd483c056da900716879771893a3c9772b66c3c88f8943b4205aec738a94b1d0","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":"725d9be2fd48440256f4deb00649adffdbc5ecd282b09e89d4e200663792c34c","impliedFormat":1},{"version":"89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","impliedFormat":1},{"version":"2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682","impliedFormat":1},{"version":"61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878","impliedFormat":1},{"version":"465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7","impliedFormat":1},{"version":"123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803","impliedFormat":1},{"version":"525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d","impliedFormat":1},{"version":"90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720","impliedFormat":1},{"version":"d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb","impliedFormat":1},{"version":"7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78","impliedFormat":1},{"version":"aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346","impliedFormat":1},{"version":"4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e","impliedFormat":1},{"version":"eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9","impliedFormat":1},{"version":"e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60","impliedFormat":1},{"version":"fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7","impliedFormat":1},{"version":"9440dcf960685f7ec10856891a6cebb52a5ae8cef6a2e85daf9476dafd346cbe","impliedFormat":1},{"version":"5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90","impliedFormat":1},{"version":"c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a","impliedFormat":1},{"version":"6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947","impliedFormat":1},{"version":"bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665","impliedFormat":1},{"version":"46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498","impliedFormat":1},{"version":"ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34","impliedFormat":1},{"version":"84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35","impliedFormat":1},{"version":"0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45","impliedFormat":1},{"version":"0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e","affectsGlobalScope":true,"impliedFormat":1},{"version":"30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1","impliedFormat":1},{"version":"9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164","impliedFormat":1},{"version":"6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9","impliedFormat":1},{"version":"dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4","impliedFormat":1},{"version":"406a63c7e94107394341e97dbdc3312a1ecea75571d067a69eaa213786d9f154","impliedFormat":1},{"version":"d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457","impliedFormat":1},{"version":"b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9","impliedFormat":1},{"version":"424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca","impliedFormat":1},{"version":"a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638","impliedFormat":1},{"version":"3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748","impliedFormat":1},{"version":"826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357","impliedFormat":1},{"version":"baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c","impliedFormat":1},{"version":"289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953","impliedFormat":1},{"version":"e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e","impliedFormat":1},{"version":"086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593","impliedFormat":1},{"version":"f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8","impliedFormat":1},{"version":"b46af749e3574b83bccc0ec829322b15e834ae90b45760eebc75a189c28c0868","impliedFormat":1},{"version":"12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1","impliedFormat":1},{"version":"ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07","impliedFormat":1},{"version":"4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1","affectsGlobalScope":true,"impliedFormat":1},{"version":"4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade","impliedFormat":1},{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0","impliedFormat":1},{"version":"255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96","impliedFormat":1},{"version":"a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4","impliedFormat":1},{"version":"9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392","impliedFormat":1},{"version":"d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee","impliedFormat":1},{"version":"1d1e6bd176eee5970968423d7e215bfd66828b6db8d54d17afec05a831322633","impliedFormat":1},{"version":"64ef5112114bdd77304acb548f93777b263bbf57272776139425a58f68a10775","impliedFormat":1},{"version":"ecdf947a5111318568ba99f2a87b8498382d8871207f1bc6271ff3b9536a2448","impliedFormat":1},{"version":"2880728492d6a6baa55411d14cc42fa55714a24b1d1d27ff9a8a610abd47c761","impliedFormat":1}],"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],[29,46,69,75,76],[29]],"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],[27,1],[1,1],[28,1],[30,33],[29,1],[31,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],[27,1],[1,1],[28,1],[30,34]],"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,27,1,28,30,29,31]},"version":"4.7.0-dev.20220505"}
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.13-beta.0',
126
+ trackerVersion: '3.5.15',
127
127
  projectKey: options.projectKey,
128
128
  doNotTrack,
129
129
  // TODO: add precise reason (an exact API missing)
@@ -154,7 +154,7 @@ export default class API {
154
154
  if (this.app === null) {
155
155
  return;
156
156
  }
157
- this.app.stop();
157
+ this.app.stop(true);
158
158
  }
159
159
  getSessionToken() {
160
160
  if (this.app === null) {
@@ -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) {
@@ -18,32 +33,43 @@ export default function (app) {
18
33
  if (id === undefined) {
19
34
  return;
20
35
  }
21
- const { src, complete, naturalWidth, naturalHeight } = this;
36
+ const { src, complete, naturalWidth, naturalHeight, srcset } = this;
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()));
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
+ }
35
55
  }
36
56
  });
37
57
  const observer = new MutationObserver((mutations) => {
38
58
  for (const mutation of mutations) {
39
- if (mutation.type === "attributes" && mutation.attributeName === "src") {
59
+ if (mutation.type === "attributes") {
40
60
  const target = mutation.target;
41
61
  const id = app.nodes.getID(target);
42
62
  if (id === undefined) {
43
63
  return;
44
64
  }
45
- const src = target.src;
46
- app.send(new SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
65
+ if (mutation.attributeName === "src") {
66
+ const src = target.src;
67
+ app.send(new SetNodeAttributeURLBased(id, 'src', src, app.getBaseHref()));
68
+ }
69
+ if (mutation.attributeName === "srcset") {
70
+ const srcset = target.srcset;
71
+ app.send(new SetNodeAttribute(id, 'srcset', srcset));
72
+ }
47
73
  }
48
74
  }
49
75
  });
@@ -54,6 +80,6 @@ export default function (app) {
54
80
  app.nodes.attachElementListener('error', node, sendImgSrc);
55
81
  app.nodes.attachElementListener('load', node, sendImgSrc);
56
82
  sendImgSrc.call(node);
57
- observer.observe(node, { attributes: true });
83
+ observer.observe(node, { attributes: true, attributeFilter: ["src", "srcset"] });
58
84
  });
59
85
  }
@@ -10,6 +10,7 @@ export interface Options {
10
10
  obscureInputNumbers: boolean;
11
11
  obscureInputEmails: boolean;
12
12
  defaultInputMode: InputMode;
13
+ obscureInputDates: boolean;
13
14
  }
14
15
  export default function (app: App, opts: Partial<Options>): void;
15
16
  export {};
@@ -1,6 +1,7 @@
1
1
  import { normSpaces, IN_BROWSER, getLabelAttribute, hasOpenreplayAttribute, } from "../utils.js";
2
2
  import { hasTag } from "../app/guards.js";
3
3
  import { SetInputTarget, SetInputValue, SetInputChecked } from "../common/messages.js";
4
+ const INPUT_TYPES = ['text', 'password', 'email', 'search', 'number', 'range', 'date'];
4
5
  function isTextEditable(node) {
5
6
  if (hasTag(node, "TEXTAREA")) {
6
7
  return true;
@@ -8,13 +9,7 @@ function isTextEditable(node) {
8
9
  if (!hasTag(node, "INPUT")) {
9
10
  return false;
10
11
  }
11
- const type = node.type;
12
- return (type === 'text' ||
13
- type === 'password' ||
14
- type === 'email' ||
15
- type === 'search' ||
16
- type === 'number' ||
17
- type === 'range');
12
+ return INPUT_TYPES.includes(node.type);
18
13
  }
19
14
  function isCheckable(node) {
20
15
  if (!hasTag(node, "INPUT")) {
@@ -69,6 +64,7 @@ export default function (app, opts) {
69
64
  obscureInputNumbers: true,
70
65
  obscureInputEmails: true,
71
66
  defaultInputMode: 0 /* InputMode.Plain */,
67
+ obscureInputDates: false,
72
68
  }, opts);
73
69
  function sendInputTarget(id, node) {
74
70
  const label = getInputLabel(node);
@@ -84,7 +80,8 @@ export default function (app, opts) {
84
80
  }
85
81
  else if (hasOpenreplayAttribute(node, 'obscured') ||
86
82
  (inputMode === 0 /* InputMode.Plain */ &&
87
- ((options.obscureInputNumbers && /\d\d\d\d/.test(value)) ||
83
+ ((options.obscureInputNumbers && node.type !== 'date' && /\d\d\d\d/.test(value)) ||
84
+ (options.obscureInputDates && node.type === 'date') ||
88
85
  (options.obscureInputEmails &&
89
86
  (node.type === 'email' || !!~value.indexOf('@')))))) {
90
87
  inputMode = 1 /* InputMode.Obscured */;