# ts-transformer-enumerate

> TypeScript custom transformer which enumerates members of the union of string literal types

Latest version **0.5.3** (published 2023-04-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install ts-transformer-enumerate
pnpm add ts-transformer-enumerate
yarn add ts-transformer-enumerate
bun add ts-transformer-enumerate
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.5.3 |
| Published | 2023-04-16 |
| First published | 2017-04-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 12.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 79 |
| Author | kimamula |
| Maintainers | kimamula |
| Keywords | TypeScript |

## Links

- npm: https://www.npmjs.com/package/ts-transformer-enumerate
- Repository: https://github.com/kimamula/ts-transformer-enumerate
- Homepage: https://github.com/kimamula/ts-transformer-enumerate#readme
- Issues: https://github.com/kimamula/ts-transformer-enumerate/issues
- npm.io page: https://npm.io/package/ts-transformer-enumerate

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.5.3 (latest) — 2023-04-16
- 0.5.2 — 2021-01-18
- 0.5.1 — 2019-11-24
- 0.5.0 — 2019-11-10
- 0.4.0 — 2019-05-03
- 0.3.3 — 2019-04-23
- 0.3.2 — 2019-01-08
- 0.3.1 — 2018-12-08
- 0.3.0 — 2017-06-28
- 0.2.1 — 2017-04-28
- 0.2.0 — 2017-04-28
- 0.1.2 — 2017-04-22
- 0.1.1 — 2017-04-22
- 0.1.0 — 2017-04-21

## README

# ts-transformer-enumerate

![Build Status](https://github.com/kimamula/ts-transformer-enumerate/workflows/test/badge.svg)
[![NPM version][npm-image]][npm-url]
[![Downloads](https://img.shields.io/npm/dm/ts-transformer-enumerate.svg)](https://www.npmjs.com/package/ts-transformer-enumerate)

A TypeScript custom transformer which enables enumerating members of the union of string literal types.

# Requirement
TypeScript >= 2.4.1

# How to use this package

This package exports 2 functions.
One is `enumerate` which is used in TypeScript codes to enumerate members of the union of string literal types, while the other is a TypeScript custom transformer which is used to compile the `enumerate` function correctly.

## How to use `enumerate`

```ts
import { enumerate } from 'ts-transformer-enumerate';

type Colors = 'green' | 'yellow' | 'red';
const Colors = enumerate<Colors>();

console.log(Colors.green); // 'green'
console.log(Colors.yellow); // 'yellow'
console.log(Colors.red); // 'red'
```

## How to use the custom transformer

Unfortunately, TypeScript itself does not currently provide any easy way to use custom transformers (See https://github.com/Microsoft/TypeScript/issues/14419 for detail).
It is recommended to use the custom transformer with webpack, Rollup, or ttypescript as [described](https://github.com/kimamula/ts-transformer-keys#how-to-use-the-custom-transformer).
You can also use the transformer with TypeScript compiler API as follows.

```js
const ts = require('typescript');
const enumerateTransformer = require('ts-transformer-enumerate/transformer').default;

const program = ts.createProgram([/* your files to compile */], {
  strict: true,
  noEmitOnError: true,
  target: ts.ScriptTarget.ES5
});

const transformers = {
  before: [enumerateTransformer(program)],
  after: []
};
const { emitSkipped, diagnostics } = program.emit(undefined, undefined, undefined, false, transformers);

if (emitSkipped) {
  throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
}
```

As a result, the TypeScript code shown above is compiled into the following JavaScript.

```js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ts_transformer_enumerate_1 = require("ts-transformer-enumerate");
var Colors = { green: "green", yellow: "yellow", red: "red" };
console.log(Colors.green); // 'green'
console.log(Colors.yellow); // 'yellow'
console.log(Colors.red); // 'red'
```

# Note

* The `enumerate` function can only be used as a call expression. Writing something like `enumerate.toString()` results in a runtime error.
* `enumerate` does not work with a dynamic type parameter, i.e., `enumerate<T>()` in the following code is converted to an empty object(`{}`).

```ts
class MyClass<T extends string> {
  enumerate() {
    return enumerate<T>();
  }
}
```

# License

MIT

[travis-image]:https://travis-ci.org/kimamula/ts-transformer-enumerate.svg?branch=master
[travis-url]:https://travis-ci.org/kimamula/ts-transformer-enumerate
[npm-image]:https://img.shields.io/npm/v/ts-transformer-enumerate.svg?style=flat
[npm-url]:https://npmjs.org/package/ts-transformer-enumerate

---
_Source: https://npm.io/package/ts-transformer-enumerate · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
