1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | "use strict";
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | const equalityCache = new WeakMap();
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | const _isSourceEqual = (a, b) => {
|
19 |
|
20 |
|
21 | let aSource = typeof a.buffer === "function" ? a.buffer() : a.source();
|
22 |
|
23 | let bSource = typeof b.buffer === "function" ? b.buffer() : b.source();
|
24 | if (aSource === bSource) return true;
|
25 | if (typeof aSource === "string" && typeof bSource === "string") return false;
|
26 | if (!Buffer.isBuffer(aSource)) aSource = Buffer.from(aSource, "utf-8");
|
27 | if (!Buffer.isBuffer(bSource)) bSource = Buffer.from(bSource, "utf-8");
|
28 | return aSource.equals(bSource);
|
29 | };
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | const isSourceEqual = (a, b) => {
|
37 | if (a === b) return true;
|
38 | const cache1 = equalityCache.get(a);
|
39 | if (cache1 !== undefined) {
|
40 | const result = cache1.get(b);
|
41 | if (result !== undefined) return result;
|
42 | }
|
43 | const result = _isSourceEqual(a, b);
|
44 | if (cache1 !== undefined) {
|
45 | cache1.set(b, result);
|
46 | } else {
|
47 | const map = new WeakMap();
|
48 | map.set(b, result);
|
49 | equalityCache.set(a, map);
|
50 | }
|
51 | const cache2 = equalityCache.get(b);
|
52 | if (cache2 !== undefined) {
|
53 | cache2.set(a, result);
|
54 | } else {
|
55 | const map = new WeakMap();
|
56 | map.set(a, result);
|
57 | equalityCache.set(b, map);
|
58 | }
|
59 | return result;
|
60 | };
|
61 | exports.isSourceEqual = isSourceEqual;
|