UNPKG

@scale-codec/enum

Version:
42 lines 2.44 kB
{ "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" }