API Reference

April 7, 2026 ยท View on GitHub

Parsing

Jsonic(src, meta?, parent_ctx?)

Parse a string using default settings. Jsonic is both a callable function and a namespace for the API below.

const { Jsonic } = require('jsonic')

Jsonic('a:1')  // {"a": 1}

The optional meta parameter passes arbitrary data through to plugins and rule actions.

instance(src, meta?)

A configured instance is also directly callable.

const j = Jsonic.make({ comment: { lex: false } })
j('a:1')  // {"a": 1}

Instance Management

Jsonic.make(options?)

Create a new parser instance with the given options. Unset options fall back to defaults. Returns a callable instance with the full API.

const strict = Jsonic.make({
  comment: { lex: false },
  text: { lex: false }
})

The options parameter can also be a string shortcut:

  • 'json' -- strict JSON parser (only JSON-tagged grammar rules)
  • 'jsonic' -- minimal jsonic parser

Jsonic.empty(options?)

Create an empty parser with no grammar or defaults. Used as a base for building custom parsers from scratch.

Configuration

instance.options

Direct access to the current options object.

instance.options(changes?)

When called as a function, deep-merges changes into the options and returns the result. Does not modify the instance in-place (use make() for that).

instance.config()

Returns a deep copy of the internal configuration. This is the resolved, compiled form of the options -- useful for debugging.

Grammar

instance.rule(name?, definer?)

Access or modify grammar rules.

  • rule() -- returns the full rule spec map
  • rule(name) -- returns the rule spec for name
  • rule(name, definer) -- calls definer(ruleSpec) to modify the rule

Each rule spec has open and close alternate lists, plus state actions (bo, bc, ao, ac) for before/after open/close phases.

jsonic.rule('val', (rs) => {
  rs.open.unshift({
    s: [[myToken]],
    a: (rule) => { rule.node = 'custom' }
  })
})

instance.token(ref)

Get or create a token type. ref is a string name (e.g., '#OB' for open brace). When called with a second argument mapping to a source character, it registers a new fixed token.

const T_TILDE = jsonic.token('#TL', '~')

instance.tokenSet(ref)

Get a named token set. Built-in sets: 'IGNORE' (space, line, comment), 'VAL' (text, number, string, value), 'KEY'.

instance.fixed(ref)

Get the fixed token mapping (source characters to token types).

Plugins

instance.use(plugin, options?)

Register and execute a plugin. The plugin function receives the jsonic instance and the options object.

jsonic.use(myPlugin, { key: 'value' })

Plugins are re-applied when deriving child instances.

Events

instance.sub({ lex?, rule? })

Subscribe to lex and/or rule events.

  • lex(token, rule, ctx) -- fires after each token is lexed
  • rule(rule, ctx) -- fires before each rule processing step
jsonic.sub({
  lex: (token, rule, ctx) => {
    console.log('token:', token)
  }
})

Utilities

instance.util

A collection of helper functions for plugin authors:

  • tokenize -- convert token names to Tin numbers
  • deep -- deep merge objects
  • clone -- deep clone
  • regexp -- safe regex construction
  • srcfmt -- format source strings for display
  • charset -- build character sets
  • errmsg, strinject -- error message helpers
  • prop, keys, values, entries, omap -- object utilities
  • trimstk, makelog, clean, str, mesc, escre -- misc helpers

Constants

OPEN, CLOSE, BEFORE, AFTER, EMPTY

Step constants used in rule definitions and state actions.

Error Handling

Parsing errors throw a JsonicError with:

PropertyDescription
codeError code ('unexpected', 'unterminated_string', etc.)
detailHuman-readable message
pos0-based character position
row1-based line number
col1-based column number
srcSource fragment at the error

Exports

The main module exports:

ExportDescription
JsonicMain parser (callable + API)
JsonicErrorError class
ParserParser class
makeLex, makeParserFactory functions
makeToken, makePoint, makeRule, makeRuleSpecInternal constructors
makeFixedMatcher, makeSpaceMatcher, makeLineMatcherLexer matchers
makeStringMatcher, makeCommentMatcher, makeNumberMatcher, makeTextMatcherLexer matchers
OPEN, CLOSE, BEFORE, AFTER, EMPTYStep constants
utilUtility functions
makeAlias for Jsonic.make