Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

pointer-props

saibotsivad140SEE LICENSE IN LICENSE.md1.1.4TypeScript support: included

JavaScript object manipulation (get/set/del) using JSON Pointer (RFC6901) and JSON Reference paths.

get, set, del, resolve, ref, $ref, rfc6901, json pointer, jsonpointer, json-pointer, json reference, jsonreference, json-reference

readme

pointer-props

JavaScript object manipulation (get/set/del) using JSON Pointer (RFC6901) syntax, and optional resolution of JSON References.

Install

The usual ways:

npm install pointer-props

Example

Get or set a property, either using the JSON Pointer string or with an array:

import { get, set } from 'pointer-props'
const obj = { foo: { bar: 3 } }
get(obj, '/foo/bar') // => 3
get(obj, [ 'foo', 'bar' ]) // => 3
set(obj, '/foo/bar', 4) // => { foo: { bar: 4 } }
set(obj, [ 'foo', 'bar' ], 5) // => { foo: { bar: 5 } }

Resolve JSON Reference paths to the final non-referenced path (as an array):

import { resolve } from 'pointer-props'
const obj = {
    foo: { $ref: '#/fizz/buzz' },
    fizz: { buzz: 3 }
}
resolve('#/foo/bar') // => [ 'fizz', 'buzz' ]

Handles escaped strings, as expected:

const obj = {
    'f/o/o': {
        'b~a~r': 3
    }
}
get(obj, '/f~1o~1o/b~0a~0r') // => 3

Generate escaped strings from a list of tokens, or a list of tokens from a string:

import { toPointer, toTokens } from 'pointer-props'
toPointer([ 'a/b', 'c~d' ]) // => "/a~1b/c~0d"
toTokens('/a~1b/c~0d') // => [ "a/b", "c~d" ]

API

Under the hood, the get/set functions use the amazing dset and dlv, which should be pretty familiar.

function get(obj: any, path: string | ArrayLike<string | number>): any

Get a property using either a JSON Pointer string, or an array of already-unescaped accessor tokens.

import { get } from 'pointer-props'
const obj = { foo: { bar: 3 } }
get(obj, '/foo/bar') // => 3
get(obj, [ 'foo', 'bar' ]) // => 3

function set<T extends object, V>(obj: T, path: string | ArrayLike<string | number>, value: V): T

Set a property using either a JSON Pointer string, or an array of already-unescaped accessor tokens.

For convenience, the modified object is also returned.

import { set } from 'pointer-props'
const obj = {}
set(obj, '/foo/bar', 3)
console.log(obj.foo.bar) // => 3
set(obj, [ 'foo', 'bar' ], 4)
console.log(obj.foo.bar) // => 4

function del<T extends object>(obj: T, path: string | ArrayLike<string | number>): T

Remove a property using either a JSON Pointer string, or an array of already-unescaped accessor tokens.

For convenience, the modified object is also returned.

import { set } from 'pointer-props'
const obj = {}
set(obj, '/foo/bar', 3)
console.log(obj.foo.bar) // => 3
set(obj, [ 'foo', 'bar' ], 4)
console.log(obj.foo.bar) // => 4

function toTokens(path: string): Array<string>

Convert a JSON Pointer string to a list of unescaped accessor tokens.

import { toTokens } from 'pointer-props'
toTokens('/a~1b/c~0d') // => [ "a/b", "c~d" ]

function toPointer(list: ArrayLike<string | number>): string

Convert a list of unescaped accessor tokens into a JSON Pointer string.

import { toPointer } from 'pointer-props'
toPointer([ 'a/b', 'c~d' ]) // => "/a~1b/c~0d"

export function resolve<T extends object>(obj: T, path: string | ArrayLike<string | number>): ArrayLike<string | number>

Given a JSON Pointer string and an object potentially containing JSON References (e.g. $ref), resolve all references and return the final path.

import { resolve } from 'pointer-props'
const obj = {
    foo: { $ref: '#/bar' },
    bar: { $ref: '#/fizz' },
    fizz: { $ref: '#/buzz' },
    buzz: 3
}
resolve('#/foo') // => [ 'buzz' ]

License

Published and released under the Very Open License.

If you need a commercial license, contact me here.

changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Change categories are:

  • Added for new features.
  • Changed for changes in existing functionality.
  • Deprecated for once-stable features removed in upcoming releases.
  • Removed for deprecated features removed in this release.
  • Fixed for any bug fixes.
  • Security to invite users to upgrade in case of vulnerabilities.

Unreleased

Added

Changed

Deprecated

Fixed

Removed

Security

1.1.4 - 2022-03-02

Fixed

  • Set the CommonJS filename for bundlers to introspect easier.

1.1.3 - 2021-11-19

Fixed

  • Instead of throwing a cryptic exception, resolving unresolvable paths will return null.

1.1.1-1.1.2 - 2021-11-16

Fixed

  • JSON Reference resolution implementation was incorrect. It now works, and there are a few more tests.

1.1.0 - 2021-11-12

Added

  • Support to resolve JSON Reference paths.

1.0.1 - 2021-09-27

Fixed

  • Build before publishing to npm.

1.0.0 - 2021-09-27

Added

  • Add the functions and TS types, publish to npm.

[0.0.0] - 2021-09-27

Added

  • Created the base project.