Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

apollo-declare

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

apollo-declare

The Ctrip's apollo client with pre-declared configuration keys

  • 1.0.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
122
increased by114.04%
Maintainers
1
Weekly downloads
 
Created
Source

Build Status Coverage

apollo-declare

ctrip-apollo(the Ctrip's apollo client) with pre-declared configuration keys.

Install

$ npm i apollo-declare

Usage

const declare = require('apollo-declare')

const host = 'http://localhost:8070'
const appId = '100004458'
const namespace = 'default'

declare({
  host, appId, namespace,
  keys: {
    // Define `SENTRY_HOST` as
    // the value of the configuration key `sentry.host`
    REDIS_HOST: 'redis.host'
  }
})
// Emits when the value of a config key changes
.on('change', e => {
  // Do something with `e`
})
.ready()
.then(client => {
  // Get value by key
  client.get('REDIS_HOST')

  // For each KV pair
  client.each((value, key) => {
    console.log(value, key)
    // output: 192.168.10.1 REDIS_HOST
  })
})

Declare two keys in different namespaces

declare({
  host, appId, namespace,
  keys: {
    // Equivalent to:
    // REDIS_HOST: {
    //   key: 'redis.host'
    // }
    REDIS_HOST: 'redis.host',

    SENTRY_HOST: {
      key: 'sentry.host',
      // Which override namespace `default` with `common` for SENTRY_HOST
      namespace: 'common'
    }
  }
})

Use the first available value among a config set

If we have two namespaces, 'default' and 'common'.

In namespace 'default', there is no config key named 'dynamodb.region'. While in namespace 'common', the value of 'dynamodb.region' is 'ap-northeast-10'.

// Inside a async function
const client = apollo({
  host, appId,
  namespace: 'default',
  keys: {
    DYNAMO_DB_HOST: [
      // The config key `dynamodb.region` in namespace `default`
      // has higher priority than the one in namespace `common`
      {
        key: 'dynamodb.region'
        // namespace: inherit from the default namespace
      },
      // If `dynamodb.region` is not defined in namespace `default`,
      // then common.dynamodb.region will be used
      {
        key: 'dynamodb.region',
        namespace: 'common'
      }
    ]
  }
})

await client.ready()

console.log(client.get('DYNAMO_DB_HOST'))
// ap-northeast-10

declare(options): ApolloClient

  • options DeclareOptions
interface DeclareOptions extends ApolloOptions {
  // The default cluster name which defaults to `default`
  cluster?: string
  // The default namespace name which defaults to `application`
  namespace?: string
  // The key declarations
  keys: {
    [string]: string  // config key
      | KeyDeclaration
      // Priority list
      | Array<string | KeyDeclaration>
  }
}

interface KeyDeclaration {
  key: string
  cluster?: string
  namespace?: string
}

ApolloOptions is the options of ctrip-apollo

Returns ApolloClient the apollo client. ApolloClient is a subclass of EventEmitter

await client.ready(): this

Prepare and finish the initial fetching.

All methods except for client.on(type, handler) should be called after await client.ready()

client.get(key): string

Get the value of config key

client.each(callback): void

  • callback Function(value: string, key: string)

Executes the provided function callback once for each defined key.

Event: 'change'

  • key string config key
  • newValue string the new value of the key
  • oldValue string the old value of the key

Emits when the value of a config key changes

client.on('change', ({
  key,
  newValue,
  oldValue
}) => {
  console.log(`key "${key}" changes: "${oldValue}" -> "${newValue}"`)

  // Update process.env
  process.env[key] = newValue
})

License

MIT

Keywords

FAQs

Package last updated on 28 Aug 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc