open-index/open-npm huggingface dataset:
npm package: @hacksore/discord-rpc
Description: A simple RPC client for Discord
Author: snek
Latest version: 5.0.0-beta2

<div align="center">
  <br />
  <p>
    <a href="https://discord.gg/bRCvFy9"><img src="https://discordapp.com/api/guilds/222078108977594368/embed.png" alt="Discord server" /></a>
    <a href="https://www.npmjs.com/package/discord-rpc"><img src="https://img.shields.io/npm/v/discord-rpc.svg?maxAge=3600" alt="NPM version" /></a>
    <a href="https://www.npmjs.com/package/discord-rpc"><img src="https://img.shields.io/npm/dt/discord-rpc.svg?maxAge=3600" alt="NPM downloads" /></a>
    <a href="https://david-dm.org/discordjs/RPC"><img src="https://img.shields.io/david/discordjs/RPC.svg?maxAge=3600" alt="Dependencies" /></a>
  </p>
  <p>
    <a href="https://nodei.co/npm/discord-rpc/"><img src="https://nodei.co/npm/discord-rpc.png?downloads=true&stars=true" alt="NPM info" /></a>
  </p>
</div>

# Discord.js RPC Extension

### [Documentation](https://discord.js.org/#/docs/rpc/)

### [Rich Presence Example](https://github.com/discordjs/RPC/blob/master/example)

### __Browser__ Example

```javascript
const clientId = '287406016902594560';
const scopes = ['rpc', 'rpc.api', 'messages.read'];

const client = new RPC.Client({ transport: 'websocket' });

client.on('ready', () => {
  console.log('Logged in as', client.application.name);
  console.log('Authed for user', client.user.username);

  client.selectVoiceChannel('81384788862181376');
});

// Log in to RPC with client id
client.login({ clientId, scopes });
```
npm package: @hacksore/rtcmulticonnection
Description: RTCMultiConnection is a WebRTC JavaScript wrapper library runs top over RTCPeerConnection API to support all possible peer-to-peer features.
Author: Muaz Khan
Latest version: 4.0.0-alpha1

![](https://i.imgur.com/MFfRBSM.png)

# RTCMultiConnection - WebRTC JavaScript Library

[![npm](https://img.shields.io/npm/v/rtcmulticonnection.svg)](https://npmjs.org/package/rtcmulticonnection) [![downloads](https://img.shields.io/npm/dm/rtcmulticonnection.svg)](https://npmjs.org/package/rtcmulticonnection) [![Build Status: Linux](https://travis-ci.org/muaz-khan/RTCMultiConnection.png?branch=master)](https://travis-ci.org/muaz-khan/RTCMultiConnection)

> RTCMultiConnection is a WebRTC JavaScript library for peer-to-peer applications (screen sharing, audio/video conferencing, file sharing, media streaming etc.)

## Socket.io Signaling Server

Signaling server has a separate repository:

* https://github.com/muaz-khan/RTCMultiConnection-Server

## Demos

* https://rtcmulticonnection.herokuapp.com/

## Getting Started Without Any Installation

* https://www.rtcmulticonnection.org/docs/getting-started/

## YouTube Channel

* https://www.youtube.com/playlist?list=PLPRQUXAnRydKdyun-vjKPMrySoow2N4tl

## Install On Your Own Website

* https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/installation-guide.md

```sh
mkdir demo && cd demo

# install from NPM
npm install rtcmulticonnection

# or clone from github
git clone https://github.com/muaz-khan/RTCMultiConnection.git ./

# install all required packages
# you can optionally include --save-dev
npm install

node server --port=9001
```

## Integrate Inside Any Nodejs Application

* https://github.com/muaz-khan/RTCMultiConnection-Server/wiki/Integrate-inside-nodejs-applications

## `Config.json` Explained

* https://github.com/muaz-khan/RTCMultiConnection-Server/wiki/config.json

## How to Enable HTTPs?

* https://github.com/muaz-khan/RTCMultiConnection-Server/wiki/How-to-Enable-HTTPs

## Want to Contribute?

RTCMultiConnection is using `Grunt` to compile javascript into `dist` directory:

* https://github.com/muaz-khan/RTCMultiConnection/blob/master/CONTRIBUTING.md

## Wiki Pages

1. https://github.com/muaz-khan/RTCMultiConnection/wiki
2. https://github.com/muaz-khan/RTCMultiConnection-Server/wiki

## License

[RTCMultiConnection](https://github.com/muaz-khan/RTCMultiConnection) is released under [MIT licence](https://github.com/muaz-khan/RTCMultiConnection/blob/master/LICENSE.md) . Copyright (c) [Muaz Khan](https://MuazKhan.com/).
npm package: @hackstrap/blink-npm
Description: This repo contains the code for blink npm pakage
Author: AbhijeetNandvikar
Latest version: 3.1.1

# blink-npm

> This repo contains the code for blink npm pakage

[![NPM](https://img.shields.io/npm/v/@hackstrap/blink-npm)](https://www.npmjs.com/package/@hackstrap/blink-npm)

<br/>
<br/>

## Install

```bash
npm install --save @hackstrap/blink-npm
```

<br/>

#### For usage in Next.js application execute following command

```bash
npm install next-remove-imports
```

This will remove all .less/.css/.scss/.sass/.styl imports from all packages in node_modules.

```javascript
// add this piece of code in next.config.js file
const removeImports = require('next-remove-imports')({
  options: {}
})
module.exports = removeImports()
```

<br/>

```bash
npm i @material-ui/core@4.11.4
npm i @material-ui/icons@4.11.2
```

<br/>
<br/>

## Usage

```tsx
import React, { Component } from 'react'

import { BlinkApp } from 'blink-npm'
// Importing CSS files
import 'blink-npm/dist/index.css'
import 'react-date-range/dist/styles.css' // base css file from react-date-range
import 'react-date-range/dist/theme/default.css' // theme css file from react-date-range
// CSS files for @uiw/react-md-editor
import '@uiw/react-md-editor/dist/markdown-editor.css'
import '@uiw/react-markdown-preview/dist/markdown.css'

class Example extends Component {
  render() {
    return (
      <BlinkApp
        userInfo={{ Header: 'startup_name', accessor: 'startup_id' }}
        screen={'startupScreen'}
        view={'homeView'}
        page={'metrics'}
        apiRoute={'https://demo-organization.com/'}
        token={'token_value'}
      />
    )
  }
}
```

### Props which user can pass in BlinkApp

1. All the props passed here are stored in a global Object with the help of context API and can be accessed anywhere in the app.
2. **screen**,**view**,**page** props are used for in app navigation. Pass the correct values to load the required page.
3. Pass name and id of startup/investor in the format shown above in **userInfo** props.

## Overall Structure of BlinkApp

Pass following values to **screen**,**view**,**page** props to load required pages accordingly

### Screen => startupScreen:

- #### View => home
  - page => metrics
  - page => notes
- #### View => tables
  - page => revenue
  - page => expenses
  - page => employee
  - page => notes
- #### View => settings
  - page => profile

### Screen => investorScreen

- #### View => dashboard
  - page => metrics
  - page => notes
- #### View => settings
  - page => profile

## License

MIT © [AbhijeetNandvikar](https://github.com/AbhijeetNandvikar)
npm package: @hackthevalley/sdk
Description: Hack the Valley JavaScript SDK
Author: Jun Zheng
Latest version: 1.3.3

# Hack the Valley JavaScript SDK

Interested in building with Hack the Valley API? Download our JS SDK to get started!

```bash
$ npm install @hackthevalley/sdk --save
```

Once you have installed the SDK, import it by simply typing:

```js
import htv from '@hackthevalley/sdk';
```

You can find the API reference here: https://hackthevalley.github.io/js_sdk/.

## Contributing

Feel free to contribute to this repository, there isn't really any style guidelines, once you read through the codebase everything should be very self-explanatory.

Note that we use Flow to do static type checking, you can manually run `npm test` to check types. There is also a pre-commit hook where we automatically checks the typing for you.

## Deployment

To deploy a new version of the documentation, run

```
$ npm run deploy-doc
```

To deploy a new version to NPM, run

```
$ npm run deploy:(patch|minor|major)
```
npm package: @hacktoberfest/br
Description: Hacktoberfest Brasil - Call to Action
Author: Guilherme Siquinelli
Latest version: 1.0.0

# hacktoberfest-br

This library was generated with [Nx](https://nx.dev).

## Running unit tests

Run `nx test hacktoberfest-br` to execute the unit tests via [Jest](https://jestjs.io).
npm package: @hackwaly/babel-plugin-react-wrapped-display-name
Description: A Babel 7 plugin which transforms add display name to React functional component
Author: Andrew Laiff
Latest version: 1.0.1

# babel-plugin-react-wrapped-display-name

> 

[![npm version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![codecov][codecov-image]][codecov-url]

Solve problem with unnamed component, which created with arrow function.

## Example

### In

```jsx harmony

export const FancyComponentName = memo(
  ({ name }) => <div>{name}</div>);

```

### Out

```jsx harmony
export const FancyComponentName = memo(
  ({ name }) => <div>{name}</div>);

FancyComponentName.displayName = "Memo(FancyComponentName)";
```

## Installation

```sh
npm install @babel/core babel-plugin-react-wrapped-display-name
```

## Usage

### Via `babel.config.js` (Recommended)

```js
module.exports = (api) => ({
  plugins: [
    'babel-plugin-react-wrapped-display-name',
  ],
});
```

### Via CLI

```sh
babel --plugins babel-plugin-react-wrapped-display-name
```

### Via Node API

```js
require('@babel/core').transform(code, {
  plugins: [
    'babel-plugin-react-wrapped-display-name',
  ],
});
```

## Options

[codecov-image]: https://codecov.io/gh/laiff/babel-plugin-react-wrapped-display-name/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/laiff/babel-plugin-react-wrapped-display-name
[npm-image]: https://img.shields.io/npm/v/babel-plugin-react-wrapped-display-name.svg
[npm-url]: https://www.npmjs.com/package/babel-plugin-react-wrapped-display-name
[travis-image]: https://img.shields.io/travis/laiff/babel-plugin-react-wrapped-display-name.svg
[travis-url]: https://travis-ci.org/laiff/babel-plugin-react-wrapped-display-name
npm package: @hackwithharsha/hightail
Description: Add tailwind height utility classes
Author: hackwithharsha@gmail.com, satishpokala124@gmail.com
Latest version: 1.0.3

# highTail

- `highTail` plugin provides additional tailwind height utility classes from `h-1/7` to `h-1/14`

<div>
    <img src="./assets/cover.png" width="100%" height="250px" alt="cover-page" />
</div>

## Installation

```bash
>>> npm i @hackwithharsha/hightail
```

## Configuration

- In `tailwind.config.js` add `hightail` plugin to plugins section like following.

```js
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [
    require('@hackwithharsha/hightail'),
  ],
}
```

## Usage

```html
<div class="h-full">
    <div class="h-1/10"></div>
    <div class="h-2/10"></div>
    <div class="h-3/10"></div>
    <div class="h-4/10"></div>
</div>
```

## Contributors

- [Hack With Harsha](https://github.com/hackwithharsha)
- [Satish Pokala](https://github.com/Satishpokala124)
npm package: @hackycy/egg-bull
Description: bull plugin for EggJs
Author: hackycy
Latest version: 0.0.6

# egg-bull

[![NPM version][npm-image]][npm-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/@hackycy/egg-bull.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@hackycy/egg-bull
[download-image]: https://img.shields.io/npm/dm/@hackycy/egg-bull.svg?style=flat-square
[download-url]: https://npmjs.org/package/@hackycy/egg-bull

[bull](https://github.com/OptimalBits/bull) plugin for Egg.js.

## 安装

```bash
$ npm install -S @hackycy/egg-bull bull
$ npm install --save-dev @types/bull
```

> 插件内并无直接依赖bull，需要自己安装

## 使用

### 插件启用

``` ts
// {app_root}/config/plugin.ts
const plugin: EggPlugin = {
  bull: {
    enable: true,
    package: '@hackycy/egg-bull',
  },
}
```

### 定义Queue

在`app`目录新建`queue`目录，所有的`Queue`都要在该文件夹下定义，注意返回的类型一定要为bull实例，否则使用该插件无意义。这里只是约定。

``` ts
// app/queue/task.ts
import * as Queue from 'bull';
import { Application } from 'egg';

export default (app: Application) => {
  app.logger.info('queue');
  const q = new Queue('testqueue', {
    redis: {
      port: 6379,
      host: '127.0.0.1',
      password: '123456',
      db: 0,
    },
  });
  q.process(function(job, done) {
    app.logger.info('[queue]', job.data);
    done();
  });
  return q;
};
```

> 可以以文件夹分隔。
>
> 建议export导出为一个funtion，这样会注入一个Egg的Application实例。
>
> 如无需使用Application实例的可以直接导出定义的bull实例。
>
> 该插件辅助定义了`egg-ts-helper`，可以在TS项目中方便使用。

### 获取Queue

已经将所有定义的Queue挂载到了Application上，例如获取上述定义的

``` typescript
this.app.queue.task.add({ b: 'a' }); //具体使用与bull无差异
```

## 有问题或Bug

请提出[issues](https://github.com/hackycy/egg-bull/issues)

## License

[MIT](LICENSE)
npm package: @hackycy/egg-class-validator
Description: class-validator plugin for Egg.js
Author: hackycy
Latest version: 0.1.1

# egg-class-validator

[![NPM version][npm-image]][npm-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/@hackycy/egg-class-validator.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@hackycy/egg-class-validator
[download-image]: https://img.shields.io/npm/dm/@hackycy/egg-class-validator.svg?style=flat-square
[download-url]: https://npmjs.org/package/@hackycy/egg-class-validator

<!--
Description here.
-->

基于 [class-validator](https://github.com/typestack/class-validator) 提供数据校验方法。

## 开启插件

```js
// config/plugin.js
exports.classValidator = {
  enable: true,
  package: '@hackycy/egg-class-validator',
};
```

## 定义验证类

``` typescript
import { Expose } from 'class-transformer';
import {
    Contains,
    IsInt,
    Length,
    IsEmail,
    IsFQDN,
    IsDate,
    Min,
    Max,
  } from 'class-validator';

export class Post {
    @Expose()
    @Length(10, 20)
    title: string;

    @Expose()
    @Contains('hello')
    text: string;

    @Expose()
    @IsInt()
    @Min(0)
    @Max(10)
    rating: number;

    @Expose()
    @IsEmail()
    email: string;

    @Expose()
    @IsFQDN()
    site: string;

    @Expose()
    @IsDate()
    createDate: Date;
  }
```

## 验证

``` typescript
import { Controller } from 'egg';
import { Id } from '../dto/id';
import { Post } from '../dto/post';

export default class HomeController extends Controller {
  public async index() {
    const { ctx } = this;
    ctx.body = await ctx.service.test.sayHi('egg');
  }

  public async test() {
    const { ctx } = this;
    // 默认验证body
    // 验证无误会获得具体的类型
    // 否则会抛出异常
    const p = await ctx.validate<Post>(Post);
    ctx.body = 'success';
  }

  public async testg() {
    const { ctx } = this;
    await ctx.validate(Id, ctx.request.query);
    ctx.body = 'success';
  }
}
```

> `ctx.validate`会将传入的校验数据对象转换成`Type`指定的类型的，指定范型可以更友好的使用类型。
>
> 已经在Application对象上挂载了validator属性，即`class-validator`的Validator。
>
> 更多操作可以查看官方的[文档](https://github.com/typestack/class-validator)

转换对象使用了[class-transformer](https://github.com/typestack/class-transformer)，可以在config中配置

``` typescript
import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';

export default (appInfo: EggAppInfo) => {
  const config = {} as PowerPartial<EggAppConfig>;

  // 配置 class-transformer options
  config.classValidator = {
    classTransformOptions: {
      excludeExtraneousValues: false
    }，
    // 自定义错误处理
    handleError: (ctx, _errors) => {
      // 做你想做的事情，第一个参数为Context，第二个参数为ValidationError[]
      ctx.throw(400, '参数异常');
    }
  }

  // the return config will combines to EggAppConfig
  return {
    ...config,
    ...bizConfig,
  };
};
```

# 有问题或Bug

请提出[issues](https://github.com/hackycy/egg-class-validator/issues)

# License

[MIT](LICENSE)
npm package: @hackycy/jsbridge
Description: jsbridge for android / ios
Author: hackycy
Latest version: 0.1.1

### JSBridge

[![NPM version][npm-image]][npm-url]
[![npm download][download-image]][download-url]

[npm-image]: https://img.shields.io/npm/v/@hackycy/jsbridge.svg?style=flat-square
[npm-url]: https://npmjs.org/package/@hackycy/jsbridge
[download-image]: https://img.shields.io/npm/dm/@hackycy/jsbridge.svg?style=flat-square
[download-url]: https://npmjs.org/package/@hackycy/jsbridge

**JSBridge For Android / iOS，统一易用的Javascript bridge。**

**需配合[SuperAgentWeb-Android](https://github.com/hackycy/SuperAgentWeb-Android)及[SuperAgentWeb-iOS](https://github.com/hackycy/SuperAgentWeb-iOS)使用**

### 安装

**npm**

``` javascript
$ npm i --save @hackycy/jsbridge
```

**cdn**

``` html
<!-- production -->
<script src="https://unpkg.com/@hackycy/jsbridge@${version}/dist/jsbridge.min.js"></script>
```

> 将`${version}`改为可用版本号

### 使用

#### 异步调用Native

``` javascript
/**
* 第一个参数为函数名称，第二个参数为需要传递的参数，必须为Object对象类型，第三个参数为回调
*/
window.JSBridge.invoke('log', null, callback);

// 会将原生端返回的参数在该回调中参数传入
function callback(obj) {
  alert(obj);
}
```

#### 同步调用Native

``` javascript
/**
* 第一个参数为函数名称，第二个参数为需要传递的参数，必须为Object对象类型
*/
var result = window.JSBridge.invokeSync('log', null);
alert(typeof result);
```

### License

[MIT](LICENSE)
npm package: @hacss/cli
Description: Hacss Command-Line Interface
Author: Nick Saunders
Latest version: 4.1.0

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Command-Line Interface
</p>

<p align="center">
  <a href="https://github.com/hacss/cli/actions?query=workflow%3ABuild"><img src="https://github.com/hacss/cli/workflows/Build/badge.svg"></a>
  <a href="https://www.npmjs.com/package/@hacss/cli"><img src="https://img.shields.io/npm/v/@hacss/cli.svg" alt="Latest Release"></a>
  <a href="https://github.com/hacss/cli/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/cli.svg" alt="License"></a>
</p>
npm package: @hacss/compose-plugins
Description: Combine multiple plugins into a single plugin.
Author: Nick Saunders
Latest version: 1.1.1
Deprecated: Hacss plugins are deprecated.

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Compose Plugins
</p>

<p align="center">
    <a href="https://travis-ci.org/hacss/hacss"><img src="https://img.shields.io/travis/hacss/compose-plugins/master.svg" alt="Build Status"></a>
    <a href="https://github.com/hacss/hacss/releases"><img src="https://img.shields.io/npm/v/@hacss/compose-plugins.svg" alt="Latest Release"></a>
    <a href="https://github.com/hacss/hacss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/compose-plugins.svg" alt="License"></a>
</p>

This can be used to create a plugin on the basis of other plugins.
npm package: @hacss/core
Description: The core Hacss library
Author: Nick Saunders
Latest version: 5.0.3

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Style like you mean it.
</p>

<p align="center">
  <a href="https://github.com/hacss/core/actions?query=workflow%3ABuild"><img src="https://github.com/hacss/core/workflows/Build/badge.svg"></a>
  <a href="https://www.npmjs.com/package/@hacss/core"><img src="https://img.shields.io/npm/v/@hacss/core.svg" alt="Latest Release"></a>
  <a href="https://github.com/hacss/core/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/core.svg" alt="License"></a>
</p>

## Resources

* Guides, Getting Started, and more: [hacss.io](https://hacss.io)
* Try Hacss in your browser: [Basement Hacss](https://basement.hacss.io)
npm package: @hacss/plugin-copy
Description: Copy the value of one property to another.
Author: Nick Saunders
Latest version: 1.2.0
Deprecated: Hacss plugins are deprecated.

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Copy Plugin
</p>

<p align="center">
    <a href="https://travis-ci.org/hacss/hacss"><img src="https://img.shields.io/travis/hacss/plugin-copy/master.svg" alt="Build Status"></a>
    <a href="https://github.com/hacss/hacss/releases"><img src="https://img.shields.io/npm/v/@hacss/plugin-copy.svg" alt="Latest Release"></a>
    <a href="https://github.com/hacss/hacss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/plugin-copy.svg" alt="License"></a>
</p>
npm package: @hacss/plugin-delete
Description: Deletes declarations by property name.
Author: Nick Saunders
Latest version: 1.2.0
Deprecated: Hacss plugins are deprecated.

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Delete Plugin
</p>

<p align="center">
    <a href="https://travis-ci.org/hacss/hacss"><img src="https://img.shields.io/travis/hacss/plugin-delete/master.svg" alt="Build Status"></a>
    <a href="https://github.com/hacss/hacss/releases"><img src="https://img.shields.io/npm/v/@hacss/plugin-delete.svg" alt="Latest Release"></a>
    <a href="https://github.com/hacss/hacss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/plugin-delete.svg" alt="License"></a>
</p>
npm package: @hacss/plugin-expand
Description: Create simple shorthand properties that expand one declaration into multiple.
Author: Nick Saunders
Latest version: 1.2.0
Deprecated: Hacss plugins are deprecated.

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Expand Plugin
</p>

<p align="center">
    <a href="https://travis-ci.org/hacss/hacss"><img src="https://img.shields.io/travis/hacss/plugin-expand/master.svg" alt="Build Status"></a>
    <a href="https://github.com/hacss/hacss/releases"><img src="https://img.shields.io/npm/v/@hacss/plugin-expand.svg" alt="Latest Release"></a>
    <a href="https://github.com/hacss/hacss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/plugin-expand.svg" alt="License"></a>
</p>
npm package: @hacss/plugin-variables
Description: Adds variables to Hacss.
Author: Nick Saunders
Latest version: 1.4.0
Deprecated: Hacss plugins are deprecated.

<p align="center">
  <a href="https://hacss.io" target="_blank"><img width="256" src="https://raw.githubusercontent.com/hacss/assets/master/logos/hacss-black.svg"></a><br>
  Variables Plugin
</p>

<p align="center">
    <a href="https://travis-ci.org/hacss/hacss"><img src="https://img.shields.io/travis/hacss/plugin-variables/master.svg" alt="Build Status"></a>
    <a href="https://github.com/hacss/hacss/releases"><img src="https://img.shields.io/npm/v/@hacss/plugin-variables.svg" alt="Latest Release"></a>
    <a href="https://github.com/hacss/hacss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/@hacss/plugin-variables.svg" alt="License"></a>
</p>
npm package: @hacxy/bump
Description: Version release tools.
Author: hacxy
Latest version: 0.3.2

# @hacxy/bump

A CLI tool for automating version bumping, changelog generation, and package publishing.

## Features

- 🚀 **Interactive Version Bumping**: Select from patch, minor, major, beta, alpha, or custom version
- 📝 **Automatic Changelog Generation**: Generate changelog using conventional-changelog
- 🔨 **Build Support**: Optional build step before release
- 🏷️ **Git Integration**: Automatically commit, tag, and push changes
- 📦 **NPM Publishing**: Publish to npm with support for `latest` and `next` tags
- 🔄 **Error Recovery**: Automatic rollback on errors

## Requirements

- Node.js `^18.0.0 || >=20.0.0`
- Git (optional, for git operations)
- npm (for publishing)

## Install

```bash
npm install -g @hacxy/bump
```

Or use with `npx`:

```bash
npx @hacxy/bump
```

## Usage

Run the command in your project directory:

```bash
bump
```

The tool will guide you through an interactive process:

1. **Select release type**: Choose from patch, minor, major, beta, alpha, or enter a custom version
2. **Select tag type**: Choose `latest` or `next` for npm publishing
3. **Confirm release**: Review and confirm the release version
4. **Build (optional)**: Choose whether to run the build command from `package.json`
5. **Generate changelog (optional)**: Automatically generate `CHANGELOG.md` using conventional commits
6. **Git operations (optional)**: Commit changes, create git tag, and push to remote
7. **Publish to npm (optional)**: Publish the package to npm registry

## Workflow

The tool follows this workflow:

1. Updates `package.json` version
2. Optionally runs `npm run build`
3. Optionally generates `CHANGELOG.md`
4. Optionally commits changes with message: `chore: release: v{version}`
5. Optionally creates git tag: `v{version}`
6. Optionally pushes commits and tags to remote
7. Optionally publishes to npm with selected tag

## License

[MIT](./LICENSE)

## Author

**hacxy**

- Email: hacxy.js@outlook.com
- Website: https://hacxy.cn
npm package: @hacxy/changelogithub
Description: Generate changelog for GitHub.
Author: hacxy
Latest version: 0.0.3

# changelogithub

[![NPM version](https://img.shields.io/npm/v/changelogithub?color=a1b858&label=)](https://www.npmjs.com/package/changelogithub)

Generate changelog for GitHub releases from [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), powered by [changelogen](https://github.com/unjs/changelogen).

[👉 Changelog example](https://github.com/unocss/unocss/releases/tag/v0.39.0)

## Features

- Support exclamation mark as breaking change, e.g. `chore!: drop node v10`
- Grouped scope in changelog
- Create the release note, or update the existing one
- List contributors

## Usage

In GitHub Actions:

```yml
# .github/workflows/release.yml

name: Release

permissions:
  contents: write

on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Set node
        uses: actions/setup-node@v4
        with:
          registry-url: https://registry.npmjs.org/
          node-version: lts/*

      - run: npx changelogithub # or changelogithub@0.12 if ensure the stable result
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
```

It will be trigged whenever you push a tag to GitHub that starts with `v`.

## Configuration

You can put a configuration file in the project root, named as `changelogithub.config.{json,ts,js,mjs,cjs}`, `.changelogithubrc` or use the `changelogithub` field in `package.json`.

## Preview Locally

```bash
npx changelogithub --dry
```

## Why?

I used to use [`conventional-github-releaser`](https://github.com/conventional-changelog/releaser-tools/tree/master/packages/conventional-github-releaser) for almost all my projects. Until I found that it [does NOT support using exclamation marks for breaking changes](https://github.com/conventional-changelog/conventional-changelog/issues/648) - hiding those important breaking changes in the changelog without the awareness from maintainers.

## License

[MIT](./LICENSE) License © 2022 [Anthony Fu](https://github.com/antfu)
npm package: @hacxy/create-fe
Description: 一个简化的前端项目创建工具，提供快速创建现代化前端项目的功能。
Author: Hacxy
Latest version: 0.6.1

# @hacxy/create-fe

一个简化的前端项目创建工具，提供快速创建现代化前端项目的功能。

## 特性

- 🚀 **一键创建项目** - 无需复杂配置，快速启动
- 📦 **多种模板支持** - 提供多种预设项目模板
- 🛠️ **现代化工具链** - 自动配置 TypeScript、ESLint 等工具
- 🔧 **自动化设置** - 自动配置 Git hooks 和代码检查
- 📝 **交互式体验** - 友好的命令行交互界面

## 安装

```bash
npm install -g @hacxy/create-fe
```

或者使用 pnpm：

```bash
pnpm add -g @hacxy/create-fe
```

## 使用方法

### 创建新项目

```bash
create-fe
```

或者直接使用 npx（推荐）：

```bash
npx @hacxy/create-fe
```

### 交互式创建

运行命令后，工具会引导你完成以下步骤：

1. **选择模板** - 从可用的项目模板中选择
2. **输入项目名称** - 指定新项目的名称
3. **自动创建** - 工具会自动创建项目并配置所有必要的文件

## 可用模板

### CLI 应用模板

- **cli-ink** - 基于 [Ink](https://github.com/vadimdemedes/ink) 的 CLI 应用
  - React 组件化开发
  - 热重载支持
  - TypeScript 支持
  - 现代化构建工具

- **cli-tsdown** - 基于 [tsdown](https://github.com/hacxy/tsdown) 的 CLI 应用
  - 快速构建
  - 零配置
  - TypeScript 支持
  - 现代化输出

- **cli-unbuild** - 基于 [unbuild](https://github.com/unjs/unbuild) 的 CLI 应用
  - 统一的构建配置
  - 多格式输出
  - 类型生成
  - 现代化工具链

### 库模板

- **library-tsdown** - 基于 tsdown 的 TypeScript 库
  - 库开发优化
  - 类型声明生成
  - 现代化打包
  - 完整的开发工具链

## 项目结构

创建的项目会自动包含以下配置：

### 自动配置的功能

- **Git Hooks** - 配置 pre-commit 和 commit-msg hooks
- **代码检查** - 集成 ESLint 和 lint-staged
- **TypeScript** - 完整的 TypeScript 支持
- **构建工具** - 根据模板选择合适的构建工具
- **开发脚本** - 提供 dev、build、lint 等常用脚本

### 示例项目结构

```
my-project/
├── src/
│   └── index.ts
├── package.json
├── tsconfig.json
├── eslint.config.mjs
├── .gitignore
└── README.md
```

## 开发

```bash
# 安装依赖
pnpm install

# 开发模式
pnpm dev

# 构建
pnpm build

# 代码检查
pnpm lint

# 发布
pnpm release
```

## 相关

- **create-fe** - 简化的项目创建工具，专注于快速创建项目
- **@hacxy/fe** - 完整的脚手架工具，包含项目创建和提交信息检查等功能
npm package: @hacxy/eslint-config
Description: Hacxy eslint config
Author: hacxy
Latest version: 0.5.5

# @hacxy/eslint-config

[![code style](https://antfu.me/badge-code-style.svg)](https://github.com/antfu/eslint-config)

基于 [@antfu/eslint-config](https://github.com/antfu/eslint-config) 的 eslint 配置预设, 所有预设都遵循我的个人喜好: [rules](https://github.com/hacxy/eslint-config/tree/main/src/rules).

## License

[MIT](./LICENSE) License &copy; 2023-PRESENT [Hacxy](https://github.com/hacxy)
npm package: @hacxy/fe
Description: 一个现代化的前端项目脚手架工具，提供快速创建和管理前端项目的功能。
Author: Hacxy
Latest version: 0.6.1

# @hacxy/fe

一个现代化的前端项目脚手架工具，提供快速创建和管理前端项目的功能。

## 特性

- 🚀 **快速创建项目** - 支持多种项目模板
- 📝 **提交信息检查** - 自动验证 Git 提交信息格式
- 🛠️ **现代化工具链** - 集成 ESLint、TypeScript 等工具
- 📦 **模板系统** - 提供多种预设模板
- 🔧 **自动化配置** - 自动配置 Git hooks 和代码检查

## 安装

```bash
npm install -g @hacxy/fe
```

或者使用 pnpm：

```bash
pnpm add -g @hacxy/fe
```

## 使用方法

### 创建新项目

```bash
fe new [项目名称]
```

或者使用特定模板：

```bash
fe new [项目名称] --template [模板名称]
```

#### 可用模板

- `cli-ink` - 基于 Ink 的 CLI 应用模板
- `cli-tsdown` - 基于 tsdown 的 CLI 应用模板
- `cli-unbuild` - 基于 unbuild 的 CLI 应用模板
- `library-tsdown` - 基于 tsdown 的库模板

### 检查提交信息

```bash
fe msg
```

验证 Git 提交信息是否符合约定式提交规范。

## 命令详解

### `fe new`

创建新的前端项目。

**选项：**

- `-t, --template <template>` - 指定要使用的模板

**示例：**

```bash
# 交互式创建项目
fe new my-project

# 使用特定模板创建项目
fe new my-project --template cli-ink
```

### `fe msg`

检查 Git 提交信息格式。

**说明：**

- 验证提交信息是否符合约定式提交规范
- 支持的类型：feat、fix、docs、style、refactor、perf、test、build、ci、chore、revert、types
- 格式要求：`type(scope): description`

**示例：**

```bash
# 在 Git hooks 中自动调用
git commit -m "feat: add new feature"
```

## 模板说明

### cli-ink

基于 [Ink](https://github.com/vadimdemedes/ink) 的 CLI 应用模板，支持 React 组件化开发命令行界面。

**特性：**

- React 组件化开发
- 热重载支持
- TypeScript 支持
- 现代化构建工具

### cli-tsdown

基于 [tsdown](https://github.com/hacxy/tsdown) 的 CLI 应用模板，轻量级 TypeScript 构建工具。

**特性：**

- 快速构建
- 零配置
- TypeScript 支持
- 现代化输出

### cli-unbuild

基于 [unbuild](https://github.com/unjs/unbuild) 的 CLI 应用模板，统一的构建工具。

**特性：**

- 统一的构建配置
- 多格式输出
- 类型生成
- 现代化工具链

### library-tsdown

基于 tsdown 的库模板，适用于开发 TypeScript 库。

**特性：**

- 库开发优化
- 类型声明生成
- 现代化打包
- 完整的开发工具链

## 项目结构

创建的项目会自动配置以下功能：

- **Git Hooks** - 自动配置 pre-commit 和 commit-msg hooks
- **代码检查** - 集成 ESLint 和 lint-staged
- **TypeScript** - 完整的 TypeScript 支持
- **构建工具** - 根据模板选择合适的构建工具

## 开发

```bash
# 安装依赖
pnpm install

# 开发模式
pnpm dev

# 构建
pnpm build

# 代码检查
pnpm lint

# 发布
pnpm release
```
npm package: @hacxy/utils
Description: [![test](https://github.com/hacxy/utils/workflows/Test/badge.svg?color=8187ff&labelColor=1b1b1f)](https://github.com/hacxy/utils/actions) [![npm](https://img.shields.io/npm/v/@hacxy/utils?color=FFB6C1&labelColor=1b1b1f&label=npm)](https://www.npmjs.com/pa
Author: hacxy
Latest version: 0.6.0

# Utils

[![test](https://github.com/hacxy/utils/workflows/Test/badge.svg?color=8187ff&labelColor=1b1b1f)](https://github.com/hacxy/utils/actions)
[![npm](https://img.shields.io/npm/v/@hacxy/utils?color=FFB6C1&labelColor=1b1b1f&label=npm)](https://www.npmjs.com/package/@hacxy/utils)

无平台限制的 JavaScript 工具库

[查阅文档](https://utils.hacxy.cn)

## 安装

```sh
npm install @hacxy/utils
```

## 使用

```ts
import { arrayIncludes } from '@hacxy/utils';

const arr = [1, 2, 3];
arrayIncludes(arr, 1); // => true;
```

## License

[MIT](./LICENSE) License &copy; 2024-PRESENT [Hacxy](https://github.com/hacxy)
npm package: @hadaydemo/agou-component
Description: intro component
Latest version: 1.0.1

# demo component

@ice/agou-component

intro component

## API

| 参数名 | 说明 | 必填 | 类型 | 默认值 | 备注 |
| ------ | ---- | ---- | ---- | ------ | ---- |
|        |      |      |      |        |      |
npm package: @hadeeb/card
Description: A personal card for Hadeeb Farhan (@hadeeb)
Author: Hadeeb Farhan
Latest version: 1.0.0

# Usage

Via npx:

```
npx @hadeeb/card
```

Not including how to use it globally because I'm not sure why you'd want this as a global command. That'd be creepy.

# Credit

Huge shoutout and thanks to [Tierney](https://github.com/bnb) who originally wrote this.
npm package: @hadeeb/css.macro
Description: A tiny CSS in JS solution for simple use cases
Author: Hadeeb Farhan
Latest version: 0.1.0

# css.macro

A tiny CSS in JS solution for simple use cases, built with [`babel-plugin-macros`][babel-plugin-macros] and [`PostCSS`][postcss].

```js
<span
  className={css`
    color: #222222;
  `}
>
  Content
</span>
```

- Vendor prefixing with [`autoprefixer`][autoprefixer].
- Nested styles with [`postcss-nested`][postcss-nested].
- Write styles in tagged templates or objects.
- Tiny runtime (`~200 Bytes`).

## Install

```
yarn add @hadeeb/css.macro
// OR
npm install @hadeeb/css.macro
```

You'll also need to install and configure
[`babel-plugin-macros`][babel-plugin-macros] if you haven't already.

## Usage

### CSS

```js
import { css } from "@hadeeb/css.macro";

<button
  className={css`
    font-weight: 500;
  `}
>
  Content
</button>;
```

### Styled components

```js
import { styled } from "@hadeeb/css.macro";

const StyledDiv = styled.div`
  font-weight: 500;
  span {
    font-size: 12px;
  }
`;
// OR
const StyledDiv = styled("div")`
  font-weight: 500;
  span {
    font-size: 12px;
  }
`;
```

`styled` can also wrap any component which accepts a `className` prop

```js
import { styled } from "@hadeeb/css.macro";
import { Link } from "react-router-dom";

const StyledLink = styled(Link)`
  color: blue;
  &:hover {
    color: red;
  }
`;
```

### Global styles

```js
import { injectGlobal } from "@hadeeb/css.macro";
injectGlobal`
  body {
    margin: 0;
  }
`;
```

### Style objects

Styles can also be declared as objects

> Note: objects should be declared inline.

```js
import { css, styled, injectGlobal } from "@hadeeb/css.macro";

<span className={css({ fontSize: 14 })}>Content</span>;

const StyledDiv = styled.div({
  fontWeight: 500,
  ".someClass": {
    fontSize: 12
  }
});

injectGlobal({
  ".root": {
    height: "100vh"
  }
});
```

## Server Side Rendering

After rendering the components extract the CSS and add it to the DOM

```js
import { extractCSS, styleID } from "@hadeeb/css.macro/server";

const styleTag = `<style id="${styleID}">${extractCSS()}</style>`;
```

## Caveats

- Dynamic styles are not supported
- Style objects have to be declared inline

[babel]: https://babeljs.io/
[babel-plugin-macros]: https://github.com/kentcdodds/babel-plugin-macros
[postcss]: https://postcss.org/
[autoprefixer]: https://github.com/postcss/autoprefixer
[postcss-nested]: https://github.com/postcss/postcss-nested
npm package: @hadeeb/gstin-validator
Description: Module to validate GSTIN
Author: Hadeeb Farhan
Latest version: 0.0.2

# GSTIN Validator

- Validates GSTIN number for length (15 digits), format (State code, PAN, Entity Number, Z, Checksum) and checksum as per the algorithm published at [GSTN portal](http://developer.gstsystem.co.in/pages/apiportal/data/gsp/download/GSTIN_Validation_SampleCode.zip)

## Installation

```
npm install @hadeeb/gstin-validator
```

```js
import GstinValidator from "@hadeeb/gstin-validator";
```

or

```html
<script src="https://unpkg.com/@hadeeb/gstin-validator@0.0.2/dist/gstin-validator.min.js"></script>
```

The module can be accessed as

```js
var GstinValidator = window.GstinValidator.default;
```
npm package: @hadeeb/reactive
Description: Reactive global state for react apps
Author: Hadeeb Farhan
Latest version: 0.0.3

# Reactive Store

Reactive global state for react apps

---

```sh
npm i @hadeeb/reactive
OR
yarn add @hadeeb/reactive
```

- ~1 KB (min+gzip)
- Automatic dependency tracking with ES6 Proxies.
- Dispatch events to update the state.
- Mutate the state inside event listeners.
- Components are updated only when used values have changed.

---

### Example

```tsx
import { unstable_batchedUpdates } from "react-dom"; //Or react-native
import {
  StoreProvider,
  createStore,
  observe,
  useStore,
  options
} from "@hadeeb/reactive";

const store = createStore(
  {
    INCREMENT({ state }) {
      state.counter++;
    },
    DECREMENT({ state }) {
      state.counter--;
    },
    UPDATE_COUNTER({ state }, payload) {
      state.counter = state.counter + payload;
    },
    async ASYNC_INCREMENT({ dispatch }) {
      await someApi();
      dispatch("INCREMENT");
    }
  },
  { counter: 0 }
);

function Child() {
  const [store, dispatch] = useStore();
  return (
    <div>
      <span>{store.counter}</span>
      <button
        onClick={() => {
          dispatch("INCREMENT");
        }}
      >
        +
      </button>
      <button
        onClick={() => {
          dispatch("DECREMENT");
        }}
      >
        -
      </button>
      <button
        onClick={() => {
          dispatch("UPDATE_COUNTER", 5);
        }}
      >
        Increment by 5
      </button>
    </div>
  );
}
const ConnectedChild = observe(Child);

function App() {
  return (
    <StoreProvider store={store}>
      <ConnectedChild />
    </StoreProvider>
  );
}
// This is important
options.batch = unstable_batchedUpdates;
```

### Redux DevTool Integration

```tsx
import {addReduxDevTool} from "@hadeeb/reactive/enhance"
const store = createStore(...,...)

addReduxDevTool(store,options)
```

### Caveats

- ES6 collections are not reactive

### Prior art

- [@vue/reactivity](https://github.com/vuejs/vue-next/tree/master/packages/reactivity)
- [hyperactiv](https://github.com/elbywan/hyperactiv)
- [Mobx](https://github.com/mobxjs/mobx)
- [mobx-react-lite](https://github.com/mobxjs/mobx-react-lite)

### TODO

- Documentation
  - Class components
- Example Project
npm package: @hadeeb/trpc-worker
Description: Run tRPC in a web worker
Author: Hadeeb Farhan
Latest version: 0.1.0

# tRPC in a Worker

Run tRPC in a web worker / electron main thread

> Thin wrapper(<1kb min+gzip) around tRPC's websocket link & adapter


## Web Worker

### Worker thread

```ts
import { applyWSSHandler } from "@trpc/server/adapters/ws";
import { createWorkerServer } from "@hadeeb/trpc-worker/adapter";
import { appRouter } from "../path/to/router";
import { createContext } from "../path/to/context";

applyWSSHandler({
  router: appRouter,
  createContext,
  wss: createWorkerServer({ worker: self }),
});
```

### Main thread

```ts
import { createTRPCProxyClient, wsLink } from "@trpc/client";
import { createWorkerClient } from "@hadeeb/trpc-worker/link";
import type { AppRouter } from "../path/to/server/trpc";

const worker = new Worker("../path/to/trpc/worker");
const client = createTRPCProxyClient<AppRouter>({
  links: [
    wsLink({
      client: createWorkerClient({ worker }),
    }),
  ],
});
```

## Electron

### Main Process

```ts
import { ipcMain } from "electron";
import { createElectronServer } from "@hadeeb/trpc-worker/adapter";

applyWSSHandler({
  router: appRouter,
  createContext,
  wss: createElectronServer({ ipcMain }),
});
```

### Preload script

```ts
import { ipcRenderer } from "electron";
import { trpcElectronPreload } from "@hadeeb/trpc-worker/adapter";

trpcElectronPreload({ ipcRenderer });
```

### Browser script

```ts
const client = createTRPCProxyClient<AppRouter>({
  links: [
    wsLink({
      client: createWorkerClient({ worker: window }),
    }),
  ],
});
```

## :warning: Caveats

While running in browser, you may have to disable server-side checks in tRPC.

```ts
const t = initTRPC.create({
  isServer: false,
  allowOutsideOfServer: true,
});
```

## :warning: Compatibility with tRPC Updates

This depends on the internals of default tRPC Websocket link & `ws` adapter.

It helps keep the implementation very light.

However, it may break with tRPC patch updates.

Please check before updating tRPC.
npm package: @hadeeb/vite-plugin-wasm
Description: Vite plugin to import wasm files in cloudflare workers
Author: Hadeeb Farhan
Latest version: 1.0.1

# Vite plugin

Cloudflare workers supports importing `.wasm` files as [WebAssembly.Module](https://developers.cloudflare.com/workers/wrangler/cli-wrangler/configuration/#buildupload-1)

```ts
import yogaWeb from "yoga-wasm-web";
import yogaWASM from "yoga-wasm-web/dist/yoga.wasm?module";

yogaWeb(yogaWASM);
```

`vite.config.ts`

```ts
import { wasmEdgeModule } from "@hadeeb/vite-plugin-wasm";

export default defineConfig({
  plugins: [wasmEdgeModule()],
});
```

`tsconfig.json`

```json
{
  "compilerOptions": {
    "types": ["vite/client", "@hadeeb/vite-plugin-wasm/types"]
  }
}
```
npm package: @hadelive/cardano-multiplatform-lib-nodejs
Description: Multiplatform WASM SDK containing the most common CML crates for Cardano blockchain functionality
Author: dcSpark
Latest version: 6.0.2-rc

# Cardano Multiplatform Lib

This is a library, written in Rust, that can be deployed to multiple platforms (Rust crate, JS, Typescript, WASM, etc). It handles:
- Serialization & deserialization of core data structures
- Useful utility functions for dApps & wallets

##### NPM packages

- browser: [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-browser)
- nodejs: [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-nodejs)
- asm.js (strongly discouraged): [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-asmjs)

##### Rust crates

- crates: [link](https://crates.io/crates/cardano-multiplatform-lib)

##### Mobile bindings

We recommend using Ionic + Capacitor or an equivalent setup to have the WASM bindings working in mobile

## Documentation

https://dcSpark.github.io/cardano-multiplatform-lib/
npm package: @hadelive/cardano-multiplatform-multiera-lib-browser
Description: Multiplatform WASM SDK for era-agnostic Cardano blockchain parsing
Author: dcSpark
Latest version: 6.0.2-rc

# Cardano Multiplatform Lib

This is a library, written in Rust, that can be deployed to multiple platforms (Rust crate, JS, Typescript, WASM, etc). It handles:
- Serialization & deserialization of core data structures
- Useful utility functions for dApps & wallets

##### NPM packages

- browser: [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-browser)
- nodejs: [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-nodejs)
- asm.js (strongly discouraged): [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-asmjs)

##### Rust crates

- crates: [link](https://crates.io/crates/cardano-multiplatform-lib)

##### Mobile bindings

We recommend using Ionic + Capacitor or an equivalent setup to have the WASM bindings working in mobile

## Documentation

https://dcSpark.github.io/cardano-multiplatform-lib/
npm package: @hadelive/cardano-multiplatform-multiera-lib-nodejs
Description: Multiplatform WASM SDK for era-agnostic Cardano blockchain parsing
Author: dcSpark
Latest version: 6.0.2-rc

# Cardano Multiplatform Lib

This is a library, written in Rust, that can be deployed to multiple platforms (Rust crate, JS, Typescript, WASM, etc). It handles:
- Serialization & deserialization of core data structures
- Useful utility functions for dApps & wallets

##### NPM packages

- browser: [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-browser)
- nodejs: [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-nodejs)
- asm.js (strongly discouraged): [link](https://www.npmjs.com/package/@dcspark/cardano-multiplatform-lib-asmjs)

##### Rust crates

- crates: [link](https://crates.io/crates/cardano-multiplatform-lib)

##### Mobile bindings

We recommend using Ionic + Capacitor or an equivalent setup to have the WASM bindings working in mobile

## Documentation

https://dcSpark.github.io/cardano-multiplatform-lib/