# ts-metadata-handler

> ts-metadata-handler provides a typesafe way of working with [reflect-metadata](https://www.npmjs.com/package/reflect-metadata).

Latest version **1.1.0** (published 2019-10-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install ts-metadata-handler
pnpm add ts-metadata-handler
yarn add ts-metadata-handler
bun add ts-metadata-handler
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2019-10-17 |
| First published | 2019-10-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 5.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | yes |
| GitHub stars | 1 |
| Author | Olian04 |
| Maintainers | olian04 |
| Keywords | ts, typescript, metadata |

## Links

- npm: https://www.npmjs.com/package/ts-metadata-handler
- Repository: https://github.com/Olian04/ts-metadata-handler
- Homepage: https://github.com/Olian04/ts-metadata-handler#readme
- Issues: https://github.com/Olian04/ts-metadata-handler/issues
- npm.io page: https://npm.io/package/ts-metadata-handler

## Dependencies (2)

- [typescript](https://npm.io/package/typescript.md) ^3.6.4
- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ^0.1.13

## Alternatives

- [@sapphire/ratelimits](https://npm.io/package/@sapphire/ratelimits.md) — 4.4K weekly downloads
- [js-csvparser](https://npm.io/package/js-csvparser.md) — 2.0K weekly downloads
- [@adadapted/js-sdk](https://npm.io/package/@adadapted/js-sdk.md) — 251 weekly downloads
- [@grapecity/spread-sheets-sparklines](https://npm.io/package/@grapecity/spread-sheets-sparklines.md) — 103 weekly downloads
- [@1selfworld/adchain-sdk-react-native](https://npm.io/package/@1selfworld/adchain-sdk-react-native.md) — 80 weekly downloads

## Recent versions

- 1.1.0 (latest) — 2019-10-17
- 1.0.0 — 2019-10-16

## README

# ts-metadata-handler

ts-metadata-handler provides a typesafe way of working with [reflect-metadata](https://www.npmjs.com/package/reflect-metadata).

```ts
import { MetadataHandler } from 'ts-metadata-handler';

interface IMetadata {
  name: string;
}
const metadata = new MetadataHandler<IMetadata>(() => ({
  name: 'N/A',
}));

const name = (target: object, propertyKey: string) => {
  Object.defineProperty(target, propertyKey, {
    get: () => metadata.get(target, 'name'),
    set: (value: string) => metadata.set(target, 'name', value),
    enumerable: true,
    configurable: true
  });
}
const log = (target: object, propertyKey: string, propertyDescriptor: PropertyDescriptor): PropertyDescriptor => {
  const func = propertyDescriptor.value.bind(target);
  propertyDescriptor.value = (...args) => {
    console.log(metadata.get(target).name);
    func(...args);
  }
  return propertyDescriptor;
};

class Foo {
  @name public name = 'foo';

  @log
  public bar() {
    console.log('bar');
  }
}
```

```ts
// tsconfig.json
{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "target": "ES5", // minimum
    "lib": [
      "es2015", // for symbol support
    ],
  }
}
```

## Install 

**NPM:** [`npm i ts-metadata-handler`](https://www.npmjs.com/package/ts-metadata-handler)

## Type "Documentation"

```ts
class MetadataHandler<MetadataStructure> {
  constructor(
    private initialMetadataFactory: () => MetadataStructure,
    private METADATA_KEY = Symbol('metadata'),
  ) {}

  get(target: object): MetadataStructure;
  get<K extends keyof MetadataStructure>(target: object, key: K): MetadataStructure[K];

  set<K extends keyof MetadataStructure>(target: object, key: K, value: MetadataStructure[K]): void;

  update(target: object, cb: (metadata: MetadataStructure) => MetadataStructure): void;
}
```

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