| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 'use strict';var test = require('tape');var hasSymbols = require('has-symbols/shams')();var hasPropertyDescriptors = require('has-property-descriptors')();var ownKeys = require('../');/** @type {(a: PropertyKey, b: PropertyKey) => number} */function comparator(a, b) {	if (typeof a === 'string' && typeof b === 'string') {		return a.localeCompare(b);	}	if (typeof a === 'number' && typeof b === 'number') {		return a - b;	}	return typeof a === 'symbol' ? 1 : -1;}test('ownKeys', function (t) {	t.equal(typeof ownKeys, 'function', 'is a function');	t.equal(		ownKeys.length,		1,		'has a length of 1'	);	t.test('basics', function (st) {		var obj = { a: 1, b: 2 };		if (hasPropertyDescriptors) {			Object.defineProperty(obj, 'c', {				configurable: true,				enumerable: false,				writable: true,				value: 3			});		}		st.deepEqual(			ownKeys(obj).sort(comparator),			(hasPropertyDescriptors ? ['a', 'b', 'c'] : ['a', 'b']).sort(comparator),			'includes non-enumerable properties'		);		st.end();	});	t.test('symbols', { skip: !hasSymbols }, function (st) {		/** @type {Record<PropertyKey, unknown>} */		var obj = { a: 1 };		var sym = Symbol('b');		obj[sym] = 2;		var nonEnumSym = Symbol('c');		Object.defineProperty(obj, nonEnumSym, {			configurable: true,			enumerable: false,			writable: true,			value: 3		});		st.deepEqual(			ownKeys(obj).sort(comparator),			['a', sym, nonEnumSym].sort(comparator),			'works with symbols, both enum and non-enum'		);		st.end();	});	t.end();});
 |