# @linaframework/arango

> Lina - modular, all in one, modern, fast, powerful node.js web framework (@arango)

Latest version **0.0.3-alpha** (published 2018-09-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install @linaframework/arango
pnpm add @linaframework/arango
yarn add @linaframework/arango
bun add @linaframework/arango
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3-alpha |
| Published | 2018-09-26 |
| First published | 2018-09-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 29.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Rex Raphael |
| Maintainers | juicycleff |
| Keywords | lina, framework, lina, expressjs, chat, saas, ecommerce, auth, fingerprint, graphql |

## Links

- npm: https://www.npmjs.com/package/@linaframework/arango
- Repository: https://github.com/awesome-graphql-space/arango
- Homepage: https://github.com/awesome-graphql-space/arango#readme
- Issues: https://github.com/awesome-graphql-space/arango/issues
- npm.io page: https://npm.io/package/@linaframework/arango

## Dependencies (4)

- [arangojs](https://npm.io/package/arangojs.md) ^6.6.0
- [final-orm](https://npm.io/package/final-orm.md) ^1.0.0-alpha.13
- [elasticsearch](https://npm.io/package/elasticsearch.md) ^15.0.0
- [@types/elasticsearch](https://npm.io/package/@types/elasticsearch.md) ^5.0.24

## Alternatives

- [@clerk/clerk-expo](https://npm.io/package/@clerk/clerk-expo.md) — 133.6K weekly downloads
- [@pothos/plugin-authz](https://npm.io/package/@pothos/plugin-authz.md) — 12.4K weekly downloads
- [@bounded-sh/client](https://npm.io/package/@bounded-sh/client.md) — 3.2K weekly downloads
- [@luigi-project/plugin-auth-oauth2](https://npm.io/package/@luigi-project/plugin-auth-oauth2.md) — 2.3K weekly downloads
- [@nocobase/plugin-verification](https://npm.io/package/@nocobase/plugin-verification.md) — 2.0K weekly downloads

## Recent versions

- 0.0.3-alpha (latest) — 2018-09-26

## README

<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://awesomeql.com/img/lina_logo_text.svg" width="320" alt="Lina Logo" /></a>
</p>

[travis-image]: https://api.travis-ci.org/awesome-graphql-space/lina.svg?branch=master
[travis-url]: https://travis-ci.org/awesome-graphql-space/nest
[linux-image]: https://img.shields.io/travis/nestjs/awesome-graphql-space/lina.svg?label=linux
[linux-url]: https://travis-ci.org/awesome-graphql-space/lina

  <p align="center">An easy, highly extensible, full app progressive <a href="http://nodejs.org" target="blank">Node.js</a> framework for building efficient and scalable server-side applications, in Graphql</p>
    <p align="center">


## Description

ArangoDb module for [Lina](https://github.com/awesome-graphql-space/lina) based on the official [arangojs](https://www.npmjs.com/package/arangojs) package.

## Installation

```bash
$ npm i --save @lina/arango
```

## Usage

Import `ArangoDbModule`:

```typescript
@Module({
  imports: [ArangoDbModule.register({ 
    database: 'test', // db name
    // You can initialize the database using just a url.
    url: 'http://root:@localhost:8529',
    // Or supply each of these values. You do not need both.
    host: 'localhost',
    port: '8529',
    username: 'root',
    password: '',
    // You can also supply a protocol. If localhost, it's `http` by default, otherwise `https`
    protocol: 'tcp'
  })],
  providers: [...],
})
export class UserModule {}
```

Inject `UserService`:

```typescript
@Injectable()
export class UserService {
  constructor(private readonly arangoDbService: ArangoDbService) {}
}
```


## Async options

Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use `registerAsync()` method, that provides a couple of various ways to deal with async data.

**1. Use factory**
```typescript
ArangoDbModule.registerAsync({
  useFactory: () => ({
    database: 'test',
    url: 'http://root:@localhost:8529',
    host: 'localhost',
    port: '8529',
    username: 'root',
    password: '',
    protocol: 'tcp'
  }),
})
```
Obviously, our factory behaves like every other one (might be `async` and is able to inject dependencies through `inject`).

```typescript
ArangoDbModule.registerAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    database: configService.getString('ARANGO_DATABASE_NAME'),
    // You can initialize the database using just a url.
    url: configService.getString('ARANGO_HOST_URL'),,
    // Or supply each of these values. You do not need both.
    host: configService.getString('ARANGO_HOST'),,
    port: configService.getString('ARANGO_PORT'),,
    username: configService.getString('ARANGO_USERNAME'),,
    password: configService.getString('ARANGO_PASSWORD'),,
    // You can also supply a protocol. If localhost, it's `http` by default, otherwise `https`
    protocol: configService.getString('ARANGO_PROTOCOL'),
  }),
  inject: [ConfigService],
}),
```

**2. Use class**
```typescript
ArangoDbModule.registerAsync({
  useClass: ArangoDbConfigService,
})
```
Above construction will instantiate `ArangoDbConfigService` inside `ArangoDbModule` and will leverage it to create options object.
```typescript
class ArangoDbConfigService implements ArangoDbOptionsFactory {
  createElasticsearchOptions(): ArangoDbModuleOptions {
    return {
      database: 'test',
      url: 'http://root:@localhost:8529',
      host: 'localhost',
      port: '8529',
      username: 'root',
      password: '',
      protocol: 'tcp'
    };
  }
}
```

**3. Use existing**
```typescript
ArangoDbModule.registerAsync({
  imports: [ConfigModule],
  useExisting: ConfigService,
}),
```
It works the same as `useClass` with one critical difference - `ArangoDbModule` will lookup imported modules to reuse already created `ConfigService`, instead of instantiating it on its own.

## API Spec

The `ArangoDbService` exposes native [Arango](https://www.npmjs.com/package/arangojs) methods and wraps them in the Observable, [read more](https://github.com/arangodb/arangojs/blob/master/docs/Drivers/JS/Reference/Database/README.md). The `ArangoDbModule.register()` takes `options` object as an argument, [read more](https://github.com/arangodb/arangojs/blob/master/docs/Drivers/JS/Reference/Database/README.md).

## Support

Lina is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.awesomegql.com/support).

## Stay in touch

* Website - [https://awesomegql.com](https://awesomegql.com/)
* Twitter - [@linaframework](https://twitter.com/nestframework)

## License

Awesome-Graphql-Space is [MIT licensed](LICENSE).

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