aboutsummaryrefslogtreecommitdiff
path: root/node_modules/concordance/lib/getObjectKeys.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/concordance/lib/getObjectKeys.js')
-rw-r--r--node_modules/concordance/lib/getObjectKeys.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/node_modules/concordance/lib/getObjectKeys.js b/node_modules/concordance/lib/getObjectKeys.js
new file mode 100644
index 000000000..4b0c3e368
--- /dev/null
+++ b/node_modules/concordance/lib/getObjectKeys.js
@@ -0,0 +1,36 @@
+'use strict'
+
+function getObjectKeys (obj, excludeListItemAccessorsBelowLength) {
+ const keys = []
+ let size = 0
+
+ // Sort property names, they should never be order-sensitive
+ const nameCandidates = Object.getOwnPropertyNames(obj).sort()
+ // Comparators should verify symbols in an order-insensitive manner if
+ // possible.
+ const symbolCandidates = Object.getOwnPropertySymbols(obj)
+
+ for (let i = 0; i < nameCandidates.length; i++) {
+ const name = nameCandidates[i]
+
+ let accept = true
+ if (excludeListItemAccessorsBelowLength > 0) {
+ const index = Number(name)
+ accept = (index % 1 !== 0) || index >= excludeListItemAccessorsBelowLength
+ }
+
+ if (accept && Object.getOwnPropertyDescriptor(obj, name).enumerable) {
+ keys[size++] = name
+ }
+ }
+
+ for (let i = 0; i < symbolCandidates.length; i++) {
+ const symbol = symbolCandidates[i]
+ if (Object.getOwnPropertyDescriptor(obj, symbol).enumerable) {
+ keys[size++] = symbol
+ }
+ }
+
+ return { keys, size }
+}
+module.exports = getObjectKeys