@scale-codec/enum
Version:
Simple JavaScript abstraction around Rust Enums
42 lines • 2.44 kB
JSON
{
"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`   \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"
}