summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/src/utils/shallow-equal.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/src/utils/shallow-equal.js')
-rw-r--r--devtools/client/debugger/src/utils/shallow-equal.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/utils/shallow-equal.js b/devtools/client/debugger/src/utils/shallow-equal.js
new file mode 100644
index 0000000000..f0796243f2
--- /dev/null
+++ b/devtools/client/debugger/src/utils/shallow-equal.js
@@ -0,0 +1,32 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
+
+export function shallowEqual(value, other) {
+ return (
+ value === other ||
+ (Array.isArray(value) &&
+ Array.isArray(other) &&
+ arrayShallowEqual(value, other)) ||
+ (isObject(value) && isObject(other) && objectShallowEqual(value, other))
+ );
+}
+
+export function arrayShallowEqual(value, other) {
+ return value.length === other.length && value.every((k, i) => k === other[i]);
+}
+
+function objectShallowEqual(value, other) {
+ const existingKeys = Object.keys(other);
+ const keys = Object.keys(value);
+
+ return (
+ keys.length === existingKeys.length &&
+ keys.every((k, i) => k === existingKeys[i]) &&
+ keys.every(k => value[k] === other[k])
+ );
+}
+
+function isObject(value) {
+ return typeof value === "object" && !!value;
+}