npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@xtao-org/fitzjson.js

v0.1.2

Published

An implementation of fitzJSON in JavaScript

Downloads

2

Readme

[EXPERIMENTAL] [WORK IN PROGRESS]

Reference implementation of the fitzJSON semantics interpreter in JavaScript.

Depends on the reference tree-sitter-fitzjson syntax.

Provides fitzJSON.parse and fitzJSON.stringify that work analogous to JSON.parse and JSON.stringify (see below for details).

Install

npm i @xtao-org/fitzjson.js

Use

To use, a parser object must be asynchronously produced first by makeFitzJSON.

import {makeFitzJSON} from '@xtao-org/fitzjson.js'

const fitzJSON = await makeFitzJSON()

const input = `{"a":@bigint 2219302139021039219030213902193}`

const parsed = fitzJSON.parse(input)

const stringified = fitzJSON.stringify(parsed)

console.assert(input === stringified)

fitzJSON.parse and .stringify vs JSON.parse and .stringify

This library provides fitzJSON.parse and fitzJSON.stringify that work analogous to JSON.parse and JSON.stringify.

Aims to support the exact same interface and a superset of the behavior of these functions. For documentation of these, see MDN:

The implementations here were written according to these specifications, extending functionality in accordance with the features of fitzJSON.

In particular, in fitzJSON.parse:

  • The second argument can be either a reviver function (like in JSON.strigify) OR an options object (unlike JSON.stringify). The options object may contain the reviver function in its reviver property.

Also, in fitzJSON.stringify:

  • if a value has a .toFitzJSON method, it will be preferred over .toJSON. The method has the same interface.
  • BigInts will be represented as @bigint <numerical value>
  • Dates will be represented as @date <ISO string produced by .toISOString()>
  • +-Infinity and NaN will be represented literally
  • Maps with string keys will be represented the same as objects
  • Maps with nonstring keys will cause an error
  • a special Decorated class is provided which can be used to put custom decorators in the output. An instance of Decorated will be represented as @<instance decorator> @<instance value>. Such an instance should be constructed with new Decorated(decoratorName, value) where decoratorName should be a valid fitzJSON identifier (pretty much the same as a JavaScript identifier), otherwise the constructor will throw an error. value can be any stringifiable value.

Note: the well-formed JSON.stringify() specification is implemented, so lone UTF-16 surrogates will be properly escaped in the output.