forked from cerc-io/laconic-console
Use Moustache to create template and set config in page. Use babel plugins to process GQL (and fix GQL queries). Added service type.
41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
//
|
|
// Copyright 2020 DxOS.org
|
|
//
|
|
|
|
import assert from 'assert';
|
|
import buildUrl from 'build-url';
|
|
import get from 'lodash.get';
|
|
|
|
/**
|
|
* Returns the service URL that can be used by the client.
|
|
* @param {Object} config
|
|
* @param {string} service
|
|
* @param {Object} [options]
|
|
* @param {string} [options.path]
|
|
* @param {boolean} [options.absolute]
|
|
* @returns {string|*}
|
|
*/
|
|
export const getServiceUrl = (config, service, options = {}) => {
|
|
const { path, absolute = false } = options;
|
|
const { routes, services } = config;
|
|
|
|
const appendPath = (url) => buildUrl(url, { path });
|
|
|
|
// Relative route.
|
|
const routePath = get(routes, service);
|
|
if (routePath) {
|
|
if (absolute) {
|
|
assert(typeof window !== 'undefined');
|
|
return buildUrl(window.location.origin, { path: appendPath(routePath) });
|
|
}
|
|
|
|
// Relative.
|
|
return appendPath(routePath);
|
|
}
|
|
|
|
// Absolute service path.
|
|
const serviceUrl = get(services, service);
|
|
assert(serviceUrl, `Invalid service definition: ${service}`);
|
|
return appendPath(serviceUrl);
|
|
};
|