https://github.com/swordev/datamanager-js
https://github.com/swordev/datamanager-js
Last synced: 7 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/swordev/datamanager-js
- Owner: swordev
- Created: 2019-08-20T23:14:54.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T09:46:30.000Z (over 3 years ago)
- Last Synced: 2024-05-01T22:39:51.093Z (about 2 years ago)
- Language: TypeScript
- Size: 310 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# DataManager
> DataManager provides a friendly interface for reading/writing typed arrays in ArrayBuffer.
## Features
- Custom types
- Auto byte alignment
- Low overhead size
## Installation
```sh
npm i @swordev/datamanager
```
## Usage
```typescript
import DataManager from "@swordev/datamanager"
const dm = new DataManager()
const data = [
new Uint8Array(100 * 100).fill(255),
new Float32Array([Math.PI]),
]
const encoded = dm.encode(data) // ArrayBuffer
const decoded = dm.decode(encoded) // [Uint8Array, Float32Array]
const byteLength = encoded.byteLength // 10000 + 4 + 20
```
## Examples
### JSON
```typescript
import DataManager from "@swordev/datamanager"
import { Json } from "@swordev/datamanager/TypeConfig"
const dm = new DataManager([Json])
const data = [
{ value: new Uint8Array([2, 4, 8]) }
]
const encoded = dm.encode(data) // ArrayBuffer
const decoded = dm.decode(encoded) // [{ value: { 0: 2, 1: 4: 2: 8 } }]
```
### Extended JSON
```typescript
import DataManager from "@swordev/datamanager"
import { EJson } from "@swordev/datamanager/TypeConfig"
const dm = new DataManager([EJson])
const data = [
{ value: new Uint8Array([2, 4, 8]) }
]
const encoded = dm.encode(data) // ArrayBuffer
const decoded = dm.decode(encoded) // [{ value: Uint8Array }]
```
### Typed arrays + Extended JSON
```typescript
import DataManager from "@swordev/datamanager"
import { EJson } from "@swordev/datamanager/TypeConfig"
const dm = new DataManager([EJson])
const data = [
new Float32Array([Math.PI]),
{ image: new Uint8Array(1024 * 768) }
]
const encoded = dm.encode(data) // ArrayBuffer
const decoded = dm.decode(encoded) // [Float32Array, { image: Uint8Array }]
```
### Custom type + Extended JSON
```typescript
import DataManager from "@swordev/datamanager"
import { EJsonTypeConfig } from "@swordev/datamanager/TypeConfig"
const dm = new DataManager([EJsonTypeConfig])
dm.addTypeConfig({
100: {
BYTES_PER_ELEMENT:
BigUint64Array.BYTES_PER_ELEMENT,
testEncode: value =>
value instanceof Date,
encode: data =>
new BigUint64Array([BigInt((data.value as Date).getTime())]),
decode: data =>
new Date(Number(data.toTypedArray(BigUint64Array)[0]))
}
})
const data = [
new Date,
{ date: new Date }
]
const encoded = dm.encode(data) // ArrayBuffer
const decoded = dm.decode(encoded) // [Date, { date: Date }]
```
## Building
```sh
git clone https://github.com/swordev/datamanager-js.git
cd datamanager-js
npm install
npm run build
```