3.0.0
Features
This change allows to properly encode BigInt objects:
// always as string
BigInt.prototype.toJSON = function () {
return String(this);
};
// or either as string or number, depending on the value
BigInt.prototype.toJSON = function () {
var isSafeNumber = Number.MIN_SAFE_INTEGER <= this && this <= Number.MAX_SAFE_INTEGER;
return isSafeNumber ? Number(this) : String(this);
};
- encode ArrayBuffer objects as bin (8209327)
import { encode } from "notepack.io";
encode(Uint8Array.of(1, 2, 3, 4));
// before: <Buffer c7 04 00 01 02 03 04>
// after: <Buffer c4 04 01 02 03 04>
ArrayBuffer objects encoded with previous versions of the library will still be decoded, but as Buffer instead of Uint8Array.
Reference: https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family
- encode Date objects following the official timestamp extension (9fb6275)
import { encode } from "notepack.io";
encode(new Date("2000-06-13T00:00:00.000Z"));
// before: <Buffer d7 00 00 00 00 df b7 62 9c 00>
// after: <Buffer d6 ff 39 45 79 80>
Date objects encoded with previous versions of the library will still be properly decoded.
Reference: https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type
- match JSON.stringify() behavior (21c6592)
The library will now match the behavior of the JSON.stringify() method:
- undefined is now encoded as nil (0xc0)
- undefined values in objects are now ignored
import { encode, decode } from "notepack.io";
const value = {
a: undefined,
b: null,
c: [undefined, null]
};
decode(encode(value));
// before:
// {
// a: undefined,
// b: null,
// c: [undefined, null]
// }
// after:
// {
// b: null,
// c: [null, null]
// }
Diff: 2.3.0...3.0.0