# suproxy

> Super proxy library for observe any object.

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

## Install

```sh
npm install suproxy
pnpm add suproxy
yarn add suproxy
bun add suproxy
```

## 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-23 |
| First published | 2019-10-22 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 56 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | suli |
| Maintainers | soulizs |

## Links

- npm: https://www.npmjs.com/package/suproxy
- Repository: https://github.com/sulirc/suproxy
- Homepage: https://github.com/sulirc/suproxy#readme
- Issues: https://github.com/sulirc/suproxy/issues
- npm.io page: https://npm.io/package/suproxy

## Dependencies (2)

- [immer](https://npm.io/package/immer.md) ^4.0.1
- [events](https://npm.io/package/events.md) ^3.0.0

## Recent versions

- 1.1.0 (latest) — 2019-10-23
- 1.0.1 — 2019-10-22
- 1.0.0 — 2019-10-22

## README

# suproxy

Super proxy library for observe any object.

## Installation

```bash
npm install suproxy
```

or use yarn

```bash
yarn add suproxy
```

## Hello suproxy

```js
import { suproxyCreator, suproxyEvent } from "../suproxy";

const show = {
  name: "why women kill",
  season: 1
};

// proxy to observe the `show` object.
const { proxyEventName, proxyTarget } = suproxyCreator(show);

// add any event listeners  to listen get/set change!
suproxyEvent.on(proxyEventName.get, o => console.log("get", o));
suproxyEvent.on(proxyEventName.set, o => console.log("set", o));

// when u get its value, suproxyEvent will emit
console.log("get proxyTarget value season:", proxyTarget.season);
// => emit: get { key: 'season', value: 1 }

// when u set its value, suproxyEvent will emit
proxyTarget.season = 2;
// => emit: set { key: 'season', value: 2 }

console.log("final", show);
// => final { name: 'why women kill', season: 2 }
```

## Advance usage

Alias event name!

```js
const { proxyEventName, proxyTarget, alias } = suproxyCreator(show);

// we provide an alias function to set uniqe event name.
// so when we alias it
alias("show@sulirc");

console.log("alias event get name:", proxyEventName.get);
// => alias event get name: Symbol(suproxy#show@sulirc.get)
```

Add we can also get/set intercepter middlewares!

```js
const intercepter = {
  set: [
    (pair, next) => {
      next({
        ...pair,
        value: pair.value + 1
      });
    },
    (pair, next) => {
      next({
        ...pair,
        value: pair.value + 2
      });
    }
  ],
  get: [
    (pair, next) => {
      next({
        ...pair,
        value: parseInt(Math.random() * 100, 10)
      });
    },
    (pair, next) => {
      next({
        ...pair,
        value: "S" + pair.value
      });
    }
  ]
};

// set our interceptor of `show` object
const { proxyEventName, proxyTarget, alias } = suproxyCreator(show, intercepter);

alias("show@sulirc");
console.log("alias event get name:", proxyEventName.get);

suproxyEvent.on(proxyEventName.get, o => console.log("get", o));
suproxyEvent.on(proxyEventName.set, o => console.log("set", o));

// now we get two more event `before.intercept.get` and `before.intercept.set`
suproxyEvent.on(proxyEventName["before.intercept.get"], o =>
  console.log("before.intercept.get", o)
);
suproxyEvent.on(proxyEventName["before.intercept.set"], o =>
  console.log("before.intercept.set", o)
);

console.log("get proxyTarget value season:", proxyTarget.season);

proxyTarget.season = 2;

console.log("final", show);
```

and we get log!

```
alias event get name: Symbol(suproxy#show@sulirc.get)
before.intercept.get { key: 'season', value: 1 }
get { key: 'season', value: 'S65' }
get proxyTarget value season: S65
before.intercept.set { key: 'season', value: 2 }
set { key: 'season', value: 5 }
final { name: 'why women kill', season: 5 }
```

Enjoy suproxy!

## reference

- [immerjs](https://immerjs.github.io/immer/docs/introduction)
- [events](https://nodejs.org/api/events.html)

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