# @metamask/swappable-obj-proxy

> Tools for creating `Proxy`s around objects that are swappable via setTarget

Latest version **2.3.0** (published 2024-12-06) · ISC license · 0 weekly downloads

## Install

```sh
npm install @metamask/swappable-obj-proxy
pnpm add @metamask/swappable-obj-proxy
yarn add @metamask/swappable-obj-proxy
bun add @metamask/swappable-obj-proxy
```

## Health

**Score 35/100 (D)** — status: maintenance-mode.

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

Warnings: low downloads; no esm support.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.3.0 |
| Published | 2024-12-06 |
| First published | 2023-02-17 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=14.0.0 |
| Dependencies | 0 |
| Unpacked size | 36.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | danfinlay, kumavis, mcmire, rekmarks, metamaskbot, gudahtt, nicholasellul, sethkfman, naugtur |

## Links

- npm: https://www.npmjs.com/package/@metamask/swappable-obj-proxy
- Repository: https://github.com/MetaMask/swappable-obj-proxy
- npm.io page: https://npm.io/package/@metamask/swappable-obj-proxy

## Recent versions

- 2.3.0 (latest) — 2024-12-06
- 2.2.0 — 2024-01-15
- 2.1.0 — 2023-02-24
- 2.0.0 — 2023-02-17

## README

# createSwappableProxy

Creates a `Proxy` around any object. Retarget the proxy with `setTarget`.

## Installation

`yarn add @metamask/swappable-obj-proxy`

or

`npm install @metamask/swappable-obj-proxy`

## Usage

### createSwappableProxy

```js
const { createSwappableProxy } = require('@metamask/swappable-obj-proxy');

const original = { sayHello: () => 'hi' };
const next = { sayHello: () => 'haay' };
const proxy = createEventEmitterProxy(original);

proxy.sayHello(); //=> "hi"
proxy.setTarget(next);
proxy.sayHello(); //=> "haay"
```

### createEventEmitterProxy

Creates a `Proxy` around an `EventEmitter`. If the proxy has `setTarget` called with a different `EventEmitter`, all events will be removed from the old target and transferred to the new EventEmitter.

```js
const { createEventEmitterProxy } = require('@metamask/swappable-obj-proxy');

const original = new EventEmitter();
const next = new EventEmitter();
const proxy = createEventEmitterProxy(original);

proxy.on('event', () => console.log('saw event!'));

// triggers the event handler
original.emit('event');

// moves listeners over to next
proxy.setTarget(next);

// does NOT trigger the event handler
original.emit('event');
// DOES trigger the event handler
next.emit('event');
```

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