v2.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.findByPointer = void 0;
  4. const hasOwnProperty_1 = require("@jsonjoy.com/util/lib/hasOwnProperty");
  5. const util_1 = require("../util");
  6. const { isArray } = Array;
  7. const findByPointer = (pointer, val) => {
  8. if (!pointer)
  9. return { val };
  10. let obj;
  11. let key;
  12. let indexOfSlash = 0;
  13. pointer = pointer.substr(1);
  14. while (pointer) {
  15. indexOfSlash = pointer.indexOf('/');
  16. let component;
  17. if (indexOfSlash > -1) {
  18. component = pointer.substring(0, indexOfSlash);
  19. pointer = pointer.substring(indexOfSlash + 1);
  20. }
  21. else {
  22. component = pointer;
  23. pointer = '';
  24. }
  25. key = (0, util_1.unescapeComponent)(component);
  26. obj = val;
  27. if (isArray(obj)) {
  28. if (key === '-')
  29. key = obj.length;
  30. else {
  31. if (!(0, util_1.isValidIndex)(key))
  32. throw new Error('INVALID_INDEX');
  33. key = Number(key);
  34. if (key < 0)
  35. throw new Error('INVALID_INDEX');
  36. }
  37. val = (0, hasOwnProperty_1.hasOwnProperty)(obj, String(key)) ? obj[key] : undefined;
  38. }
  39. else if (typeof obj === 'object' && !!obj) {
  40. val = (0, hasOwnProperty_1.hasOwnProperty)(obj, String(key)) ? obj[key] : undefined;
  41. }
  42. else
  43. throw new Error('NOT_FOUND');
  44. }
  45. return { val, obj, key };
  46. };
  47. exports.findByPointer = findByPointer;