@amplitude/plugin-autocapture-browser 1.23.6 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/lib/cjs/autocapture/track-click.d.ts.map +1 -1
  2. package/lib/cjs/autocapture/track-click.js.map +1 -1
  3. package/lib/cjs/autocapture/track-exposure.d.ts +12 -0
  4. package/lib/cjs/autocapture/track-exposure.d.ts.map +1 -0
  5. package/lib/cjs/autocapture/track-exposure.js +56 -0
  6. package/lib/cjs/autocapture/track-exposure.js.map +1 -0
  7. package/lib/cjs/autocapture/track-scroll.d.ts +15 -0
  8. package/lib/cjs/autocapture/track-scroll.d.ts.map +1 -0
  9. package/lib/cjs/autocapture/track-scroll.js +34 -0
  10. package/lib/cjs/autocapture/track-scroll.js.map +1 -0
  11. package/lib/cjs/autocapture/track-viewport-content-updated.d.ts +25 -0
  12. package/lib/cjs/autocapture/track-viewport-content-updated.d.ts.map +1 -0
  13. package/lib/cjs/autocapture/track-viewport-content-updated.js +71 -0
  14. package/lib/cjs/autocapture/track-viewport-content-updated.js.map +1 -0
  15. package/lib/cjs/autocapture-plugin.d.ts +4 -0
  16. package/lib/cjs/autocapture-plugin.d.ts.map +1 -1
  17. package/lib/cjs/autocapture-plugin.js +109 -14
  18. package/lib/cjs/autocapture-plugin.js.map +1 -1
  19. package/lib/cjs/constants.d.ts +7 -0
  20. package/lib/cjs/constants.d.ts.map +1 -1
  21. package/lib/cjs/constants.js +9 -1
  22. package/lib/cjs/constants.js.map +1 -1
  23. package/lib/cjs/data-extractor.d.ts +1 -0
  24. package/lib/cjs/data-extractor.d.ts.map +1 -1
  25. package/lib/cjs/data-extractor.js +19 -0
  26. package/lib/cjs/data-extractor.js.map +1 -1
  27. package/lib/cjs/helpers.d.ts +1 -0
  28. package/lib/cjs/helpers.d.ts.map +1 -1
  29. package/lib/cjs/helpers.js +22 -1
  30. package/lib/cjs/helpers.js.map +1 -1
  31. package/lib/cjs/libs/element-path.d.ts +2 -0
  32. package/lib/cjs/libs/element-path.d.ts.map +1 -0
  33. package/lib/cjs/libs/element-path.js +177 -0
  34. package/lib/cjs/libs/element-path.js.map +1 -0
  35. package/lib/cjs/observables.d.ts +3 -0
  36. package/lib/cjs/observables.d.ts.map +1 -1
  37. package/lib/cjs/observables.js +70 -3
  38. package/lib/cjs/observables.js.map +1 -1
  39. package/lib/cjs/version.d.ts +1 -1
  40. package/lib/cjs/version.js +1 -1
  41. package/lib/cjs/version.js.map +1 -1
  42. package/lib/esm/autocapture/track-click.d.ts.map +1 -1
  43. package/lib/esm/autocapture/track-click.js.map +1 -1
  44. package/lib/esm/autocapture/track-exposure.d.ts +12 -0
  45. package/lib/esm/autocapture/track-exposure.d.ts.map +1 -0
  46. package/lib/esm/autocapture/track-exposure.js +52 -0
  47. package/lib/esm/autocapture/track-exposure.js.map +1 -0
  48. package/lib/esm/autocapture/track-scroll.d.ts +15 -0
  49. package/lib/esm/autocapture/track-scroll.d.ts.map +1 -0
  50. package/lib/esm/autocapture/track-scroll.js +30 -0
  51. package/lib/esm/autocapture/track-scroll.js.map +1 -0
  52. package/lib/esm/autocapture/track-viewport-content-updated.d.ts +25 -0
  53. package/lib/esm/autocapture/track-viewport-content-updated.d.ts.map +1 -0
  54. package/lib/esm/autocapture/track-viewport-content-updated.js +65 -0
  55. package/lib/esm/autocapture/track-viewport-content-updated.js.map +1 -0
  56. package/lib/esm/autocapture-plugin.d.ts +4 -0
  57. package/lib/esm/autocapture-plugin.d.ts.map +1 -1
  58. package/lib/esm/autocapture-plugin.js +111 -16
  59. package/lib/esm/autocapture-plugin.js.map +1 -1
  60. package/lib/esm/constants.d.ts +7 -0
  61. package/lib/esm/constants.d.ts.map +1 -1
  62. package/lib/esm/constants.js +8 -0
  63. package/lib/esm/constants.js.map +1 -1
  64. package/lib/esm/data-extractor.d.ts +1 -0
  65. package/lib/esm/data-extractor.d.ts.map +1 -1
  66. package/lib/esm/data-extractor.js +20 -1
  67. package/lib/esm/data-extractor.js.map +1 -1
  68. package/lib/esm/helpers.d.ts +1 -0
  69. package/lib/esm/helpers.d.ts.map +1 -1
  70. package/lib/esm/helpers.js +21 -1
  71. package/lib/esm/helpers.js.map +1 -1
  72. package/lib/esm/libs/element-path.d.ts +2 -0
  73. package/lib/esm/libs/element-path.d.ts.map +1 -0
  74. package/lib/esm/libs/element-path.js +173 -0
  75. package/lib/esm/libs/element-path.js.map +1 -0
  76. package/lib/esm/observables.d.ts +3 -0
  77. package/lib/esm/observables.d.ts.map +1 -1
  78. package/lib/esm/observables.js +67 -2
  79. package/lib/esm/observables.js.map +1 -1
  80. package/lib/esm/version.d.ts +1 -1
  81. package/lib/esm/version.js +1 -1
  82. package/lib/esm/version.js.map +1 -1
  83. package/lib/scripts/amplitude-min.js +1 -1
  84. package/lib/scripts/amplitude-min.js.gz +0 -0
  85. package/lib/scripts/amplitude-min.js.map +1 -1
  86. package/lib/scripts/amplitude-min.umd.js +1 -1
  87. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  88. package/lib/scripts/autocapture/track-click.d.ts.map +1 -1
  89. package/lib/scripts/autocapture/track-exposure.d.ts +12 -0
  90. package/lib/scripts/autocapture/track-exposure.d.ts.map +1 -0
  91. package/lib/scripts/autocapture/track-scroll.d.ts +15 -0
  92. package/lib/scripts/autocapture/track-scroll.d.ts.map +1 -0
  93. package/lib/scripts/autocapture/track-viewport-content-updated.d.ts +25 -0
  94. package/lib/scripts/autocapture/track-viewport-content-updated.d.ts.map +1 -0
  95. package/lib/scripts/autocapture-plugin.d.ts +4 -0
  96. package/lib/scripts/autocapture-plugin.d.ts.map +1 -1
  97. package/lib/scripts/constants.d.ts +7 -0
  98. package/lib/scripts/constants.d.ts.map +1 -1
  99. package/lib/scripts/data-extractor.d.ts +1 -0
  100. package/lib/scripts/data-extractor.d.ts.map +1 -1
  101. package/lib/scripts/helpers.d.ts +1 -0
  102. package/lib/scripts/helpers.d.ts.map +1 -1
  103. package/lib/scripts/libs/element-path.d.ts +2 -0
  104. package/lib/scripts/libs/element-path.d.ts.map +1 -0
  105. package/lib/scripts/observables.d.ts +3 -0
  106. package/lib/scripts/observables.d.ts.map +1 -1
  107. package/lib/scripts/version.d.ts +1 -1
  108. package/package.json +2 -2
  109. package/lib/cjs/libs/finder.d.ts +0 -13
  110. package/lib/cjs/libs/finder.d.ts.map +0 -1
  111. package/lib/cjs/libs/finder.js +0 -348
  112. package/lib/cjs/libs/finder.js.map +0 -1
  113. package/lib/esm/libs/finder.d.ts +0 -13
  114. package/lib/esm/libs/finder.d.ts.map +0 -1
  115. package/lib/esm/libs/finder.js +0 -344
  116. package/lib/esm/libs/finder.js.map +0 -1
  117. package/lib/scripts/libs/finder.d.ts +0 -13
  118. package/lib/scripts/libs/finder.d.ts.map +0 -1
@@ -1,348 +0,0 @@
1
- "use strict";
2
- /* istanbul ignore file */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.finder = void 0;
5
- var tslib_1 = require("tslib");
6
- var config;
7
- var rootDocument;
8
- function finder(input, options) {
9
- if (input.nodeType !== Node.ELEMENT_NODE) {
10
- throw new Error("Can't generate CSS selector for non-element node type.");
11
- }
12
- if ('html' === input.tagName.toLowerCase()) {
13
- return 'html';
14
- }
15
- var defaults = {
16
- root: document.body,
17
- idName: function (_name) { return true; },
18
- className: function (_name) { return true; },
19
- tagName: function (_name) { return true; },
20
- attr: function (_name, _value) { return false; },
21
- seedMinLength: 1,
22
- optimizedMinLength: 2,
23
- threshold: 1000,
24
- maxNumberOfTries: 10000,
25
- };
26
- config = tslib_1.__assign(tslib_1.__assign({}, defaults), options);
27
- rootDocument = findRootDocument(config.root, defaults);
28
- var path = bottomUpSearch(input, 'all', function () {
29
- return bottomUpSearch(input, 'two', function () { return bottomUpSearch(input, 'one', function () { return bottomUpSearch(input, 'none'); }); });
30
- });
31
- if (path) {
32
- var optimized = sort(optimize(path, input));
33
- if (optimized.length > 0) {
34
- path = optimized[0];
35
- }
36
- return selector(path);
37
- }
38
- else {
39
- throw new Error("Selector was not found.");
40
- }
41
- }
42
- exports.finder = finder;
43
- function findRootDocument(rootNode, defaults) {
44
- if (rootNode.nodeType === Node.DOCUMENT_NODE) {
45
- return rootNode;
46
- }
47
- if (rootNode === defaults.root) {
48
- return rootNode.ownerDocument;
49
- }
50
- return rootNode;
51
- }
52
- function bottomUpSearch(input, limit, fallback) {
53
- var path = null;
54
- var stack = [];
55
- var current = input;
56
- var i = 0;
57
- var _loop_1 = function () {
58
- var e_1, _a;
59
- var level = maybe(id(current)) || maybe.apply(void 0, tslib_1.__spreadArray([], tslib_1.__read(attr(current)), false)) || maybe.apply(void 0, tslib_1.__spreadArray([], tslib_1.__read(classNames(current)), false)) ||
60
- maybe(tagName(current)) || [any()];
61
- var nth = index(current);
62
- if (limit == 'all') {
63
- if (nth) {
64
- level = level.concat(level.filter(dispensableNth).map(function (node) { return nthChild(node, nth); }));
65
- }
66
- }
67
- else if (limit == 'two') {
68
- level = level.slice(0, 1);
69
- if (nth) {
70
- level = level.concat(level.filter(dispensableNth).map(function (node) { return nthChild(node, nth); }));
71
- }
72
- }
73
- else if (limit == 'one') {
74
- var _b = tslib_1.__read((level = level.slice(0, 1)), 1), node = _b[0];
75
- if (nth && dispensableNth(node)) {
76
- level = [nthChild(node, nth)];
77
- }
78
- }
79
- else if (limit == 'none') {
80
- level = [any()];
81
- if (nth) {
82
- level = [nthChild(level[0], nth)];
83
- }
84
- }
85
- try {
86
- for (var level_1 = (e_1 = void 0, tslib_1.__values(level)), level_1_1 = level_1.next(); !level_1_1.done; level_1_1 = level_1.next()) {
87
- var node = level_1_1.value;
88
- node.level = i;
89
- }
90
- }
91
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
92
- finally {
93
- try {
94
- if (level_1_1 && !level_1_1.done && (_a = level_1.return)) _a.call(level_1);
95
- }
96
- finally { if (e_1) throw e_1.error; }
97
- }
98
- stack.push(level);
99
- if (stack.length >= config.seedMinLength) {
100
- path = findUniquePath(stack, fallback);
101
- if (path) {
102
- return "break";
103
- }
104
- }
105
- current = current.parentElement;
106
- i++;
107
- };
108
- while (current) {
109
- var state_1 = _loop_1();
110
- if (state_1 === "break")
111
- break;
112
- }
113
- if (!path) {
114
- path = findUniquePath(stack, fallback);
115
- }
116
- if (!path && fallback) {
117
- return fallback();
118
- }
119
- return path;
120
- }
121
- function findUniquePath(stack, fallback) {
122
- var e_2, _a;
123
- // Check first the total number of combinations first since generating the combinations can cause memory exhaustion
124
- var numCombinations = stack.reduce(function (acc, i) { return acc * i.length; }, 1);
125
- if (numCombinations > config.threshold) {
126
- return fallback ? fallback() : null;
127
- }
128
- var paths = sort(combinations(stack));
129
- try {
130
- for (var paths_1 = tslib_1.__values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {
131
- var candidate = paths_1_1.value;
132
- if (unique(candidate)) {
133
- return candidate;
134
- }
135
- }
136
- }
137
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
138
- finally {
139
- try {
140
- if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);
141
- }
142
- finally { if (e_2) throw e_2.error; }
143
- }
144
- return null;
145
- }
146
- function selector(path) {
147
- var node = path[0];
148
- var query = node.name;
149
- for (var i = 1; i < path.length; i++) {
150
- var level = path[i].level || 0;
151
- if (node.level === level - 1) {
152
- query = "".concat(path[i].name, " > ").concat(query);
153
- }
154
- else {
155
- query = "".concat(path[i].name, " ").concat(query);
156
- }
157
- node = path[i];
158
- }
159
- return query;
160
- }
161
- function penalty(path) {
162
- return path.map(function (node) { return node.penalty; }).reduce(function (acc, i) { return acc + i; }, 0);
163
- }
164
- function unique(path) {
165
- var css = selector(path);
166
- switch (rootDocument.querySelectorAll(css).length) {
167
- case 0:
168
- throw new Error("Can't select any node with this selector: ".concat(css));
169
- case 1:
170
- return true;
171
- default:
172
- return false;
173
- }
174
- }
175
- function id(input) {
176
- var elementId = input.getAttribute('id');
177
- if (elementId && config.idName(elementId)) {
178
- return {
179
- name: '#' + CSS.escape(elementId),
180
- penalty: 0,
181
- };
182
- }
183
- return null;
184
- }
185
- function attr(input) {
186
- var attrs = Array.from(input.attributes).filter(function (attr) { return config.attr(attr.name, attr.value); });
187
- return attrs.map(function (attr) { return ({
188
- name: "[".concat(CSS.escape(attr.name), "=\"").concat(CSS.escape(attr.value), "\"]"),
189
- penalty: 0.5,
190
- }); });
191
- }
192
- function classNames(input) {
193
- var names = Array.from(input.classList).filter(config.className);
194
- return names.map(function (name) { return ({
195
- name: '.' + CSS.escape(name),
196
- penalty: 1,
197
- }); });
198
- }
199
- function tagName(input) {
200
- var name = input.tagName.toLowerCase();
201
- if (config.tagName(name)) {
202
- return {
203
- name: name,
204
- penalty: 2,
205
- };
206
- }
207
- return null;
208
- }
209
- function any() {
210
- return {
211
- name: '*',
212
- penalty: 3,
213
- };
214
- }
215
- function index(input) {
216
- var parent = input.parentNode;
217
- if (!parent) {
218
- return null;
219
- }
220
- var child = parent.firstChild;
221
- if (!child) {
222
- return null;
223
- }
224
- var i = 0;
225
- while (child) {
226
- if (child.nodeType === Node.ELEMENT_NODE) {
227
- i++;
228
- }
229
- if (child === input) {
230
- break;
231
- }
232
- child = child.nextSibling;
233
- }
234
- return i;
235
- }
236
- function nthChild(node, i) {
237
- return {
238
- name: node.name + ":nth-child(".concat(i, ")"),
239
- penalty: node.penalty + 1,
240
- };
241
- }
242
- function dispensableNth(node) {
243
- return node.name !== 'html' && !node.name.startsWith('#');
244
- }
245
- function maybe() {
246
- var level = [];
247
- for (var _i = 0; _i < arguments.length; _i++) {
248
- level[_i] = arguments[_i];
249
- }
250
- var list = level.filter(notEmpty);
251
- if (list.length > 0) {
252
- return list;
253
- }
254
- return null;
255
- }
256
- function notEmpty(value) {
257
- return value !== null && value !== undefined;
258
- }
259
- function combinations(stack, path) {
260
- var _a, _b, node, e_3_1;
261
- var e_3, _c;
262
- if (path === void 0) { path = []; }
263
- return tslib_1.__generator(this, function (_d) {
264
- switch (_d.label) {
265
- case 0:
266
- if (!(stack.length > 0)) return [3 /*break*/, 9];
267
- _d.label = 1;
268
- case 1:
269
- _d.trys.push([1, 6, 7, 8]);
270
- _a = tslib_1.__values(stack[0]), _b = _a.next();
271
- _d.label = 2;
272
- case 2:
273
- if (!!_b.done) return [3 /*break*/, 5];
274
- node = _b.value;
275
- return [5 /*yield**/, tslib_1.__values(combinations(stack.slice(1, stack.length), path.concat(node)))];
276
- case 3:
277
- _d.sent();
278
- _d.label = 4;
279
- case 4:
280
- _b = _a.next();
281
- return [3 /*break*/, 2];
282
- case 5: return [3 /*break*/, 8];
283
- case 6:
284
- e_3_1 = _d.sent();
285
- e_3 = { error: e_3_1 };
286
- return [3 /*break*/, 8];
287
- case 7:
288
- try {
289
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
290
- }
291
- finally { if (e_3) throw e_3.error; }
292
- return [7 /*endfinally*/];
293
- case 8: return [3 /*break*/, 11];
294
- case 9: return [4 /*yield*/, path];
295
- case 10:
296
- _d.sent();
297
- _d.label = 11;
298
- case 11: return [2 /*return*/];
299
- }
300
- });
301
- }
302
- function sort(paths) {
303
- return tslib_1.__spreadArray([], tslib_1.__read(paths), false).sort(function (a, b) { return penalty(a) - penalty(b); });
304
- }
305
- function optimize(path, input, scope) {
306
- var i, newPath, newPathKey;
307
- if (scope === void 0) { scope = {
308
- counter: 0,
309
- visited: new Map(),
310
- }; }
311
- return tslib_1.__generator(this, function (_a) {
312
- switch (_a.label) {
313
- case 0:
314
- if (!(path.length > 2 && path.length > config.optimizedMinLength)) return [3 /*break*/, 5];
315
- i = 1;
316
- _a.label = 1;
317
- case 1:
318
- if (!(i < path.length - 1)) return [3 /*break*/, 5];
319
- if (scope.counter > config.maxNumberOfTries) {
320
- return [2 /*return*/]; // Okay At least I tried!
321
- }
322
- scope.counter += 1;
323
- newPath = tslib_1.__spreadArray([], tslib_1.__read(path), false);
324
- newPath.splice(i, 1);
325
- newPathKey = selector(newPath);
326
- if (scope.visited.has(newPathKey)) {
327
- return [2 /*return*/];
328
- }
329
- if (!(unique(newPath) && same(newPath, input))) return [3 /*break*/, 4];
330
- return [4 /*yield*/, newPath];
331
- case 2:
332
- _a.sent();
333
- scope.visited.set(newPathKey, true);
334
- return [5 /*yield**/, tslib_1.__values(optimize(newPath, input, scope))];
335
- case 3:
336
- _a.sent();
337
- _a.label = 4;
338
- case 4:
339
- i++;
340
- return [3 /*break*/, 1];
341
- case 5: return [2 /*return*/];
342
- }
343
- });
344
- }
345
- function same(path, input) {
346
- return rootDocument.querySelector(selector(path)) === input;
347
- }
348
- //# sourceMappingURL=finder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"finder.js","sourceRoot":"","sources":["../../../src/libs/finder.ts"],"names":[],"mappings":"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","sourcesContent":["/* istanbul ignore file */\n\n// License: MIT\n// Author: Anton Medvedev <anton@medv.io>\n// Source: https://github.com/antonmedv/finder\n\ntype Knot = {\n name: string;\n penalty: number;\n level?: number;\n};\n\ntype Path = Knot[];\n\nexport type Options = {\n root: Element;\n idName: (name: string) => boolean;\n className: (name: string) => boolean;\n tagName: (name: string) => boolean;\n attr: (name: string, value: string) => boolean;\n seedMinLength: number;\n optimizedMinLength: number;\n threshold: number;\n maxNumberOfTries: number;\n};\n\nlet config: Options;\nlet rootDocument: Document | Element;\n\nexport function finder(input: Element, options?: Partial<Options>) {\n if (input.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Can't generate CSS selector for non-element node type.`);\n }\n if ('html' === input.tagName.toLowerCase()) {\n return 'html';\n }\n const defaults: Options = {\n root: document.body,\n idName: (_name: string) => true,\n className: (_name: string) => true,\n tagName: (_name: string) => true,\n attr: (_name: string, _value: string) => false,\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n maxNumberOfTries: 10000,\n };\n\n config = { ...defaults, ...options };\n rootDocument = findRootDocument(config.root, defaults);\n\n let path = bottomUpSearch(input, 'all', () =>\n bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))),\n );\n\n if (path) {\n const optimized = sort(optimize(path, input));\n if (optimized.length > 0) {\n path = optimized[0];\n }\n return selector(path);\n } else {\n throw new Error(`Selector was not found.`);\n }\n}\n\nfunction findRootDocument(rootNode: Element | Document, defaults: Options) {\n if (rootNode.nodeType === Node.DOCUMENT_NODE) {\n return rootNode;\n }\n if (rootNode === defaults.root) {\n return rootNode.ownerDocument;\n }\n return rootNode;\n}\n\nfunction bottomUpSearch(\n input: Element,\n limit: 'all' | 'two' | 'one' | 'none',\n fallback?: () => Path | null,\n): Path | null {\n let path: Path | null = null;\n const stack: Knot[][] = [];\n let current: Element | null = input;\n let i = 0;\n while (current) {\n let level: Knot[] = maybe(id(current)) ||\n maybe(...attr(current)) ||\n maybe(...classNames(current)) ||\n maybe(tagName(current)) || [any()];\n const nth = index(current);\n if (limit == 'all') {\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'two') {\n level = level.slice(0, 1);\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'one') {\n const [node] = (level = level.slice(0, 1));\n if (nth && dispensableNth(node)) {\n level = [nthChild(node, nth)];\n }\n } else if (limit == 'none') {\n level = [any()];\n if (nth) {\n level = [nthChild(level[0], nth)];\n }\n }\n for (const node of level) {\n node.level = i;\n }\n stack.push(level);\n if (stack.length >= config.seedMinLength) {\n path = findUniquePath(stack, fallback);\n if (path) {\n break;\n }\n }\n current = current.parentElement;\n i++;\n }\n if (!path) {\n path = findUniquePath(stack, fallback);\n }\n if (!path && fallback) {\n return fallback();\n }\n return path;\n}\n\nfunction findUniquePath(stack: Knot[][], fallback?: () => Path | null): Path | null {\n // Check first the total number of combinations first since generating the combinations can cause memory exhaustion\n const numCombinations = stack.reduce((acc, i) => acc * i.length, 1);\n if (numCombinations > config.threshold) {\n return fallback ? fallback() : null;\n }\n\n const paths = sort(combinations(stack));\n for (const candidate of paths) {\n if (unique(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction selector(path: Path): string {\n let node = path[0];\n let query = node.name;\n for (let i = 1; i < path.length; i++) {\n const level = path[i].level || 0;\n if (node.level === level - 1) {\n query = `${path[i].name} > ${query}`;\n } else {\n query = `${path[i].name} ${query}`;\n }\n node = path[i];\n }\n return query;\n}\n\nfunction penalty(path: Path): number {\n return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0);\n}\n\nfunction unique(path: Path) {\n const css = selector(path);\n switch (rootDocument.querySelectorAll(css).length) {\n case 0:\n throw new Error(`Can't select any node with this selector: ${css}`);\n case 1:\n return true;\n default:\n return false;\n }\n}\n\nfunction id(input: Element): Knot | null {\n const elementId = input.getAttribute('id');\n if (elementId && config.idName(elementId)) {\n return {\n name: '#' + CSS.escape(elementId),\n penalty: 0,\n };\n }\n return null;\n}\n\nfunction attr(input: Element): Knot[] {\n const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value));\n return attrs.map(\n (attr): Knot => ({\n name: `[${CSS.escape(attr.name)}=\"${CSS.escape(attr.value)}\"]`,\n penalty: 0.5,\n }),\n );\n}\n\nfunction classNames(input: Element): Knot[] {\n const names = Array.from(input.classList).filter(config.className);\n return names.map(\n (name): Knot => ({\n name: '.' + CSS.escape(name),\n penalty: 1,\n }),\n );\n}\n\nfunction tagName(input: Element): Knot | null {\n const name = input.tagName.toLowerCase();\n if (config.tagName(name)) {\n return {\n name,\n penalty: 2,\n };\n }\n return null;\n}\n\nfunction any(): Knot {\n return {\n name: '*',\n penalty: 3,\n };\n}\n\nfunction index(input: Element): number | null {\n const parent = input.parentNode;\n if (!parent) {\n return null;\n }\n let child = parent.firstChild;\n if (!child) {\n return null;\n }\n let i = 0;\n while (child) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n i++;\n }\n if (child === input) {\n break;\n }\n child = child.nextSibling;\n }\n return i;\n}\n\nfunction nthChild(node: Knot, i: number): Knot {\n return {\n name: node.name + `:nth-child(${i})`,\n penalty: node.penalty + 1,\n };\n}\n\nfunction dispensableNth(node: Knot) {\n return node.name !== 'html' && !node.name.startsWith('#');\n}\n\nfunction maybe(...level: (Knot | null)[]): Knot[] | null {\n const list = level.filter(notEmpty);\n if (list.length > 0) {\n return list;\n }\n return null;\n}\n\nfunction notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction* combinations(stack: Knot[][], path: Knot[] = []): Generator<Knot[]> {\n if (stack.length > 0) {\n for (const node of stack[0]) {\n yield* combinations(stack.slice(1, stack.length), path.concat(node));\n }\n } else {\n yield path;\n }\n}\n\nfunction sort(paths: Iterable<Path>): Path[] {\n return [...paths].sort((a, b) => penalty(a) - penalty(b));\n}\n\ntype Scope = {\n counter: number;\n visited: Map<string, boolean>;\n};\n\nfunction* optimize(\n path: Path,\n input: Element,\n scope: Scope = {\n counter: 0,\n visited: new Map<string, boolean>(),\n },\n): Generator<Knot[]> {\n if (path.length > 2 && path.length > config.optimizedMinLength) {\n for (let i = 1; i < path.length - 1; i++) {\n if (scope.counter > config.maxNumberOfTries) {\n return; // Okay At least I tried!\n }\n scope.counter += 1;\n const newPath = [...path];\n newPath.splice(i, 1);\n const newPathKey = selector(newPath);\n if (scope.visited.has(newPathKey)) {\n return;\n }\n if (unique(newPath) && same(newPath, input)) {\n yield newPath;\n scope.visited.set(newPathKey, true);\n yield* optimize(newPath, input, scope);\n }\n }\n }\n}\n\nfunction same(path: Path, input: Element) {\n return rootDocument.querySelector(selector(path)) === input;\n}\n"]}
@@ -1,13 +0,0 @@
1
- export type Options = {
2
- root: Element;
3
- idName: (name: string) => boolean;
4
- className: (name: string) => boolean;
5
- tagName: (name: string) => boolean;
6
- attr: (name: string, value: string) => boolean;
7
- seedMinLength: number;
8
- optimizedMinLength: number;
9
- threshold: number;
10
- maxNumberOfTries: number;
11
- };
12
- export declare function finder(input: Element, options?: Partial<Options>): string;
13
- //# sourceMappingURL=finder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"finder.d.ts","sourceRoot":"","sources":["../../../src/libs/finder.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAKF,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,UAmChE"}