https://github.com/node-modules/sdk-base
a base class for sdk with default error handler
https://github.com/node-modules/sdk-base
Last synced: 11 months ago
JSON representation
a base class for sdk with default error handler
- Host: GitHub
- URL: https://github.com/node-modules/sdk-base
- Owner: node-modules
- License: mit
- Created: 2014-09-02T06:46:39.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-12-22T03:21:27.000Z (over 1 year ago)
- Last Synced: 2025-04-26T14:03:08.800Z (about 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 67.4 KB
- Stars: 62
- Watchers: 16
- Forks: 8
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# sdk-base
[![NPM version][npm-image]][npm-url]
[](https://github.com/node-modules/sdk-base/actions/workflows/nodejs.yml)
[![Test coverage][codecov-image]][codecov-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url]
[](https://nodejs.org/en/download/)
[npm-image]: https://img.shields.io/npm/v/sdk-base.svg?style=flat-square
[npm-url]: https://npmjs.org/package/sdk-base
[codecov-image]: https://codecov.io/github/node-modules/sdk-base/coverage.svg?branch=master
[codecov-url]: https://codecov.io/github/node-modules/sdk-base?branch=master
[snyk-image]: https://snyk.io/test/npm/sdk-base/badge.svg?style=flat-square
[snyk-url]: https://snyk.io/test/npm/sdk-base
[download-image]: https://img.shields.io/npm/dm/sdk-base.svg?style=flat-square
[download-url]: https://npmjs.org/package/sdk-base
A base class for sdk with some common & useful functions.
## Installation
```bash
npm install sdk-base
```
## Usage
Constructor argument:
- {Object} options
- {String} [initMethod] - the async init method name, the method should be a function return promise. If set, will execute the function in the constructor.
- {AsyncLocalStorage} [localStorage] - async localStorage instance.
```js
const { Base } = require('sdk-base');
class Client extends Base {
constructor() {
super({
initMethod: 'init',
localStorage: app.ctxStorage,
});
}
async init() {
// put your async init logic here
}
// support async function too
// async init() {
// // put your async init logic here
// }
}
(async function main() {
const client = new Client();
// wait client ready, if init failed, client will throw an error.
await client.ready();
// support async event listener
client.on('data', async function (data) {
// put your async process logic here
//
// @example
// ----------
// await submit(data);
});
client.emit('data', { foo: 'bar' });
})().catch(err => { console.error(err); });
```
### API
- `.ready(flagOrFunction)` flagOrFunction is optional, and the argument type can be Boolean, Error or Function.
```js
// init ready
client.ready(true);
// init failed
client.ready(new Error('init failed'));
// listen client ready
client.ready(err => {
if (err) {
console.log('client init failed');
console.error(err);
return;
}
console.log('client is ready');
});
// support promise style call
client.ready()
.then(() => { ... })
.catch(err => { ... });
// support async function style call
await client.ready();
```
- `async readyOrTimeout(milliseconds)` ready or timeout, after milliseconds not ready will throw TimeoutError
```js
await client.readyOrTimeout(100);
```
- `.isReady getter` detect client start ready or not.
- `.on(event, listener)` wrap the [EventEmitter.prototype.on(event, listener)](https://nodejs.org/api/events.html#events_emitter_on_eventname_listener), the only difference is to support adding async function listener on events, except 'error' event.
- `once(event, listener)` wrap the [EventEmitter.prototype.once(event, listener)](https://nodejs.org/api/events.html#events_emitter_once_eventname_listener), the only difference is to support adding async function listener on events, except 'error' event.
- `prependListener(event, listener)` wrap the [EventEmitter.prototype.prependListener(event, listener)](https://nodejs.org/api/events.html#events_emitter_prependlistener_eventname_listener), the only difference is to support adding async function listener on events, except 'error' event.
- `prependOnceListener(event, listener)` wrap the [EventEmitter.prototype.prependOnceListener(event, listener)](https://nodejs.org/api/events.html#events_emitter_prependoncelistener_eventname_listener), the only difference is to support adding generator listener on events, except 'error' event.
- `addListener(event, listener)` wrap the [EventEmitter.prototype.addListener(event, listener)](https://nodejs.org/api/events.html#events_emitter_addlistener_eventname_listener), the only difference is to support adding async function listener on events, except 'error' event.
```js
client.on('data', async function(data) {
// your async process logic here
});
client.once('foo', async function(bar) {
// ...
});
// listen error event
client.on('error', err => {
console.error(err.stack);
});
```
- `.await(event)`: [await an event](https://github.com/cojs/await-event), return a promise, and it will resolve(reject if event is `error`) once this event emmited.
```js
const data = await client.await('data');
```
- `._close()`: The `_close()` method is called by `close`.
It can be overridden by child class, but should not be called directly. It must return promise or generator.
- `.close()`: The `close()` method is used to close the instance.
## Breaking changes between v4 and v5
- Drop `.awaitFirst(events)` support
- Drop generator function support
- Don't catch event listener inside error
### License
[MIT](LICENSE)
## Contributors
[](https://github.com/node-modules/sdk-base/graphs/contributors)
Made with [contributors-img](https://contrib.rocks).