@klave/as-json
TypeScript icon, indicating that this package has built-in type declarations

0.5.67-fix.0 • Public • Published

JSON

Installation

npm install json-as

Add the transform to your asc command (e.g. in package.json)

--transform json-as/transform

Alternatively, add it to your asconfig.json

{
  // ...
  "options": {
    "transform": ["json-as/transform"]
  }
}

Usage

import { JSON } from "json-as/assembly";

// @json or @serializable work here
@json
class Vec3 {
  x!: f32;
  y!: f32;
  z!: f32;
}

@json
class Player {
  firstName!: string;
  lastName!: string;
  lastActive!: i32[];
  age!: i32;
  pos!: Vec3 | null;
  isVerified!: boolean;
}

const player: Player = {
  firstName: "Emmet",
  lastName: "West",
  lastActive: [8, 27, 2022],
  age: 23,
  pos: {
    x: 3.4,
    y: 1.2,
    z: 8.3
  },
  isVerified: true
};

const stringified = JSON.stringify<Player>(player);
// Alternative: use JSON.serializeTo(player, out);

const parsed = JSON.parse<Player>(stringified);

If you use this project in your codebase, consider dropping a star. I would really appreciate it!

Performance

Run or view the benchmarks here

Below are benchmark results comparing JavaScript, WAVM (WebAssembly Virtual Machine), and Wasmtime environments.

JavaScript Results

NodeJS v20.5.1 - TinyBench v2.5.0 (V8)

┌───────────────────────────┬───────────────┐
│         Task Name         │   ops / sec   │
├───────────────────────────┼───────────────┤
│ 'Stringify Object (Vec3)' │  '1,191,221'  │
│   'Parse Object (Vec3)'   │  '897,759'    │
│ 'Stringify Number Array'  │  '1,552,255'  │
│   'Parse Number Array'    │  '1,225,325'  │
│    'Stringify String'     │  '1,761,011'  │
│      'Parse String'       │  '80,845'     │
└───────────────────────────┴───────────────┘

AssemblyScript Results

WAVM v0.0.0-prerelease - as-bench v0.0.0-alpha (LLVM)

┌───────────────────────────┬───────────────┐
│         Task Name         │   ops / sec   │
├───────────────────────────┼───────────────┤
│ 'Stringify Object (Vec3)' │  '6,270,322'  │
│   'Parse Object (Vec3)'   │  '8,000,195'  |
│ 'Stringify Number Array'  │  '6,664,937'  │
│   'Parse Number Array'    │  '6,557,357'  │
│    'Stringify String'     │  '6,946,947'  │
│      'Parse String'       │  '10,952,502' │
└───────────────────────────┴───────────────┘

Wasmtime v11.0.1 - as-bench v0.0.0-alpha (Cranelift)

┌───────────────────────────┬───────────────┐
│         Task Name         │   ops / sec   │
├───────────────────────────┼───────────────┤
│ 'Stringify Object (Vec3)' │  '2,038,684'  │
│   'Parse Object (Vec3)'   │  '4,623,337'  |
│ 'Stringify Number Array'  │  '2,500,947'  │
│   'Parse Number Array'    │  '2,959,180'  │
│    'Stringify String'     │  '3,236,896'  │
│      'Parse String'       │  '5,634,594'  │
└───────────────────────────┴───────────────┘

Issues

Please submit an issue to https://github.com/JairusSW/as-json/issues if you find anything wrong with this library

Package Sidebar

Install

npm i @klave/as-json

Weekly Downloads

46

Version

0.5.67-fix.0

License

MIT

Unpacked Size

116 kB

Total Files

39

Last publish

Collaborators

  • fguitton