# lcs-js

> Implementation of the LCS (Libra Canonical Serialization) protocol

Latest version **0.0.3** (published 2020-09-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install lcs-js
pnpm add lcs-js
yarn add lcs-js
bun add lcs-js
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2020-09-30 |
| First published | 2020-09-30 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 17.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Igor Demko |
| Maintainers | buuni |
| Keywords | dfinance, dfi, move, libra, smartcontract, xfi, lcs, lcs-serialization, lcs-deserialization |

## Links

- npm: https://www.npmjs.com/package/lcs-js
- npm.io page: https://npm.io/package/lcs-js

## Dependencies (3)

- [leb](https://npm.io/package/leb.md) ^0.3.0
- [xregexp](https://npm.io/package/xregexp.md) ^4.3.0
- [bignumber.js](https://npm.io/package/bignumber.js.md) ^9.0.0

## Recent versions

- 0.0.3 (latest) — 2020-09-30
- 0.0.2 — 2020-09-30
- 0.0.1 — 2020-09-30

## README

# lcs-js

Implementation of the LCS (Libra Canonical Serialization) protocol.

> NOTE: Currently only data deserialization function is available

## Examples

```
npm install lcs-js
```

### Deserialize base type

LCS library supports the following basic types:
* u8
* u32
* u64
* u128
* boolean | bool
* address
* vector<TYPE>

```js
const lcs = require('lcs-js');

function bufferFromHex(hex) {
  const data = hex.match(/.{1,2}/g).map((x) => parseInt(x, 16));
  return new Uint8Array(data);
}

const hex = '4d0100000000000000000000000000000';
const buffer = Buffer.from(bufferFromHex(hex));

const result = lcs.deserialize(buffer, 'u128');

console.log(result); // 333

```

### Register custom type

```js
const lcs = require('lcs-js');

const hex = '03646669'
const buffer = Buffer.from(bufferFromHex(hex));

lcs.registerType('string', {
  decode(cursor, value, options) {
    // A string is a vector that contains the UTF8 character numbers
    const vector = lcs.deserialize(cursor, 'vector<u8>', options);

    return vector.map(charCode => String.fromCharCode(charCode)).join('');
  },
  code() {
    // TODO in development
  },
});

const result = lcs.deserialize(buffer, 'string')

console.log(result); // dfi
```

### Register custom structure

```js
const lcs = require('lcs-js');

const hex = '4d01000000000000000000000000000003646669db4b0ed53d2fd0a74ce8f0d106e7ab144eb0fbab00'
const buffer = Buffer.from(bufferFromHex(hex));

lcs.registerType('SentPaymentEvent', {
  amount: 'u128',
  denom: 'vector<u8>',
  payee: 'address',
  metadata: 'vector<u8>',
});

const result = lcs.deserialize(buffer, 'SentPaymentEvent')

console.log(result);
/*

    {
      amount: BigNumber { s: 1, e: 2, c: [ 333 ] },
      denom: [ 100, 102, 105 ],
      payee: 'db4b0ed53d2fd0a74ce8f0d106e7ab144eb0fbab',
      metadata: []
    }

*/
```

---
_Source: https://npm.io/package/lcs-js · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
