wallet-core/node_modules/concordance/lib/getObjectKeys.js

37 lines
1.0 KiB
JavaScript
Raw Normal View History

2017-08-14 05:01:11 +02:00
'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