{
  "name": "@scale-codec/enum",
  "version": "2.1.1",
  "description": "Simple JavaScript abstraction around Rust Enums",
  "keywords": [
    "rust",
    "enum",
    "typescript"
  ],
  "license": "Apache-2.0",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/soramitsu/scale-codec-js-library.git"
  },
  "bugs": {
    "url": "https://github.com/soramitsu/scale-codec-js-library/issues"
  },
  "homepage": "https://soramitsu.github.io/scale-codec-js-library/",
  "main": "./dist/lib.cjs",
  "module": "./dist/lib.mjs",
  "types": "./dist/lib.d.ts",
  "exports": {
    ".": {
      "types": "./dist/lib.d.ts",
      "import": "./dist/lib.mjs",
      "require": "./dist/lib.cjs"
    },
    "./*": "./*"
  },
  "typedoc": {
    "entryPoint": "./src/lib.ts",
    "tsconfig": "../../tsconfig.build.json"
  },
  "files": [
    "dist",
    "CHANGELOG.md"
  ],
  "devDependencies": {
    "ts-pattern": "^4.1.4"
  },
  "readme": "# `@scale-codec/enum` ![build status](https://img.shields.io/github/checks-status/soramitsu/scale-codec-js-library/master) ![version](https://img.shields.io/npm/v/@scale-codec/enum) ![license](https://img.shields.io/npm/l/@scale-codec/enum)\n\nSmall tagged-union library for TypeScript.\n\n## Features\n\n- **Type narrowing** and **exhaustiveness check** (due to the library following TypeScript's [discriminated union pattern](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html#discriminated-unions))\n- Creation of type-safe variants\n- Type inference during variant creation\n\n## Installation\n\nAvailable on NPM:\n\n```shell\nnpm i @scale-codec/enum\n```\n\n## Example\n\n**Enum in Rust:**\n\n```rust\nenum Event {\n  PageLoaded,\n  KeyPress(String),\n  MouseClick { x: u32, y: u32 }\n}\n```\n\n**Enum in TypeScript:**\n\n```ts\nimport { Enumerate, variant } from '@scale-codec/enum'\n\n// Define the enum\ntype Event = Enumerate<{\n  PageLoaded: []\n  KeyPress: [string]\n  MouseClick: [{ x: number; y: number }]\n}>\n\n// Construct an actual value\nconst event1: Event = variant('KeyPress', '<enter>')\nconst event2 = variant<Event>('MouseClick', { x: 5, y: 10 })\nconst event3 = variant<Event>('PageLoaded')\n\n// Access the content\nif (event1.tag === 'MouseClick') {\n  // Types are narrowed\n  const { x, y } = event1.content\n}\n```\n\n## API\n\n[`@scale-codec/enum` API](https://soramitsu.github.io/scale-codec-js-library/api/modules/scale_codec_enum)\n"
}