SerDes for TypeScript
GloriousThe library you can rely on,
For binary serialization and deserialization,
In Node, Deno, and the Web environment,
Which is simple and yet performant.
Features
- Performant
- Easy to use
- Full TypeScript support
- Super extensible
- 99% tree-shakable
- Zero dependencies (small footprint)
- Runs in Node, Deno and browsers
- No
eval()
orFunction()
by default - Performant eval mode with
import "sirdez/eval"
- MessagePack for schemaless data
- More details...
Performance Comparison with other tools in Node (ops/sec)
Installation
Expand for more details.
Node (with or without bundlers)
In the terminal with NPM
npm i sirdez
Or with Yarn
yarn add sirdez
In the code with ES Modules
import * as sd from "sirdez";
or with CommonJS
const sd = require("sirdez");
Web (without bundlers)
In HTML with UMD
<script src="https://cdn.jsdelivr.net/npm/sirdez/dist/sirdez.umd.js"></script>
In an ES module script (statically)
import * as sd from "https://cdn.jsdelivr.net/npm/sirdez/dist/sirdez.es.js";
In an ES module script (dynamically)
const sd = await import(
"https://cdn.jsdelivr.net/npm/sirdez/dist/sirdez.es.js"
);
Deno
In code (statically)
import * as sd from "https://deno.land/x/sirdez/mod.ts";
In code (dynamically)
const sd = await import("https://deno.land/x/sirdez/mod.ts");
Usage
Creating a simple SerDes.
const person = sd.use(
sd.struct({
name: sd.string(sd.utf8, sd.uint8),
age: sd.uint8
})
);
const bytes = person.toBytes({
name: "Bob",
age: 23
});
const samePerson = person.fromBytes(bytes);
console.log({ bytes, samePerson });
Using TypeScript utilities
type Person = sd.GetType<typeof person>;
const bob: Person = {
name: "Bob",
age: 23
};
Roadmap
- Support decorators for schema
-
msgpack
extension mechanism using classes - Better support for protocol buffers
- Avro-Sirdez schema transpiler
Known Issues
-
msgpack
becomes very slow for large arrays (help wanted for optimizing it!🙏 )
Resources
Contribution
Help and suggestions are welcomed!
License
Copyright 2022 Wei (weisrc).
This software is under the MIT license.
Please see LICENSE for more information.