open-index/open-npm huggingface dataset:
npm package: @msquared/pixel-streaming-client
Description: Browser client for viewing pixel-streamed content from MSquared events
Latest version: 0.14.1

# MSquared Pixel Streaming Client

[![npm version](https://img.shields.io/npm/v/@msquared/pixel-streaming-client.svg)](https://www.npmjs.com/package/@msquared/pixel-streaming-client)
[![Build Status](https://github.com/msquared-io/pixel-streaming-client/actions/workflows/main.yaml/badge.svg)](https://github.com/msquared-io/pixel-streaming-client/actions/workflows/main.yaml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue.svg)](https://www.typescriptlang.org/)

Browser client for viewing pixel-streamed content from MSquared events.

## Usage

For detailed documentation please visit our [docs site](https://docs.msquared.io/apis-and-tooling/frontend-sdks/pixel-streaming).

## Features

- 🔒 Type-safe with full TypeScript support
- 📦 Multiple distribution formats (ESM, CJS, UMD)
- 🛠️ Easy integration with modern build tools

## Build

```bash
npm run build
```

This will create:
- CommonJS (CJS) build
- ES Modules (ESM) build
- Browser-ready bundle
- TypeScript declaration files

## Development

```bash
# Install dependencies
npm install

# Install git hooks
npm run hook

# Run tests
npm test

# Type checking
npm run ts:type-check

# Linting
npm run ts:lint
npm run ts:lint:fix

# Format code
npm run ts:fmt
npm run ts:fmt:fix

# Lint and format code
npm run ts:check
npm run ts:check:fix

# All validation checks
npm run ts:validate
```

## Release

The GitHub Actions workflow will automatically publish the package to npm when a new release is created.

```bash
npm version <patch|minor|major>
git push --atomic origin main <version>
```

## License

MIT © [MSquared](https://msquared.io)
npm package: @msquared/spike-onchain-sdk
Description: A TypeScript SDK for game-focused web 3 tooling
Author: Msquared
Latest version: 0.0.22

# Msquared Web3 SDK

A typescript SDK that abstracts the complexity of using web3 tooling for gaming within a browser or server environment

## Key features
- User data backed by an on-chain key value store

## Usage

### Installation

```bash
npm i @msquared/spike-onchain-sdk
```

### Peer Dependencies

In order to use this SDK, a `viem` public and optionally wallet client is required

The goal with this SDK is to detach any keys / signers from on-chain interactions!

### Example - Reading Data from chain
```typescript
import { SDK } from "@msquared/spike-onchain-sdk"

// Instantiate the SDK with just a public viem client
const sdk = new SDK({ public: getPublicClient() })

// Fetch the profile
const profile = await sdk.player.data.getProfile(
    wallet as Address, // Adjust this if another wallet wrote the data on-chain
    wallet as Address,
)
```

### Example - Writing Data on-chain
```typescript
import { SDK } from "@msquared/spike-onchain-sdk"

// Instantiate the SDK
const sdk = new SDK({
    public: getPublicClient(),
    wallet: getWalletClient(),
})

// Update the profile onchain
const hash = await sdk.player.data.setProfile(profile, account)
```
npm package: @msquared/web3-metagame-sdk
Description: A TypeScript SDK for game-focused web 3 tooling
Author: MSquared
Latest version: 0.0.85

# MSquared Web3 Metagame SDK

A typescript SDK that abstracts the complexity of using web3 tooling for gaming within a browser or server environment

## Key features
- User data backed by an on-chain key value store

## Usage

### Installation
#### NPM
```bash
npm i @msquared/web3-metagame-sdk
```

#### Yarn
```bash
yarn add @msquared/web3-metagame-sdk
```

### Peer Dependencies

In order to use this SDK, a `viem` public (and optionally wallet client) is required

The goal with this SDK is to detach any keys / signers from on-chain interactions!

### Example - Creating and updating a wallet's on-chain profile
```typescript
import { SDK } from "@msquared/web3-metagame-sdk";

type Web3Profile = {
  tokenData: Map<
    string,
    {
      chainId: bigint
      contractAddress: string
      tokenId: bigint
    }
  >
  stringData: Map<string, string>
}

// Instantiate the SDK
const sdk = new SDK({
    public: getPublicClient(),
    wallet: getWalletClient(), // Required to execute transactions
})

const profile: Web3Profile = {
    tokenData: new Map(),
    stringData: new Map()
}

// Set the latest profile
const hash = await sdk.player.data.setProfile(profile, account, {
    erc4337Nonce, // Optional but used for high transaction through put in AA environments
})

await waitForTransactionReceipt({ hash })
```

### Example - Reading Data from chain
```typescript
import { SDK } from "@msquared/web3-metagame-sdk"

// Instantiate the SDK with just a public viem client
const sdk = new SDK({ public: getPublicClient() })

// Fetch the profile
const profile = await sdk.player.data.getProfile(
    getAddress(wallet),
)
```
npm package: @msrnayeem/file-upload-utils
Description: Reusable file upload and delete utility for Node.js/TypeScript projects.
Author: MD. Shahidur Rahman Nayeem
Latest version: 1.0.2

# @msrnayeem/file-upload-utils

A simple and configurable **file upload** and **delete utility** for Node.js and TypeScript projects.  
Supports saving files under the `public` or root folder, flexible naming strategies, and customizable URL paths.

---

## Features

- Save uploaded files under `public/uploads` or `uploads` folder
- Configurable filename strategy: keep original name, timestamp prefix, or UUID prefix
- Easily delete uploaded files by relative URL path
- Written in TypeScript with type definitions
- Lightweight, no external dependencies besides `uuid`

---

## Installation

```bash
npm install @msrnayeem/file-upload-utils
```

## Usage

```typescript
import { fileUpload, fileDelete } from "@msrnayeem/file-upload-utils";

// Example file object, e.g., from an API or form
const file: File = /* your file here */;

// Upload file with default options (save in public/uploads, keep original name)
const uploadedPath = await fileUpload(file, "products");

console.log("File saved at:", uploadedPath);
// Output: "/uploads/products/filename.png"

// Upload file with timestamp naming
const uploadedPathTimestamp = await fileUpload(file, "avatars", {
    namingStrategy: "timestamp",
});

// Upload file with UUID naming and custom basePath URL
const uploadedPathUUID = await fileUpload(file, "reviews", {
    namingStrategy: "uuid",
    basePath: "/static/uploads/",
});

// Delete a previously uploaded file
await fileDelete(uploadedPathUUID, "/static/uploads/");
```
npm package: @msrvida/sanddance-explorer
Description: SandDance data exploration React component.
Latest version: 4.1.8

# @msrvida/sanddance-explorer

Visually explore, understand, and present your data.

![image](https://user-images.githubusercontent.com/11507384/72197128-a99cdd80-33d2-11ea-9b49-5d470db0abc1.png)


[Demo](https://microsoft.github.io/SandDance/app) - [API Reference](https://microsoft.github.io/SandDance/docs/sanddance-explorer/v4)

## Installation

Add these to the `dependencies` section of your `package.json`, then run `npm install`:

```json
"@msrvida/sanddance-explorer": "^4",
"@fluentui/react": "^8",
"vega": "^5.32"
```

Import these in your JavaScript:

```js
import * as fluentui from '@fluentui/react';
import * as vega from 'vega';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Explorer, use } from '@msrvida/sanddance-explorer';

//quickstart: use the included stylesheet
import "@msrvida/sanddance-explorer/dist/css/sanddance-explorer.css"

/*
  in your own stylesheet, you can modify the sanddance-explorer class to fit your needs.
  Example:

.sanddance-explorer {
  height: 800px;
}

*/

fluentui.initializeIcons();

use(fluentui, React, ReactDOM, vega);

const data = [
  { a: 1, b: "c1" },
  { a: 1, b: "c2" },
  { a: 2, b: "c3" },
  { a: 3, b: "c4" }
];

const explorerProps = {
    logoClickUrl: 'https://microsoft.github.io/SandDance/',
    mounted: explorer => {
        explorer.load(data);
    }
};

ReactDOM.render(React.createElement(Explorer, explorerProps), document.getElementById('app'));
```

## Versions

### Breaking changes in v4

* removed deck.gl dependency
* @fluentui/react @8

### Breaking changes in v3

* deck.gl dependency from 6.4 to 8.1
* fluentui-react 7.x (formerly office-ui-fabric-react 6.x)

## For more information
Please visit the [SandDance website](https://microsoft.github.io/SandDance/).
npm package: @msrvida/sanddance-jupyter-widget
Description: SandDance data exploration Jupyter Widget
Latest version: 3.1.0

# sanddance-jupyter-widget

Custom Jupyter Widget with [SandDance](https://github.com/microsoft/SandDance)

<img src="https://user-images.githubusercontent.com/9415800/82153896-47367b00-98a5-11ea-80bb-aa42be2fc76d.gif" width="100%">

## Installation

You can install using `pip`:

```bash
pip install sanddance
```

If you use jupyterlab:

```bash
jupyter labextension install @msrvida/sanddance-jupyter-widget
jupyter labextension install @jupyter-widgets/jupyterlab-manager
```

If you are using Jupyter Notebook 5.2 or earlier, you may also need to enable
the nbextension:
```bash
jupyter nbextension install --sys-prefix --symlink --overwrite --py sanddance 
jupyter nbextension enable --py --sys-prefix sanddance
```

Or you can install with `conda` instead of `pip`

```bash
conda install sanddance
```

## Getting Started

See also [examples/introduction.ipynb](https://github.com/microsoft/SandDance/blob/master/python/jupyter-widget/examples/introduction.ipynb)

```python
import pandas as pd
from sanddance import Explorer
sd = Explorer()
sd.show()

df = pd.DataFrame([
    {'x': 1, 'y': 1, 'text': 'first'},
    {'x': 2, 'y': 2, 'text': 'second'},
    {'x': 3, 'y': 3, 'text': 'third'},
])
sd.load(df)
```

Powered by [widget-ts-cookiecutter](https://github.com/jupyter-widgets/widget-ts-cookiecutter)
npm package: @msrvida/sanddance-react
Description: SandDance visualization canvas React component
Latest version: 4.0.2

# @msrvida/sanddance-react

Visually explore, understand, and present your data.

![sanddance-animation](https://user-images.githubusercontent.com/11507384/189461831-9467863e-bff8-47d2-aa03-ab2b74658814.gif)

[Demo](https://microsoft.github.io/SandDance/app) - [API Reference](https://microsoft.github.io/SandDance/docs/sanddance-react/v4)

## Installation

Add these to the `dependencies` section of your `package.json`, then run `npm install`:

```json
"@msrvida/sanddance-react": "^4",
"react": "^17",
"react-dom": "^17",
"vega": "^5.25"
```

Import these in your JavaScript:

```js
import * as vega from 'vega';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as SandDanceReact from '@msrvida/sanddance-react';

SandDanceReact.use(React, ReactDOM, vega);

const data = [
    { a: 1, b: "c1" },
    { a: 1, b: "c2" },
    { a: 2, b: "c3" },
    { a: 3, b: "c4" }
];

const insight = {
    columns: {
        x: "a",
        color: "b",
    },
    scheme: "set1",
    chart: "barchartV",
    view: "2d",
    size: {
        height: 800,
        width: 800
    }
}

ReactDOM.render(
    <SandDanceReact.Viewer
        data={data}
        insight={insight}
    />,
    document.getElementById('app')
);
```

## Versions

### Breaking changes in v4

* renamed SandDanceReact to Viewer
* removed deck.gl dependency

## For more information
Please visit the [SandDance website](https://microsoft.github.io/SandDance/).
npm package: @msrvida/sanddance-specs
Description: SandDance Vega specification generator.
Latest version: 1.8.1

# @msrvida/sanddance-specs

[Vega specifications](https://vega.github.io/vega/docs/specification/) for unit visualizations.

![image](https://user-images.githubusercontent.com/11507384/82498036-238d5380-9aa4-11ea-85b0-8fcb31522461.png)

[Demo](https://microsoft.github.io/SandDance/tests/sanddance-specs/v1/)

## Usage

You will need an array of data objects, so that columns types can be inferred.

```js
    import { inferTypes } from 'vega';

    const data = [
        //your data objects
    ];

    const insight = {
        "colorBin": "quantize",
        "columns": {
            "x": "Gender",
            "color": "Survived",
            "sort": "Survived",
            "facet": "Age"
        },
        "scheme": "set1",   //see https://vega.github.io/vega/docs/schemes/#reference
        "facetStyle": "wrap",
        "size": {
            "height": 600,
            "width": 800
        },
        "chart": "barchartV"
    };

    const columns = getColumnsFromData(inferTypes, data);
    const specColumns = getSpecColumns(insight, columns);
    const specViewOptions = {
        colors: {
            defaultCube: "steelblue",
            axisLine: "#000",
            axisText: "#000"
        },
        language: {
            count: "Count"
        },
        maxLegends: 20,
        tickSize: 10
    };
    const context = { specColumns, insight, specViewOptions };
    const specResult = build(context, data);

    if (specResult.errors) {
        console.log(specResult.errors);
    } else {
        console.log(specResult.vegaSpec);
    }
```

## Versions

### 1.5.0 Changes

* Added background image

### 1.4.0 Changes

* Show z-axis scale

### 1.3.0 Changes

* Fix for last bin of quantitative band scale

## For more information
Please visit the [SandDance website](https://microsoft.github.io/SandDance/).
npm package: @msrvida/sanddance-vue
Description: SandDance visualization canvas Vue component
Latest version: 3.0.0

# @msrvida/sanddance-vue

Visually explore, understand, and present your data.

![sanddance-animation](https://user-images.githubusercontent.com/11507384/54236654-52d42800-44d1-11e9-859e-6c5d297a46d2.gif)

[Demo](https://microsoft.github.io/SandDance/app) - [API Reference](https://microsoft.github.io/SandDance/docs/sanddance-vue/v2/api)

## Installation

Add these to the `dependencies` section of your `package.json`, then run `npm install`:

```json
"@deck.gl/core": "^8.1.5",
"@deck.gl/layers": "^8.1.5",
"@msrvida/sanddance-vue": "^3",
"@luma.gl/core": "^8.1.2",
"vega": "^5.11"
```

Import these in your JavaScript:

```js
import * as deck from "@deck.gl/core";
import * as layers from "@deck.gl/layers";
import * as luma from "luma.gl";
import * as vega from "vega";
import SandDanceVue, { SandDance } from "@msrvida/sanddance-vue";

SandDance.use(vega, deck, layers, luma);
```

## For more information

Please visit the [SandDance website](https://microsoft.github.io/SandDance/).
npm package: @msrvida/vega-morphcharts
Description: MorphCharts renderer for Vega
Author: Dan Marshall
Latest version: 1.0.6

# @msrvida/vega-morphcharts

View component for [Vega](https://vega.github.io/) visualizations, using MorphCharts for WebGL rendering.

This project combines two great visualization libraries into one. You have the expressiveness of [Vega specifications](https://vega.github.io/vega/docs/specification/) and the WebGL rendering of MorphCharts. As a result, you have the option of visualizing data in 3 dimensions.

## Limitations

This project does not fully implement every feature provided by Vega. Some interactive features are omitted due to the nature of the 3D rendering model which breaks correspondence to the 2D rendering plane. Other features simply have yet to be developed, for these we will gladly accept a pull request.

## Feature additions

Rect elements can be rendered as 3D cuboids. To do this, add `"z"` / `"depth"` encodings where you normally use `"x"` / `"width"` and `"y"` / `"height"`.
npm package: @mss.ba/pikpay-node
Description: NodeJS wrapper for PikPay payment gateway
Author: Armin Comic
Latest version: 0.0.3

# PikPay NodeJS Wrapper

![img](https://mss.ba/npm/banners/pikpay001.jpg)

Wrapper for PikPay payment gateway

### Prerequisites

You have to have access to test  [PikPay gateway](https://ipg.pikpay.ba/) .


## Getting Started

```

const pikpay = require("@mss.ba/pikpay-node");

const _AUTHENTICITY_TOKEN = process.env.AUTHENTICITY_TOKEN || "YOUR TOKEN FROM PIKPAY";
const _API_AUTH_KEY = process.env.API_AUTH_KEY || "YOUR API TOKEN FROM PIKPAY"";
const _API_ACTION_URL = process.env.API_ACTION_URL || "API URL FROM PIKPAY";



const transaction = {
    "ch-full-name" : "John Doe",
    "ch-address": "Elm Street 22",
    "ch-city" : "Mostar",
    "ch-zip": 22000,
    "ch-country": "Bosnia and Herzegovina",
    "ch-phone": "38761854123",
    "ch-email": "a@live.com",
    "pan": 4341000000000000,
    "cvv": 000,
    "expiration_date": "000",
    "order-info": "tandara-2222",
    "order-number": "test001",
    "amount": 54301,
    "currency": "BAM",
    "ip": "127.0.0.1",
    "language": "hr",
    "transaction-type": "purchase",
    "authenticity-token" : _AUTHENTICITY_TOKEN,
    "digest": pikpay.generateDigest({
        "api-auth-key": _API_AUTH_KEY,
        "order-number": "test001",
        "amount": 54301,
        "currency": "BAM"
    })
   }


void (async function(){ 

    const response = await pikpay.asyncCreateTransaction(transaction,_API_ACTION_URL);
    console.log(response);
})();


```
There are two response codes 

* code 1
* code 2

If you get Code2, that means that you need to activate 3D security for Visa credit cards

Create listener on your side fetch PaRes and MD and activate function

```
const finish3Dsecurity = await pikpay.asyncFinish3DTransaction(_API_PARES_URL, PaRes, MD);

	const statusInt = finish3Dsecurity.status ? 1 : 0;
    const { errors, data } = finish3Dsecurity;

    if (errors.length > 0) {
       console.log(errors.join());
    }


```

## Available functions

* generateDigest (Creating Digest which is required by PikPay)
* makeid(Simple number order generator),
* asyncCreateTransaction,
* asyncFinish3DTransaction

```
const digest = generateDigest({

   "api-auth-key": _API_AUTH_KEY,
    "order-number": "test001",
    "amount": 54301,
    "currency": "BAM"

});

console.log(digest);

```

### Prerequisites

Just install it

### Installing


Run command 

```
npm i @mss.ba/pikpay-node
```

## Running the tests

There are not test's at the moment

### Future vision for project

Standardized code style
Tests
Make better outputs
Remove doubled xml generators

## Built With packages

* Crypto
* Axios
* xml-js
* js2xmlparser

## Contributing

We love contributors, send us PR and we will make it come merged to our lovely wrapper

## Versioning

TBD but we are thinking to use use [SemVer](http://semver.org/) for versioning.

## Authors

* **Armin Comic** - *Initial work* - [MedoDome](https://github.com/MedoDome) - [MSS](https://www.mss.ba/)

See also the list of TBM

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
npm package: @mssd/errors
Description: A standardized error handling package for microservices. @mssd/errors provides middleware, error types, and utilities to manage and handle errors consistently across services in a microservices architecture.
Author: Hassan Attar
Latest version: 2.1.0

# @mssd/errors

**@mssd/errors** is a standardized error-handling package for microservices. It provides middleware, custom error types, and utilities that enable consistent and reliable error handling across services in a microservices architecture.

## Features

-   **Error Middleware**: Easily integrate error handling middleware in Express applications.
-   **Custom Error Types**: Utilize predefined error classes for common error scenarios, such as `NotFoundError`, `ValidationError`, `AuthenticationError`, etc.
-   **Error Utilities**: Helper functions to simplify error handling and improve consistency across different services.
-   **Standardized Responses**: Generate standardized error responses, making it easy to handle and interpret errors within and across microservices.

## Installation

Install **@mssd/errors** using npm:

```bash
npm install @mssd/errors
```
npm package: @mssmr/npm-demo-prj
Description: It's just a demo package to understand how npm rejestry works
Author: Oleg Sapunov
Latest version: 1.1.0

# Sample package: Created to understand how the npm rejestry works

Don't be fooled, it's just a demo, but with a functional part
If you need to sum up two numbers you're welcome to use sum func

## Installation

```bash
npm install @mssmr/npm-demo-prj
```

## Usage

```js
import { sum, multiply } from '@mssmr/npm-demo-prj'
console.log(sum(1, 2))
console.log(multiply(2, 2))
```
npm package: @mst-ds/mst-doubly-linked-list
Description: > TODO: description
Author: Yurchishin
Latest version: 1.0.0

## `mst-doubly-linked-list`

### Usage

```js
import { types } from "mobx-state-tree";
import { DoublyLinkedList, DoublyLinkedListNode } from '@mst-ds/mst-doubly-linked-list';

const Todo = types.model('Todo', {
    name: types.string,
    active: types.boolean,
})

const TodoNode = DoublyLinkedListNode('Todo', Todo);

const rootStore = types.model('RootStore', {
    todos: DoublyLinkedList('Todo', TodoNode),
}).create()

rootStore.todos.append('2', {
    name: 'name1',
    active: false,
}) // '2'
rootStore.todos.head // '2'
rootStore.todos.tail // '2'

rootStore.todos.prepend('1', {
    name: 'name2',
    active: true,
}) // '1,2'
rootStore.todos.head // '1'
rootStore.todos.tail // '2'

rootStore.todos.remove('1') // '1'
rootStore.todos.head // '2'
rootStore.todos.tail // '2'
```

### API

##### Props (DoublyLinkedList)
##### `.head`
##### `.tail`
##### `.nodes`

##### Props (DoublyLinkedListNode)
##### `.id`
##### `.value`
##### `.next`
##### `.previous`

##### Actions:
##### `.append(key, value)`
##### `.prepend(key, value)`
##### `.remove(key)`
##### `.fromArray([[key, value], ...])`
##### `.deleteHead()`
##### `.deleteHead()`
##### `.deleteTail()`
##### `.reverse()`

##### Views:
##### `.getNode(id)`
##### `.get(id)`
##### `.has(id)`
##### `.values`
##### `.entries`
##### `.array`
##### `.isEmpty`
##### `.toString(callback)`

##### Note: 
Library does not support `types.reference` types in node.
npm package: @mst-ds/mst-jest
Description: > TODO: description
Author: Yurchishin
Latest version: 1.0.0

## `mst-jest`

#### API

##### `createMSTSnapshot(node)` - created jest snapshot from model
##### `getEnvMock({...})` - mocked for `getEnv`'
##### `getRootMock({...})` - mocked for `getRoot`'
##### `onPatchesAggregation(node)` - aggregate all model patches, and take a jest snapshot'
##### `onSnapshotAggregation(node)` - aggregate all model snapshots, and take a jest snapshot'

#### Usage
```js
import { types } from "mobx-state-tree"
import { createMSTSnapshot, onPatchesAggregation, onSnapshotAggregation } from "@mst-ds/mst-jest"

describe('Tests', () => {
    it('snapshot test', () => {
        const rootStore = types.model({
            ...,
        })
        .actions(() => {...});

        createMSTSnapshot(list) // create jest snapshot
    });
it('snapshots test', () => {
        const rootStore = types.model({
            ...,
        })
        .actions(() => {...});

        const disposer = onPatchesAggregation(list)

        rootStore.action1();
        rootStore.action2();
        rootStore.action3();

        disposer() // create jest snapshot
    });
    it('patches test', () => {
        const rootStore = types.model({
            ...,
        })
        .actions(() => {...});

        const disposer = onSnapshotAggregation(list)

        rootStore.action1();
        rootStore.action2();
        rootStore.action3();

        disposer() // create jest snapshot
    });
});
```
npm package: @mst-ds/mst-linked-list
Description: > TODO: description
Author: Yurchishin
Latest version: 1.0.0

## `mst-linked-list`

### Usage

```js
import { types } from "mobx-state-tree";
import { LinkedList, LinkedListNode } from '@mst-ds/mst-linked-list';

const Todo = types.model('Todo', {
    name: types.string,
    active: types.boolean,
})

const TodoNode = LinkedListNode('Todo', Todo);

const rootStore = types.model('RootStore', {
    todos: LinkedList('Todo', TodoNode),
}).create()

rootStore.todos.append('2', {
    name: 'name1',
    active: false,
}) // '2'
rootStore.todos.head // '2'
rootStore.todos.tail // '2'

rootStore.todos.prepend('1', {
    name: 'name2',
    active: true,
}) // '1,2'
rootStore.todos.head // '1'
rootStore.todos.tail // '2'

rootStore.todos.remove('1') // '1'
rootStore.todos.head // '2'
rootStore.todos.tail // '2'
```

### API

##### Props (LinkedList)
##### `.head`
##### `.tail`
##### `.nodes`

##### Props (LinkedListNode)
##### `.id`
##### `.value`
##### `.next`

##### Views:
##### `.getNode(id)`
##### `.get(id)`
##### `.has(id)`
##### `.values`
##### `.entries`
##### `.array`
##### `.isEmpty`
##### `.toString(callback)`

##### Actions:
##### `.append(key, value)`
##### `.prepend(key, value)`
##### `.remove(key)`
##### `.fromArray([[key, value], ...])`
##### `.deleteHead()`
##### `.deleteHead()`
##### `.deleteTail()`
##### `.reverse()`

##### Note: 
Library does not support `types.reference` types in node.
npm package: @mst-ds/mst-queue
Description: > TODO: description
Author: Yurchishin
Latest version: 1.0.0

## `mst-queue`

### Usage

```js
import { types } from "mobx-state-tree";
import { Queue, QueueNode } from '@mst-ds/mst-queue';

const Todo = types.model('Todo', {
    name: types.string,
    active: types.boolean,
})

const TodoNode = QueueNode('Todo', Todo);

const rootStore = types.model('RootStore', {
    todos: Queue('Todo', TodoNode),
}).create()

rootStore.todos.enqueue('1', {
    name: 'name1',
    active: false,
}) // '1'
rootStore.todos.head // '1'
rootStore.todos.tail // '1'

rootStore.todos.enqueue('2', {
    name: 'name2',
    active: true,
}) // '1,2'
rootStore.todos.head // '1'
rootStore.todos.tail // '2'

rootStore.todos.dequeue() // '2'
rootStore.todos.head // '2'
```

### API

##### Props (LinkedList)
##### `.head`
##### `.tail`
##### `.nodes`

##### Props (LinkedListNode)
##### `.id`
##### `.value`
##### `.next`

##### Views:
##### `.getNode(id)`
##### `.get(id)`
##### `.has(id)`
##### `.values`
##### `.entries`
##### `.array`
##### `.isEmpty`
##### `.peek`
##### `.peekNode`
##### `.peekPair`
##### `.toString(callback)`

##### Actions:
##### `.enqueue(key, value)`
##### `.dequeue()`

##### Note: 
Library does not support `types.reference` types in node.
npm package: @mst-ds/mst-stack
Description: > TODO: description
Author: Yurchishin
Latest version: 1.0.0

## `mst-stack`

### Usage

```js
import { types } from "mobx-state-tree";
import { Stack, StackNode } from '@mst-ds/mst-stack';

const Todo = types.model('Todo', {
    name: types.string,
    active: types.boolean,
})

const TodoNode = StackNode('Todo', Todo);

const rootStore = types.model('RootStore', {
    todos: Stack('Todo', TodoNode),
}).create()

rootStore.todos.push('2', {
    name: 'name1',
    active: false,
}) // '2'
rootStore.todos.head // '2'

rootStore.todos.push('1', {
    name: 'name2',
    active: true,
}) // '1,2'
rootStore.todos.head // '1'

rootStore.todos.pop() // '2'
rootStore.todos.head // '2'
```

### API

##### Props (LinkedList)
##### `.head`
##### `.nodes`

##### Props (LinkedListNode)
##### `.id`
##### `.value`
##### `.next`

##### Views:
##### `.getNode(id)`
##### `.get(id)`
##### `.has(id)`
##### `.values`
##### `.entries`
##### `.array`
##### `.isEmpty`
##### `.peek`
##### `.peekNode`
##### `.peekPair`
##### `.toString(callback)`

##### Actions:
##### `.push(key, value)`
##### `.pop()`

##### Note: 
Library does not support `types.reference` types in node.