| 12345678910111213141516171819202122232425262728293031323334 |
- export function includeKeys(object, predicate) {
- const result = {};
- if (Array.isArray(predicate)) {
- for (const key of predicate) {
- const descriptor = Object.getOwnPropertyDescriptor(object, key);
- if (descriptor?.enumerable) {
- Object.defineProperty(result, key, descriptor);
- }
- }
- } else {
- // `Reflect.ownKeys()` is required to retrieve symbol properties
- for (const key of Reflect.ownKeys(object)) {
- const descriptor = Object.getOwnPropertyDescriptor(object, key);
- if (descriptor.enumerable) {
- const value = object[key];
- if (predicate(key, value, object)) {
- Object.defineProperty(result, key, descriptor);
- }
- }
- }
- }
- return result;
- }
- export function excludeKeys(object, predicate) {
- if (Array.isArray(predicate)) {
- const set = new Set(predicate);
- return includeKeys(object, key => !set.has(key));
- }
- return includeKeys(object, (key, value, object) => !predicate(key, value, object));
- }
|