mirror of https://github.com/hashicorp/consul
127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
import { env } from 'consul-ui/env';
|
|
|
|
export function initialize(container) {
|
|
if (env('CONSUL_UI_DISABLE_REALTIME')) {
|
|
return;
|
|
}
|
|
['node', 'coordinate', 'session', 'service', 'proxy', 'discovery-chain', 'intention']
|
|
.concat(env('CONSUL_NSPACES_ENABLED') ? ['nspace/enabled'] : [])
|
|
.map(function(item) {
|
|
// create repositories that return a promise resolving to an EventSource
|
|
return {
|
|
service: `repository/${item}/event-source`,
|
|
extend: 'repository/type/event-source',
|
|
// Inject our original respository that is used by this class
|
|
// within the callable of the EventSource
|
|
services: {
|
|
content: `repository/${item}`,
|
|
},
|
|
};
|
|
})
|
|
.concat(
|
|
['dc', 'policy', 'role'].map(function(item) {
|
|
// create repositories that return a promise resolving to an EventSource
|
|
return {
|
|
service: `repository/${item}/component`,
|
|
extend: 'repository/type/component',
|
|
// Inject our original respository that is used by this class
|
|
// within the callable of the EventSource
|
|
services: {
|
|
content: `repository/${item}`,
|
|
},
|
|
};
|
|
})
|
|
)
|
|
.concat([
|
|
// These are the routes where we overwrite the 'default'
|
|
// repo service. Default repos are repos that return a promise resolving to
|
|
// an ember-data record or recordset
|
|
{
|
|
route: 'dc/nodes/index',
|
|
services: {
|
|
repo: 'repository/node/event-source',
|
|
},
|
|
},
|
|
{
|
|
route: 'dc/nodes/show',
|
|
services: {
|
|
repo: 'repository/node/event-source',
|
|
coordinateRepo: 'repository/coordinate/event-source',
|
|
sessionRepo: 'repository/session/event-source',
|
|
},
|
|
},
|
|
{
|
|
route: 'dc/services/index',
|
|
services: {
|
|
repo: 'repository/service/event-source',
|
|
},
|
|
},
|
|
{
|
|
route: 'dc/services/show',
|
|
services: {
|
|
repo: 'repository/service/event-source',
|
|
chainRepo: 'repository/discovery-chain/event-source',
|
|
intentionRepo: 'repository/intention/event-source',
|
|
},
|
|
},
|
|
{
|
|
route: 'dc/services/instance',
|
|
services: {
|
|
repo: 'repository/service/event-source',
|
|
proxyRepo: 'repository/proxy/event-source',
|
|
},
|
|
},
|
|
{
|
|
route: 'dc/intentions/index',
|
|
services: {
|
|
repo: 'repository/intention/event-source',
|
|
},
|
|
},
|
|
{
|
|
service: 'form',
|
|
services: {
|
|
role: 'repository/role/component',
|
|
policy: 'repository/policy/component',
|
|
},
|
|
},
|
|
])
|
|
.concat(
|
|
env('CONSUL_NSPACES_ENABLED')
|
|
? [
|
|
{
|
|
route: 'dc/nspaces/index',
|
|
services: {
|
|
repo: 'repository/nspace/enabled/event-source',
|
|
},
|
|
},
|
|
]
|
|
: []
|
|
)
|
|
.forEach(function(definition) {
|
|
if (typeof definition.extend !== 'undefined') {
|
|
// Create the class instances that we need
|
|
container.register(
|
|
`service:${definition.service}`,
|
|
container.resolveRegistration(`service:${definition.extend}`).extend({})
|
|
);
|
|
}
|
|
Object.keys(definition.services).forEach(function(name) {
|
|
const servicePath = definition.services[name];
|
|
// inject its dependencies, this could probably detect the type
|
|
// but hardcode this for the moment
|
|
if (typeof definition.route !== 'undefined') {
|
|
container.inject(`route:${definition.route}`, name, `service:${servicePath}`);
|
|
if (env('CONSUL_NSPACES_ENABLED') && definition.route.startsWith('dc/')) {
|
|
container.inject(`route:nspace/${definition.route}`, name, `service:${servicePath}`);
|
|
}
|
|
} else {
|
|
container.inject(`service:${definition.service}`, name, `service:${servicePath}`);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export default {
|
|
initialize,
|
|
};
|