source: node_modules/es-toolkit/dist/compat/object/keys.js

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 1.3 KB
Line 
1'use strict';
2
3Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
5const isBuffer = require('../../predicate/isBuffer.js');
6const isPrototype = require('../_internal/isPrototype.js');
7const isArrayLike = require('../predicate/isArrayLike.js');
8const isTypedArray = require('../predicate/isTypedArray.js');
9const times = require('../util/times.js');
10
11function keys(object) {
12 if (isArrayLike.isArrayLike(object)) {
13 return arrayLikeKeys(object);
14 }
15 const result = Object.keys(Object(object));
16 if (!isPrototype.isPrototype(object)) {
17 return result;
18 }
19 return result.filter(key => key !== 'constructor');
20}
21function arrayLikeKeys(object) {
22 const indices = times.times(object.length, index => `${index}`);
23 const filteredKeys = new Set(indices);
24 if (isBuffer.isBuffer(object)) {
25 filteredKeys.add('offset');
26 filteredKeys.add('parent');
27 }
28 if (isTypedArray.isTypedArray(object)) {
29 filteredKeys.add('buffer');
30 filteredKeys.add('byteLength');
31 filteredKeys.add('byteOffset');
32 }
33 const inheritedKeys = Object.keys(object).filter(key => !filteredKeys.has(key));
34 if (Array.isArray(object)) {
35 return [...indices, ...inheritedKeys];
36 }
37 return [...indices.filter(index => Object.hasOwn(object, index)), ...inheritedKeys];
38}
39
40exports.keys = keys;
Note: See TracBrowser for help on using the repository browser.