1.0.4 • Published 2 years ago

@j0code/yson v1.0.4

Weekly downloads
-
License
GPL-3.0-or-later
Repository
github
Last release
2 years ago

YScript Object Notation

YSON implementation for JavaScript

YSON is similar to JSON. Main benefits:

  • smaller filesize
  • no "" around keys
  • Types

Install

NPM

> npm i @j0code/yson

Usage

Module (ECMAScript 2015)

import YSON from "@j0code/yson"

// same as JSON
let s = YSON.stringify(someObject) // does not support reviver
let o = YSON.parse(s) // currently does not support replacer and space

// additional
let f = await YSON.load("./file.yson") // load file with fs/promises ad YSON.parse() it
let t = YSON.parse(s, [YourClass1, YourClass2]) // allows parsing your own classes back (see Types)

CommonJS

const YSON = require("@j0code/yson")

Specification

YSON knows different datatypes

Number, Boolean, Null, String, Hexadecimal Integer

5
6.5
.33
1.5e-2
true
false
null
"Hello World"
#abcdef

Object

The difference to JSON is that you don't need "" around keys

{
  a: 3,
  s: "a string",
  b: false
  this works: true
}

Array

[1, 2, 3, 4, "Hello World", false, 42]

Types

Note: this is in development in therefore is subject to change

{
  a: Date {
    date: "2022-06-06T11:59:41.108Z"
  },
  b: URL {
    href: 'https://github.com/j0code/node-yson/'
  },
  c: Map {
    key1: value1,
    key2: value2
  },
  d: Set [value1, value2],
  e: YourClass {
    x: 5
    y: 3
  },
	f: YourClass [ // Note: if you don't want this to work, return null on static .fromYSON()
		1, 2, 3
	]
}

Custom Types

Note: this is in development in therefore is subject to change

parse

You can read your own classes back

let t = YSON.parse(s, [YourClass1, YourClass2])

The YSON parser takes the first class with the name specified before {} (e.g. YourClass1 {})

If your class declares a static function fromYSON(), the parser will feed the object into the first parameter and will go on with the return value.

If not, it will use the constructor instead

stringify

YSON will automatically include the class name derived from obj.constructor.name

If you want to customize the behavior of stringify, you can define either toYSON() or toJSON(). (toYSON() is prioritized)

This is useful if you have private fields that you want to save.

Note

Native Types (like Map) take priority, so any classes named Map, Set, Date,... are ignored.