apollo-declare
v1.0.2
Published
The Ctrip's apollo client with pre-declared configuration keys
Downloads
301
Maintainers
Readme
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
})