https://github.com/metamask/swappable-obj-proxy
https://github.com/metamask/swappable-obj-proxy
Last synced: 7 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/metamask/swappable-obj-proxy
- Owner: MetaMask
- Created: 2018-05-17T01:30:44.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2025-04-01T06:55:15.000Z (10 months ago)
- Last Synced: 2025-06-05T10:50:27.667Z (8 months ago)
- Language: TypeScript
- Size: 1.27 MB
- Stars: 5
- Watchers: 34
- Forks: 3
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
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');
```