# black-object

> [![NPM version](https://img.shields.io/npm/v/black-object?color=%23cb3837&style=flat-square)](https://www.npmjs.com/package/black-object) [![Repository package.json version](https://img.shields.io/github/package-json/v/vilic/black-object?color=%230969da&l

Latest version **0.0.1-3** (published 2022-05-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install black-object
pnpm add black-object
yarn add black-object
bun add black-object
```

## Health

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

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

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.1-3 |
| Published | 2022-05-23 |
| First published | 2022-04-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 31.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | vilicvane |
| Maintainers | vilic |

## Links

- npm: https://www.npmjs.com/package/black-object
- Repository: https://github.com/vilic/black-object
- Homepage: https://github.com/vilic/black-object#readme
- Issues: https://github.com/vilic/black-object/issues
- npm.io page: https://npm.io/package/black-object

## Dependencies (2)

- [tslib](https://npm.io/package/tslib.md) ^2.4.0
- [x-value](https://npm.io/package/x-value.md) ^0.0.1-18

## Recent versions

- 0.0.1-3 (latest) — 2022-05-23
- 0.0.1-2 — 2022-05-23
- 0.0.1-1 — 2022-04-29
- 0.0.1-0 — 2022-04-29
- 0.0.0 — 2022-04-28

## README

[![NPM version](https://img.shields.io/npm/v/black-object?color=%23cb3837&style=flat-square)](https://www.npmjs.com/package/black-object)
[![Repository package.json version](https://img.shields.io/github/package-json/v/vilic/black-object?color=%230969da&label=repo&style=flat-square)](./package.json)
[![MIT license](https://img.shields.io/github/license/vilic/black-object?style=flat-square)](./LICENSE)

# Black Object

Black Object is simple utility for creating a mock object with predefined interaction "scripts" (`call`, `get`, `set` and `property` update).

## Installation

```sh
npm install black-object
# or
yarn add black-object
```

## Usage

```ts
import {assertScriptsCompleted, call, createBlackObject, x} from 'black-object';

interface Adapter {
  stepOne(value: number): void;
  stepTwo(value: string): boolean;
}

const adapter = createBlackObject<Adapter>([
  ['stepOne', call([123])],
  ['stepTwo', call([x.string], true)],
]);

// Error would be thrown if the following interactions failed to match the
// scripts defined above.

adapter.stepOne(123);
adapter.stepTwo('abc'); // true

assertScriptsCompleted(adapter);
```

### Create Black Object with fallback partial

```ts
const object = createBlackObject(
  {
    value: 123,
  },
  [
    ['foo', call([])],
    ['bar', call([x.number], value => value + 1)],
  ],
);

object.value; // 123

object.foo();
object.bar(0); // 1

object.value; // 123
```

### Property `get` and `set`

Both `get` and `set` script work only once and does not change the property value.

```ts
const object = createBlackObject([
  ['foo', get(123)],
  ['foo', set(456)],
]);

object.foo; // 123
object.foo = 456;
```

### Update `property`

```ts
const object = createBlackObject(
  {
    foo: 123,
  },
  [
    ['foo', set(x.number)],
    ['foo', property(456)],
  ],
);

object.foo = 456;
object.foo; // 456, actually updated by `property(456)` script.
```

## License

MIT License.

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