index.js 944 B

12345678910111213141516171819202122232425262728293031323334
  1. export function includeKeys(object, predicate) {
  2. const result = {};
  3. if (Array.isArray(predicate)) {
  4. for (const key of predicate) {
  5. const descriptor = Object.getOwnPropertyDescriptor(object, key);
  6. if (descriptor?.enumerable) {
  7. Object.defineProperty(result, key, descriptor);
  8. }
  9. }
  10. } else {
  11. // `Reflect.ownKeys()` is required to retrieve symbol properties
  12. for (const key of Reflect.ownKeys(object)) {
  13. const descriptor = Object.getOwnPropertyDescriptor(object, key);
  14. if (descriptor.enumerable) {
  15. const value = object[key];
  16. if (predicate(key, value, object)) {
  17. Object.defineProperty(result, key, descriptor);
  18. }
  19. }
  20. }
  21. }
  22. return result;
  23. }
  24. export function excludeKeys(object, predicate) {
  25. if (Array.isArray(predicate)) {
  26. const set = new Set(predicate);
  27. return includeKeys(object, key => !set.has(key));
  28. }
  29. return includeKeys(object, (key, value, object) => !predicate(key, value, object));
  30. }