# save-instance

> Make a class with member instances to get and save

Latest version **1.4.5** (published 2018-03-27) · MIT license · 0 weekly downloads

## Install

```sh
npm install save-instance
pnpm add save-instance
yarn add save-instance
bun add save-instance
```

## 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.4.5 |
| Published | 2018-03-27 |
| First published | 2016-01-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 7.6 |
| Dependencies | 0 |
| Unpacked size | 22.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Sun Haohao |
| Maintainers | viringbells |
| Keywords | instance |

## Links

- npm: https://www.npmjs.com/package/save-instance
- Repository: https://github.com/viRingbells/save-instance
- Homepage: https://github.com/viRingbells/save-instance#readme
- Issues: https://github.com/viRingbells/save-instance/issues
- npm.io page: https://npm.io/package/save-instance

## Recent versions

- 1.4.5 (latest) — 2018-03-27
- 1.4.4 — 2018-03-27
- 1.4.3 — 2018-03-14
- 1.4.2 — 2018-03-14
- 1.4.1 — 2018-03-14
- 1.4.0 — 2018-03-14
- 1.3.0 — 2018-03-13
- 1.2.0 — 2018-03-13
- 1.1.2 — 2018-02-05
- 1.1.1 — 2018-02-05
- 1.1.0 — 2018-02-05
- 1.0.0 — 2018-02-02
- 0.0.6 — 2016-08-31
- 0.0.5 — 2016-08-29
- 0.0.4 — 2016-08-26
- … 3 more at https://npm.io/package/save-instance/versions

## README

# save-instance

[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]

## Why save-instance

If you have a class like:

```
class Test {
    constructor (...args) {}
}
```

And you initialize some instances in a module (ie. a bootstrap module), like:

```
const a = new Test(...args);
```

Since you don't know what module would use them, you should export them by `exports` or `global`

Yet both `exports` and `global` seems not perfect for this case.
* For `exports`, you should require that bootstrap module to use the instances, which is puzzle
* For `global`, you should handle the namespace problem carefully

Maybe a better way is to bind the instances with the class itself, like:

```
const a1 = Test.getInstance('A');
```

Now it seems more reasonable, as _"to get the Test instance named 'A' "_

Of course, you should initalize and name it before using.

```
new Test(...args).saveInstance('A');
// or
Test.saveInstance('A', ...args);
```

## How to use

_Decoration_ is supposed as the best way to use this

```
const savable = require('save-instance');

@savable()
class Test {...}
```

Yet decorator is not implemented till current version (v7.6), use it like

```
class Test {...}
savable()(Test);
```

## Other uses

### Lazy mode

Maybe we want instances initialized in a lazy mode. Just use it like this:

```
Test.saveLazyInstance('A', ...args);
```

### Singleton

Use default name '' to pretend as a singleton instance

```
new Test(...args).saveInstance();
const test =  Test.getInstance();
```

### Options

If you want to preprocess arguments, use `options.preprocessArguments(name, ...args)`

```
@savable({
    preprocessArguments(name, ...args) {
        return ['arg1', 'arg2', 'arg3'];
    }
})
class Test {}
```

If you want to preprocess instance, use `options.preprocessInstance(instance, name, ...args)`

```
@savable({
    preprocessInstance(instance, name) {
        instance.name = name;
        return instance;
    }
})
class Test {}
```

If you want to set a default name, or want to map some names into one, use `options.defaultName` and `options.map`

```
@savable({
    defaultName: 'foo',
    map: {
        'bar': 'foo',
        'baz': 'foo',
    },
})
class Test {}
```

Notice that the default name is `undefined` and maps `null` to `undefined`.


[npm-image]: https://img.shields.io/npm/v/save-instance.svg?style=flat-square
[npm-url]: https://www.npmjs.com/package/save-instance
[travis-image]: https://img.shields.io/travis/viRingbells/save-instance/master.svg?style=flat-square
[travis-url]: https://travis-ci.org/viRingbells/save-instance
[coveralls-image]: https://img.shields.io/codecov/c/github/viRingbells/save-instance.svg?style=flat-square
[coveralls-url]: https://codecov.io/github/viRingbells/save-instance?branch=master

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