npm package: @paraspell/xcm-analyser
Description: Tool for converting XCM MultiLocation into human readable written format.
Latest version: 3.0.6

<br /><br />

<div align="center">
  <h1 align="center">@paraspell/xcm-analyser</h1>
  <h4 align="center"> Tool to convert XCM Locations into human-readable format. </h4>
  <p align="center">
    <a href="https://npmjs.com/package/@paraspell/sdk">
      <img alt="version" src="https://img.shields.io/npm/v/@paraspell/xcm-analyser?style=flat-square" />
    </a>
    <a href="https://npmjs.com/package/@paraspell/sdk">
      <img alt="downloads" src="https://img.shields.io/npm/dm/@paraspell/xcm-analyser?style=flat-square" />
    </a>
    <a href="https://github.com/paraspell/xcm-sdk/actions">
      <img alt="build" src="https://github.com/paraspell/xcm-sdk/actions/workflows/release.yml/badge.svg" />
    </a>
    <a href="https://snyk.io/test/github/paraspell/sdk">
      <img alt="snyk" src="https://snyk.io/test/github/paraspell/sdk/badge.svg" />
    </a>
  </p>
  <p>Analyser documentation <a href = "https://paraspell.github.io/docs/" \>[here]</p>
</div>

<br /><br />
<br /><br />
## Installation

#### Install SDK 

```bash
npm install | pnpm add | yarn add @paraspell/xcm-analyser 
```
## Implementation

> [!NOTE]
> **The following junction types are supported:**
> - Parachain
> - AccountId32
> - AccountIndex64
> - AccountKey20
> - PalletInstance
> - GeneralIndex
> - GeneralKey
> - OnlyChild
> - Plurality
> - GlobalConsensus


#### Compile a single location object to the URL

To compile a single location object to url use the following structure:

```js
//Importing the call
import { convertLocationToUrl } from '@paraspell/xcm-analyser';

//Define the location you wish to convert to URL
/*const location: Location = {
      parents: '0',
      interior: {
        X2: [
          {
            PalletInstance: '50',
          },
          {
            GeneralIndex: '41',
          },
        ],
      },
    };*/

const result = convertLocationToUrl(location);

/*
This should result into:
'./PalletInstance(50)/GeneralIndex(41)'
*/
```

#### Compile a single location JSON to the URL
To compile a single location JSON to url use the following structure:

```js
//Importing the call
import { convertLocationToUrlJson } from '@paraspell/xcm-analyser';

//Define location JSON
/*const locationJson = `{
      "parents": "3",
      "interior": {
        "X2": [
          {
            "PalletInstance": "50"
          },
          {
            "GeneralIndex": "41"
          }
        ]
      }
    }`*/

const result = convertLocationToUrl(locationJson);

/*
This should result into:
''../../../PalletInstance(50)/GeneralIndex(41)''
*/
```

#### Compile the entire XCM call to the URL
To compile the entire XCM call to the URL use the following structure:

```js
//Importing the call
import { convertXCMToUrls } from '@paraspell/xcm-analyser';

//Define XCM call arguments you wish to convert
/*const xcmCallArguments = [
  {
    V3: {
      parents: '1',
      interior: {
        X1: {
          Parachain: '2006',
        },
      },
    },
  },
  {
    V3: {
      parents: '0',
      interior: {
        X1: {
          AccountId32: {
            network: null,
            id: 'accountID',
          },
        },
      },
    },
  },
  {
    V3: [
      {
        id: {
          Concrete: {
            parents: '0',
            interior: {
              X2: [{ PalletInstance: '50' }, { GeneralIndex: '1984' }],
            },
          },
        },
        fun: {
          Fungible: 'amount',
        },
      },
    ],
  },
];*/

const urls = convertXCMToUrls(xcmCallArguments);

/*
This should result into:
[
  '../Parachain(2006)',
  './AccountId32(null, accountID)',
  './PalletInstance(50)/GeneralIndex(1984)',
]
*/
```

## 💻 Tests
- Run compilation using `pnpm compile`

- Run linter using `pnpm lint`

- Run unit tests using `pnpm test`

- Run all core tests and checks using `pnpm runAll`

- Run an example from [example file](https://github.com/paraspell/xcm-tools/blob/main/packages/xcm-analyser/scripts/example.ts) using `pnpm runExample`

> [!NOTE]
> XCM Analyser can be tested in [Playground](https://playground.paraspell.xyz/xcm-analyser).

## Contribute to XCM Tools and earn rewards 💰

We run an open Bug Bounty Program that rewards contributors for reporting and fixing bugs in the project. More information on bug bounty can be found in the [official documentation](https://paraspell.github.io/docs/contribution.html).

## Get Support 🚑

- Contact form on our [landing page](https://paraspell.xyz/#contact-us).
- Message us on our [X](https://x.com/paraspell).
- Support channel on [telegram](https://t.me/paraspell).

## License

Made with 💛 by [ParaSpell✨](https://paraspell.xyz/)

Published under [MIT License](https://github.com/paraspell/xcm-tools/blob/main/packages/xcm-analyser/LICENSE).