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

ion-js

v5.2.0

Published

A JavaScript implementation of the Ion data interchange format

Downloads

58,976

Readme

Amazon Ion JavaScript

An implementation of Amazon Ion for JavaScript written in TypeScript.

NPM Version License Documentation

This package is tested with Node JS major versions 14, 16, and 18. While this library should be usable within browsers that support ES5+, please note that it is not currently being tested in any browser environments.

Getting Started

You can use this library either as a Node.js module or inside an HTML page.

NPM

  1. Add ion-js to your dependencies using npm

    npm install --save ion-js
  2. Use the library to read/write Ion data. Here is an example that reads Ion data from a JavaScript string:

    let ion = require("ion-js");
       
    // Reading
    let ionData = '{ greeting: "Hello", name: "Ion" }';
    let value = ion.load(ionData);
    console.log(value.greeting + ", " + value.name + "!");
      
    // Writing
    let ionText = ion.dumpText(value);
    console.log("Serialized Ion: " + ionText);

    For more examples, see the Ion DOM README.

Try it yourself.

Note: if your package's public interface exposes part of this library, this library should be specified as a peer dependency in your package's package.json file. Otherwise, packages that depend on your package and this library may experience unexpected behavior, as two installations of this library (even if the same version) are not designed or tested to behave correctly.

Web Browser

You can include the Ion-js bundle (ES5 compatible) using the URLs

These will create and initialize window.ion which has the same exact API as our npm package. Here is an example

<html>
<head>
  <meta charset="UTF-8"/>
  <script src="scripts/ion-bundle.min.js"></script>

  <!-- more HTML/JS code that can now use `window.ion` to create/write Ion -->
</head>
</html>

API

TypeDoc generated documentation can be found at here. Please note that anything not documented in the the API documentation is not supported for public use and is subject to change in any version.

Git Setup

This repository contains a git submodule called ion-tests, which holds test data used by ion-js's unit tests.

The easiest way to clone the ion-js repository and initialize its ion-tests submodule is to run the following command.

$ git clone --recursive https://github.com/amazon-ion/ion-js.git ion-js

Alternatively, the submodule may be initialized independently from the clone by running the following commands.

$ git submodule init
$ git submodule update

Development

Use npm to setup the dependencies. In the project directory you can run the following:

$ npm install

Building the package can be done with the release script (which runs the tests).

$ npm run release

Tests can be run using npm as well

$ npm test

This package uses Grunt for its build tasks. For convenience, you may want to install this globally:

$ npm -g install grunt-cli
$ grunt release

Or you could use the locally installed Grunt:

$ ./node_modules/.bin/grunt release

Build Output

The build above will compile the library into the dist directory. This directory has subdirectories of the form <module type>/<target ES version>. In general, we target ES6 and rely on polyfills to support earlier versions.

  • dist/es6/es6 - Targets the ES6 module system and ES6
  • dist/commonjs/es6 - Targets the CommonJS module system and ES6
  • dist/amd/es6 - Targets the AMD module system and ES6

A distribution using browserify and babelify creates a browser friendly polyfilled distribution targeting ES5: at dist/browser/js/ion-bundle.js.

Ion Specification Support

| Types | IonText | IonBinary | Limitations | |:-------------------------:|:-------------:|:-------------:|:---------------------------------------------:| | null | yes | yes | none | | bool | yes | yes | none | | int | yes | yes | underscores, binary digits | | float | yes | yes | underscores | | decimal | yes | yes | none | | timestamp | yes | yes | none | | string | yes | yes | none | | symbol | yes | yes | $0, symbol tokens | | blob | yes | yes | none | | clob | yes | yes | none | | struct | yes | yes | none | | list | yes | yes | none | | sexp | yes | yes | none | | annotations | yes | yes | none | | local symbol tables | yes | yes | none | | shared symbol tables | no | yes | none |

Notes:

  • test/iontests.ts defines multiple skipList variables referencing test vectors that are not expected to work at this time.

  • ion-js supports shared symbol table for Ion Binary. Below is an example of how shared symbol table can be used here:

// Create a SharedSymbolTable with the desired strings
let sharedSymbolTable = new SharedSymbolTable('foo', 1, ['id', 'name']);
// Define an import chain
// The system symbol table does not import any other tables (`null` below)
let systemSymbolTableImport = new Import(null, getSystemSymbolTable());
// The shared symbol table imports the system symbol table
let sharedSymbolTableImport = new Import(systemSymbolTableImport, sharedSymbolTable);
// Create a local symbol table that imports the shared symbol table
let localSymbolTable = new LocalSymbolTable(sharedSymbolTableImport);
// Create a writer that uses our new local symbol table
let writer = new BinaryWriter(localSymbolTable, new Writeable());

// Write id and name fields in a struct
writer.stepIn(IonTypes.STRUCT);
writer.writeFieldName("id");
writer.writeInt(5);
writer.writeFieldName("name");
writer.writeString("Max");
writer.stepOut();
writer.close();

// Create a catalog with shared symbol table
let catalog = new Catalog();
catalog.add(sharedSymbolTable);

// Create a reader with catalog
let bytes = writer.getBytes();
let reader = makeReader(bytes, catalog);

Contributing

See CONTRIBUTING.md

License

This library is licensed under Apache License version 2.0

Links

For more information about Ion or its other implementation, please see: