foop
Version:
interfaces that describe their intentions.
58 lines (52 loc) • 4.41 kB
JavaScript
var ObjectKeys = require('./keys')
var getPrototypeOf = require('./getPrototypeOf')
var getOwnPropertyNames = Object.getOwnPropertyNames
var getOwnPropertySymbols = Object.getOwnPropertySymbols
/**
* @desc properties, property symbols, object keys
* ^ all again for prototype
* @memberOf util
* @since 3.0.0
* @version 5.0.0-beta.4 only used in gc (as of 5.0.0-beta.4)
*
* @param {Object} obj object to get properties & symbols from
* @return {Array<string>} properties
*
* @see deps/gc
* @see deps/utils/nonEnumerableTypes
* @see http://2ality.com/2011/07/js-properties.html
* @TODO https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors
* `const getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors`
*
* @example
* var obj = {key: true}
* allProperties(obj)
* //=> ['key']
*
* @example
* class One {
* method() {}
* }
* class Two extends One {
* eh() {}
* }
* allProperties(new Two())
* //=> ['eh', 'method']
*
*/
function allProperties(obj) {
return getOwnPropertyNames(obj).concat(getOwnPropertySymbols(obj))
// const result = []
// for (const prop in obj) result.push(prop)
// return result
// flatten(getOwnPropertyNames, getOwnPropertySymbols)
// const proto = getPrototypeOf(obj)
// return [].concat(
// getOwnPropertyNames(obj),
// getOwnPropertySymbols(obj)
// // ObjectKeys(obj),
// // proto ? allProperties(proto) : []
// )
}
module.exports = allProperties
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcHMuanMiLCJzb3VyY2VzIjpbInByb3BzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE9iamVjdEtleXMgPSByZXF1aXJlKCcuL2tleXMnKVxuY29uc3QgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL2dldFByb3RvdHlwZU9mJylcblxuY29uc3QgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5jb25zdCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzXG5cbi8qKlxuICogQGRlc2MgcHJvcGVydGllcywgcHJvcGVydHkgc3ltYm9scywgb2JqZWN0IGtleXNcbiAqICAgICAgIF4gYWxsIGFnYWluIGZvciBwcm90b3R5cGVcbiAqIEBtZW1iZXJPZiB1dGlsXG4gKiBAc2luY2UgMy4wLjBcbiAqIEB2ZXJzaW9uIDUuMC4wLWJldGEuNCBvbmx5IHVzZWQgaW4gZ2MgKGFzIG9mIDUuMC4wLWJldGEuNClcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9iaiBvYmplY3QgdG8gZ2V0IHByb3BlcnRpZXMgJiBzeW1ib2xzIGZyb21cbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59IHByb3BlcnRpZXNcbiAqXG4gKiBAc2VlIGRlcHMvZ2NcbiAqIEBzZWUgZGVwcy91dGlscy9ub25FbnVtZXJhYmxlVHlwZXNcbiAqIEBzZWUgaHR0cDovLzJhbGl0eS5jb20vMjAxMS8wNy9qcy1wcm9wZXJ0aWVzLmh0bWxcbiAqIEBUT0RPIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzXG4gKiBgY29uc3QgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYFxuICpcbiAqIEBleGFtcGxlXG4gKiAgICB2YXIgb2JqID0ge2tleTogdHJ1ZX1cbiAqICAgIGFsbFByb3BlcnRpZXMob2JqKVxuICogICAgLy89PiBbJ2tleSddXG4gKlxuICogQGV4YW1wbGVcbiAqICAgIGNsYXNzIE9uZSB7XG4gKiAgICAgIG1ldGhvZCgpIHt9XG4gKiAgICB9XG4gKiAgICBjbGFzcyBUd28gZXh0ZW5kcyBPbmUge1xuICogICAgICBlaCgpIHt9XG4gKiAgICB9XG4gKiAgICBhbGxQcm9wZXJ0aWVzKG5ldyBUd28oKSlcbiAqICAgIC8vPT4gWydlaCcsICdtZXRob2QnXVxuICpcbiAqL1xuZnVuY3Rpb24gYWxsUHJvcGVydGllcyhvYmopIHtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5TmFtZXMob2JqKS5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikpXG5cbiAgLy8gY29uc3QgcmVzdWx0ID0gW11cbiAgLy8gZm9yIChjb25zdCBwcm9wIGluIG9iaikgcmVzdWx0LnB1c2gocHJvcClcbiAgLy8gcmV0dXJuIHJlc3VsdFxuXG4gIC8vIGZsYXR0ZW4oZ2V0T3duUHJvcGVydHlOYW1lcywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKVxuICAvLyBjb25zdCBwcm90byA9IGdldFByb3RvdHlwZU9mKG9iailcbiAgLy8gcmV0dXJuIFtdLmNvbmNhdChcbiAgLy8gICBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaiksXG4gIC8vICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iailcbiAgLy8gICAvLyBPYmplY3RLZXlzKG9iaiksXG4gIC8vICAgLy8gcHJvdG8gPyBhbGxQcm9wZXJ0aWVzKHByb3RvKSA6IFtdXG4gIC8vIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhbGxQcm9wZXJ0aWVzXG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDcENBLEdBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDOztBQUVsREEsR0FBSyxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUI7QUFDdERBLEdBQUssQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0MxRCxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUU7RUFDMUIsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0NBY25FOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsYUFBYTsifQ==