EndPointBlank.Masking.JsonPath (end_point_blank_elixir v0.3.1)

Copy Markdown

A constrained, well-defined JSONPath subset shared across intake and the client libraries. It parses a path string into tokens and transforms a value by replacing every fully-matched location with the result of a callback, rebuilding parent containers immutably.

Supported tokens:

  • $ — root.
  • .name / ['name'] / ["name"]{:child, name} (object key, case-sensitive).
  • [n]{:index, n} (0-based array index).
  • .* / [*]:wildcard (every object value / array element).
  • ..name{:descendant, name} (every value under key name at any depth).

Anything outside this subset (filters, slices, unions, garbled input) makes parse/1 return :error; callers treat that as "matches nothing". Functions here never raise.

Summary

Functions

Parses a JSONPath string into a token list. Returns {:ok, tokens} or :error for unsupported/garbled input. Never raises.

Walks value following tokens, replacing each fully-matched location with fun.(old_value) and rebuilding parents immutably. Unmatched locations are left unchanged. Never raises.

Types

token()

@type token() ::
  {:child, String.t()}
  | {:index, non_neg_integer()}
  | :wildcard
  | {:descendant, String.t()}

tokens()

@type tokens() :: [token()]

Functions

parse(arg1)

@spec parse(String.t()) :: {:ok, tokens()} | :error

Parses a JSONPath string into a token list. Returns {:ok, tokens} or :error for unsupported/garbled input. Never raises.

transform(value, arg2, fun)

@spec transform(any(), tokens() | nil | :error, (any() -> any())) :: any()

Walks value following tokens, replacing each fully-matched location with fun.(old_value) and rebuilding parents immutably. Unmatched locations are left unchanged. Never raises.