@oscarpalmer/atoms 0.50.0 → 0.52.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.
- package/dist/js/array.js +6 -10
- package/dist/js/array.mjs +6 -10
- package/dist/js/clone.js +1 -2
- package/dist/js/clone.mjs +1 -2
- package/dist/js/element/focusable.js +2 -4
- package/dist/js/element/focusable.mjs +2 -4
- package/dist/js/element/index.js +4 -6
- package/dist/js/element/index.mjs +4 -6
- package/dist/js/emitter.js +108 -0
- package/dist/js/emitter.mjs +108 -0
- package/dist/js/equal.js +1 -1
- package/dist/js/equal.mjs +1 -1
- package/dist/js/function.js +6 -0
- package/dist/js/function.mjs +6 -0
- package/dist/js/index.js +151 -60
- package/dist/js/index.mjs +2 -1
- package/dist/js/{log.js → logger.js} +8 -9
- package/dist/js/{log.mjs → logger.mjs} +8 -9
- package/dist/js/timer.js +13 -12
- package/dist/js/timer.mjs +10 -12
- package/dist/js/value.js +10 -16
- package/dist/js/value.mjs +10 -16
- package/package.json +7 -3
- package/src/js/array.ts +4 -14
- package/src/js/clone.ts +2 -4
- package/src/js/element/focusable.ts +2 -8
- package/src/js/element/index.ts +2 -6
- package/src/js/emitter.ts +217 -0
- package/src/js/equal.ts +1 -1
- package/src/js/function.ts +4 -0
- package/src/js/index.ts +2 -1
- package/src/js/{log.ts → logger.ts} +13 -15
- package/src/js/timer.ts +12 -14
- package/src/js/value.ts +10 -22
- package/types/emitter.d.ts +68 -0
- package/types/function.d.ts +4 -0
- package/types/index.d.ts +2 -1
- package/types/{log.d.ts → logger.d.ts} +7 -7
package/dist/js/array.js
CHANGED
|
@@ -31,12 +31,11 @@ var findValue = function(type, array, value, key) {
|
|
|
31
31
|
return type === "index" ? array.indexOf(value) : array.find((item) => item === value);
|
|
32
32
|
}
|
|
33
33
|
if (callbacks.bool != null) {
|
|
34
|
-
const
|
|
35
|
-
return type === "index" ?
|
|
34
|
+
const index = array.findIndex(callbacks.bool);
|
|
35
|
+
return type === "index" ? index : index > -1 ? array[index] : undefined;
|
|
36
36
|
}
|
|
37
37
|
const { length } = array;
|
|
38
|
-
let index = 0;
|
|
39
|
-
for (;index < length; index += 1) {
|
|
38
|
+
for (let index = 0;index < length; index += 1) {
|
|
40
39
|
const item = array[index];
|
|
41
40
|
if (callbacks.key?.(item) === value) {
|
|
42
41
|
return type === "index" ? index : item;
|
|
@@ -59,8 +58,7 @@ var findValues = function(type, array, value, key) {
|
|
|
59
58
|
const hasCallback = typeof callbacks?.key === "function";
|
|
60
59
|
const result = [];
|
|
61
60
|
const values = hasCallback ? [] : result;
|
|
62
|
-
let index = 0;
|
|
63
|
-
for (;index < length; index += 1) {
|
|
61
|
+
for (let index = 0;index < length; index += 1) {
|
|
64
62
|
const item = array[index];
|
|
65
63
|
const itemValue = hasCallback ? callbacks.key?.(item) : item;
|
|
66
64
|
if (type === "all" && itemValue === value || type === "unique" && values.indexOf(itemValue) === -1) {
|
|
@@ -106,8 +104,7 @@ function groupBy(array, key) {
|
|
|
106
104
|
}
|
|
107
105
|
const grouped = {};
|
|
108
106
|
const { length } = array;
|
|
109
|
-
let index = 0;
|
|
110
|
-
for (;index < length; index += 1) {
|
|
107
|
+
for (let index = 0;index < length; index += 1) {
|
|
111
108
|
const item = array[index];
|
|
112
109
|
const value = callbacks.key(item);
|
|
113
110
|
if (value in grouped) {
|
|
@@ -127,9 +124,8 @@ function insert(array, index, values) {
|
|
|
127
124
|
var insertValues = function(type, array, values, start, deleteCount) {
|
|
128
125
|
const chunked = chunk(values).reverse();
|
|
129
126
|
const { length } = chunked;
|
|
130
|
-
let index = 0;
|
|
131
127
|
let returned;
|
|
132
|
-
for (;index < length; index += 1) {
|
|
128
|
+
for (let index = 0;index < length; index += 1) {
|
|
133
129
|
const result = array.splice(start, index === 0 ? deleteCount : 0, ...chunked[index]);
|
|
134
130
|
if (returned == null) {
|
|
135
131
|
returned = result;
|
package/dist/js/array.mjs
CHANGED
|
@@ -31,12 +31,11 @@ var findValue = function(type, array, value, key) {
|
|
|
31
31
|
return type === "index" ? array.indexOf(value) : array.find((item) => item === value);
|
|
32
32
|
}
|
|
33
33
|
if (callbacks.bool != null) {
|
|
34
|
-
const
|
|
35
|
-
return type === "index" ?
|
|
34
|
+
const index = array.findIndex(callbacks.bool);
|
|
35
|
+
return type === "index" ? index : index > -1 ? array[index] : undefined;
|
|
36
36
|
}
|
|
37
37
|
const { length } = array;
|
|
38
|
-
let index = 0;
|
|
39
|
-
for (;index < length; index += 1) {
|
|
38
|
+
for (let index = 0;index < length; index += 1) {
|
|
40
39
|
const item = array[index];
|
|
41
40
|
if (callbacks.key?.(item) === value) {
|
|
42
41
|
return type === "index" ? index : item;
|
|
@@ -59,8 +58,7 @@ var findValues = function(type, array, value, key) {
|
|
|
59
58
|
const hasCallback = typeof callbacks?.key === "function";
|
|
60
59
|
const result = [];
|
|
61
60
|
const values = hasCallback ? [] : result;
|
|
62
|
-
let index = 0;
|
|
63
|
-
for (;index < length; index += 1) {
|
|
61
|
+
for (let index = 0;index < length; index += 1) {
|
|
64
62
|
const item = array[index];
|
|
65
63
|
const itemValue = hasCallback ? callbacks.key?.(item) : item;
|
|
66
64
|
if (type === "all" && itemValue === value || type === "unique" && values.indexOf(itemValue) === -1) {
|
|
@@ -106,8 +104,7 @@ function groupBy(array, key) {
|
|
|
106
104
|
}
|
|
107
105
|
const grouped = {};
|
|
108
106
|
const { length } = array;
|
|
109
|
-
let index = 0;
|
|
110
|
-
for (;index < length; index += 1) {
|
|
107
|
+
for (let index = 0;index < length; index += 1) {
|
|
111
108
|
const item = array[index];
|
|
112
109
|
const value = callbacks.key(item);
|
|
113
110
|
if (value in grouped) {
|
|
@@ -127,9 +124,8 @@ function insert(array, index, values) {
|
|
|
127
124
|
var insertValues = function(type, array, values, start, deleteCount) {
|
|
128
125
|
const chunked = chunk(values).reverse();
|
|
129
126
|
const { length } = chunked;
|
|
130
|
-
let index = 0;
|
|
131
127
|
let returned;
|
|
132
|
-
for (;index < length; index += 1) {
|
|
128
|
+
for (let index = 0;index < length; index += 1) {
|
|
133
129
|
const result = array.splice(start, index === 0 ? deleteCount : 0, ...chunked[index]);
|
|
134
130
|
if (returned == null) {
|
|
135
131
|
returned = result;
|
package/dist/js/clone.js
CHANGED
|
@@ -54,8 +54,7 @@ var cloneNested = function(value) {
|
|
|
54
54
|
const cloned = Array.isArray(value) ? [] : {};
|
|
55
55
|
const keys = Object.keys(value);
|
|
56
56
|
const { length } = keys;
|
|
57
|
-
let index = 0;
|
|
58
|
-
for (;index < length; index += 1) {
|
|
57
|
+
for (let index = 0;index < length; index += 1) {
|
|
59
58
|
const key = keys[index];
|
|
60
59
|
cloned[key] = clone(value[key]);
|
|
61
60
|
}
|
package/dist/js/clone.mjs
CHANGED
|
@@ -43,8 +43,7 @@ var cloneNested = function(value) {
|
|
|
43
43
|
const cloned = Array.isArray(value) ? [] : {};
|
|
44
44
|
const keys = Object.keys(value);
|
|
45
45
|
const { length } = keys;
|
|
46
|
-
let index = 0;
|
|
47
|
-
for (;index < length; index += 1) {
|
|
46
|
+
for (let index = 0;index < length; index += 1) {
|
|
48
47
|
const key = keys[index];
|
|
49
48
|
cloned[key] = clone(value[key]);
|
|
50
49
|
}
|
|
@@ -32,8 +32,7 @@ var getValidElements = function(parent, filters, tabbable) {
|
|
|
32
32
|
const indiced = [];
|
|
33
33
|
const zeroed = [];
|
|
34
34
|
const { length } = items;
|
|
35
|
-
let index = 0;
|
|
36
|
-
for (;index < length; index += 1) {
|
|
35
|
+
for (let index = 0;index < length; index += 1) {
|
|
37
36
|
const item = items[index];
|
|
38
37
|
if (item.tabIndex === 0) {
|
|
39
38
|
zeroed.push(item.element);
|
|
@@ -61,8 +60,7 @@ var isDisabledFromFieldset = function(element) {
|
|
|
61
60
|
if (parent instanceof HTMLFieldSetElement && parent.disabled) {
|
|
62
61
|
const children = Array.from(parent.children);
|
|
63
62
|
const { length } = children;
|
|
64
|
-
let index = 0;
|
|
65
|
-
for (;index < length; index += 1) {
|
|
63
|
+
for (let index = 0;index < length; index += 1) {
|
|
66
64
|
const child = children[index];
|
|
67
65
|
if (child instanceof HTMLLegendElement) {
|
|
68
66
|
return parent.matches("fieldset[disabled] *") ? true : !child.contains(element);
|
|
@@ -32,8 +32,7 @@ var getValidElements = function(parent, filters, tabbable) {
|
|
|
32
32
|
const indiced = [];
|
|
33
33
|
const zeroed = [];
|
|
34
34
|
const { length } = items;
|
|
35
|
-
let index = 0;
|
|
36
|
-
for (;index < length; index += 1) {
|
|
35
|
+
for (let index = 0;index < length; index += 1) {
|
|
37
36
|
const item = items[index];
|
|
38
37
|
if (item.tabIndex === 0) {
|
|
39
38
|
zeroed.push(item.element);
|
|
@@ -61,8 +60,7 @@ var isDisabledFromFieldset = function(element) {
|
|
|
61
60
|
if (parent instanceof HTMLFieldSetElement && parent.disabled) {
|
|
62
61
|
const children = Array.from(parent.children);
|
|
63
62
|
const { length } = children;
|
|
64
|
-
let index = 0;
|
|
65
|
-
for (;index < length; index += 1) {
|
|
63
|
+
for (let index = 0;index < length; index += 1) {
|
|
66
64
|
const child = children[index];
|
|
67
65
|
if (child instanceof HTMLLegendElement) {
|
|
68
66
|
return parent.matches("fieldset[disabled] *") ? true : !child.contains(element);
|
package/dist/js/element/index.js
CHANGED
|
@@ -33,9 +33,8 @@ var findElementOrElements = function(selector, context, single) {
|
|
|
33
33
|
const result = [];
|
|
34
34
|
if (typeof selector === "string") {
|
|
35
35
|
const { length: length2 } = contexts;
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
const value = callback.call(contexts[index2], selector);
|
|
36
|
+
for (let index = 0;index < length2; index += 1) {
|
|
37
|
+
const value = callback.call(contexts[index], selector);
|
|
39
38
|
if (single) {
|
|
40
39
|
if (value == null) {
|
|
41
40
|
continue;
|
|
@@ -44,12 +43,11 @@ var findElementOrElements = function(selector, context, single) {
|
|
|
44
43
|
}
|
|
45
44
|
result.push(...Array.from(value));
|
|
46
45
|
}
|
|
47
|
-
return single ? undefined : result.filter((value,
|
|
46
|
+
return single ? undefined : result.filter((value, index, array) => array.indexOf(value) === index);
|
|
48
47
|
}
|
|
49
48
|
const nodes = Array.isArray(selector) ? selector : selector instanceof NodeList ? Array.from(selector) : [selector];
|
|
50
49
|
const { length } = nodes;
|
|
51
|
-
let index = 0;
|
|
52
|
-
for (;index < length; index += 1) {
|
|
50
|
+
for (let index = 0;index < length; index += 1) {
|
|
53
51
|
const node = nodes[index];
|
|
54
52
|
const element = node instanceof Document ? node.body : node instanceof Element ? node : undefined;
|
|
55
53
|
if (element != null && (context == null || contexts.length === 0 || contexts.some((context2) => context2 === element || context2.contains(element))) && !result.includes(element)) {
|
|
@@ -9,9 +9,8 @@ var findElementOrElements = function(selector, context, single) {
|
|
|
9
9
|
const result = [];
|
|
10
10
|
if (typeof selector === "string") {
|
|
11
11
|
const { length: length2 } = contexts;
|
|
12
|
-
let
|
|
13
|
-
|
|
14
|
-
const value = callback.call(contexts[index2], selector);
|
|
12
|
+
for (let index = 0;index < length2; index += 1) {
|
|
13
|
+
const value = callback.call(contexts[index], selector);
|
|
15
14
|
if (single) {
|
|
16
15
|
if (value == null) {
|
|
17
16
|
continue;
|
|
@@ -20,12 +19,11 @@ var findElementOrElements = function(selector, context, single) {
|
|
|
20
19
|
}
|
|
21
20
|
result.push(...Array.from(value));
|
|
22
21
|
}
|
|
23
|
-
return single ? undefined : result.filter((value,
|
|
22
|
+
return single ? undefined : result.filter((value, index, array) => array.indexOf(value) === index);
|
|
24
23
|
}
|
|
25
24
|
const nodes = Array.isArray(selector) ? selector : selector instanceof NodeList ? Array.from(selector) : [selector];
|
|
26
25
|
const { length } = nodes;
|
|
27
|
-
let index = 0;
|
|
28
|
-
for (;index < length; index += 1) {
|
|
26
|
+
for (let index = 0;index < length; index += 1) {
|
|
29
27
|
const node = nodes[index];
|
|
30
28
|
const element = node instanceof Document ? node.body : node instanceof Element ? node : undefined;
|
|
31
29
|
if (element != null && (context == null || contexts.length === 0 || contexts.some((context2) => context2 === element || context2.contains(element))) && !result.includes(element)) {
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// src/js/emitter.ts
|
|
2
|
+
var createObserable = function(emitter, observers) {
|
|
3
|
+
const instance = Object.create({
|
|
4
|
+
subscribe(first, second, third) {
|
|
5
|
+
return createSubscription(emitter, observers, getObserver(first, second, third));
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
return instance;
|
|
9
|
+
};
|
|
10
|
+
var createSubscription = function(emitter, observers, observer) {
|
|
11
|
+
let closed = false;
|
|
12
|
+
const instance = Object.create({
|
|
13
|
+
unsubscribe() {
|
|
14
|
+
if (!closed) {
|
|
15
|
+
closed = true;
|
|
16
|
+
observers.delete(instance);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(instance, "closed", {
|
|
21
|
+
get() {
|
|
22
|
+
return closed || !emitter.active;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
observers.set(instance, observer);
|
|
26
|
+
observer.next?.(emitter.value);
|
|
27
|
+
return instance;
|
|
28
|
+
};
|
|
29
|
+
var getObserver = function(first, second, third) {
|
|
30
|
+
let observer;
|
|
31
|
+
if (typeof first === "object") {
|
|
32
|
+
observer = first;
|
|
33
|
+
} else {
|
|
34
|
+
observer = {
|
|
35
|
+
error: second,
|
|
36
|
+
next: first,
|
|
37
|
+
complete: third
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return observer;
|
|
41
|
+
};
|
|
42
|
+
function emitter(value) {
|
|
43
|
+
let active = true;
|
|
44
|
+
let stored = value;
|
|
45
|
+
function finish(emit) {
|
|
46
|
+
if (active) {
|
|
47
|
+
active = false;
|
|
48
|
+
for (const [subscription, observer] of observers) {
|
|
49
|
+
if (emit) {
|
|
50
|
+
observer.complete?.();
|
|
51
|
+
}
|
|
52
|
+
subscription.unsubscribe();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const observers = new Map;
|
|
57
|
+
const instance = Object.create({
|
|
58
|
+
destroy() {
|
|
59
|
+
finish(false);
|
|
60
|
+
},
|
|
61
|
+
emit(value2, complete) {
|
|
62
|
+
if (active) {
|
|
63
|
+
stored = value2;
|
|
64
|
+
for (const [, observer] of observers) {
|
|
65
|
+
observer.next?.(value2);
|
|
66
|
+
}
|
|
67
|
+
if (complete === true) {
|
|
68
|
+
finish(true);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
error(error, complete) {
|
|
73
|
+
if (active) {
|
|
74
|
+
for (const [, observer] of observers) {
|
|
75
|
+
observer.error?.(error);
|
|
76
|
+
}
|
|
77
|
+
if (complete === true) {
|
|
78
|
+
finish(true);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
finish() {
|
|
83
|
+
finish(true);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const observable = createObserable(instance, observers);
|
|
87
|
+
Object.defineProperties(instance, {
|
|
88
|
+
active: {
|
|
89
|
+
get() {
|
|
90
|
+
return active;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
observable: {
|
|
94
|
+
get() {
|
|
95
|
+
return observable;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
value: {
|
|
99
|
+
get() {
|
|
100
|
+
return stored;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return instance;
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
emitter
|
|
108
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// src/js/emitter.ts
|
|
2
|
+
var createObserable = function(emitter, observers) {
|
|
3
|
+
const instance = Object.create({
|
|
4
|
+
subscribe(first, second, third) {
|
|
5
|
+
return createSubscription(emitter, observers, getObserver(first, second, third));
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
return instance;
|
|
9
|
+
};
|
|
10
|
+
var createSubscription = function(emitter, observers, observer) {
|
|
11
|
+
let closed = false;
|
|
12
|
+
const instance = Object.create({
|
|
13
|
+
unsubscribe() {
|
|
14
|
+
if (!closed) {
|
|
15
|
+
closed = true;
|
|
16
|
+
observers.delete(instance);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(instance, "closed", {
|
|
21
|
+
get() {
|
|
22
|
+
return closed || !emitter.active;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
observers.set(instance, observer);
|
|
26
|
+
observer.next?.(emitter.value);
|
|
27
|
+
return instance;
|
|
28
|
+
};
|
|
29
|
+
var getObserver = function(first, second, third) {
|
|
30
|
+
let observer;
|
|
31
|
+
if (typeof first === "object") {
|
|
32
|
+
observer = first;
|
|
33
|
+
} else {
|
|
34
|
+
observer = {
|
|
35
|
+
error: second,
|
|
36
|
+
next: first,
|
|
37
|
+
complete: third
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return observer;
|
|
41
|
+
};
|
|
42
|
+
function emitter(value) {
|
|
43
|
+
let active = true;
|
|
44
|
+
let stored = value;
|
|
45
|
+
function finish(emit) {
|
|
46
|
+
if (active) {
|
|
47
|
+
active = false;
|
|
48
|
+
for (const [subscription, observer] of observers) {
|
|
49
|
+
if (emit) {
|
|
50
|
+
observer.complete?.();
|
|
51
|
+
}
|
|
52
|
+
subscription.unsubscribe();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const observers = new Map;
|
|
57
|
+
const instance = Object.create({
|
|
58
|
+
destroy() {
|
|
59
|
+
finish(false);
|
|
60
|
+
},
|
|
61
|
+
emit(value2, complete) {
|
|
62
|
+
if (active) {
|
|
63
|
+
stored = value2;
|
|
64
|
+
for (const [, observer] of observers) {
|
|
65
|
+
observer.next?.(value2);
|
|
66
|
+
}
|
|
67
|
+
if (complete === true) {
|
|
68
|
+
finish(true);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
error(error, complete) {
|
|
73
|
+
if (active) {
|
|
74
|
+
for (const [, observer] of observers) {
|
|
75
|
+
observer.error?.(error);
|
|
76
|
+
}
|
|
77
|
+
if (complete === true) {
|
|
78
|
+
finish(true);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
finish() {
|
|
83
|
+
finish(true);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const observable = createObserable(instance, observers);
|
|
87
|
+
Object.defineProperties(instance, {
|
|
88
|
+
active: {
|
|
89
|
+
get() {
|
|
90
|
+
return active;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
observable: {
|
|
94
|
+
get() {
|
|
95
|
+
return observable;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
value: {
|
|
99
|
+
get() {
|
|
100
|
+
return stored;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return instance;
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
emitter
|
|
108
|
+
};
|
package/dist/js/equal.js
CHANGED
|
@@ -19,7 +19,7 @@ function equal(first, second) {
|
|
|
19
19
|
case (first instanceof ArrayBuffer && second instanceof ArrayBuffer):
|
|
20
20
|
return equalArrayBuffer(first, second);
|
|
21
21
|
case typeof first === "boolean":
|
|
22
|
-
case first instanceof Date:
|
|
22
|
+
case (first instanceof Date && second instanceof Date):
|
|
23
23
|
return Object.is(Number(first), Number(second));
|
|
24
24
|
case (first instanceof DataView && second instanceof DataView):
|
|
25
25
|
return equalDataView(first, second);
|
package/dist/js/equal.mjs
CHANGED
|
@@ -11,7 +11,7 @@ function equal(first, second) {
|
|
|
11
11
|
case (first instanceof ArrayBuffer && second instanceof ArrayBuffer):
|
|
12
12
|
return equalArrayBuffer(first, second);
|
|
13
13
|
case typeof first === "boolean":
|
|
14
|
-
case first instanceof Date:
|
|
14
|
+
case (first instanceof Date && second instanceof Date):
|
|
15
15
|
return Object.is(Number(first), Number(second));
|
|
16
16
|
case (first instanceof DataView && second instanceof DataView):
|
|
17
17
|
return equalDataView(first, second);
|