@sap-cloud-sdk/connectivity
Version:
SAP Cloud SDK for JavaScript connectivity
111 lines • 4.45 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.getServiceBindings = getServiceBindings;
exports.getServiceBinding = getServiceBinding;
exports.resolveServiceBinding = resolveServiceBinding;
exports.getServiceBindingByInstanceName = getServiceBindingByInstanceName;
const util_1 = require("@sap-cloud-sdk/util");
const xsenv = __importStar(require("@sap/xsenv"));
const logger = (0, util_1.createLogger)({
package: 'connectivity',
messageContext: 'environment-accessor'
});
/**
* Services getter for a given service.
* @param service - Service name.
* @returns List of service bindings of the given type. Returns an empty array if no service binding exists for the given type.
* @internal
*/
function getServiceBindings(service) {
return xsenv.filterServices({ label: service });
}
/**
* Returns the first found instance for the given service type.
* Internally uses xsenv library to read configurations from VCAP_SERVICES.
* @param service - The service type.
* @returns The first found service.
*/
function getServiceBinding(service) {
const services = xsenv.filterServices({ label: service });
if (!services.length) {
logger.warn(`Could not find service binding of type '${service}'. This might cause errors in other parts of the application.`);
}
else if (services.length > 1) {
logger.warn(`Found more than one service binding for service type '${service}':${services
.map(({ name }) => `\n\t- ${name}`)
.join('')}\nSelecting the first one.`);
}
return services[0];
}
/**
* Takes a string that represents the service type and resolves it by calling {@link getServiceBinding}.
* If the parameter is already an instance of {@link Service}, it is returned directly.
*
* Throws an error when no service can be found for the given type.
* @param service - A string representing the service type or a {@link Service} instance.
* @returns A {@link Service} instance.
* @internal
*/
function resolveServiceBinding(service) {
if (typeof service === 'string') {
const serviceInstance = getServiceBinding(service);
if (!serviceInstance) {
throw Error(`Could not find service binding of type '${service}'.`);
}
return serviceInstance;
}
return service;
}
/**
* Filters services based on service instance name.
*
* Throws an error if no or multiple services exist.
* @param serviceInstanceName - A string representing the service instance name.
* @returns A {@link Service} instance.
* @internal
*/
function getServiceBindingByInstanceName(serviceInstanceName) {
const service = xsenv.filterServices(serviceInstanceName);
if (!service.length) {
throw Error(`Could not find service with name: '${serviceInstanceName}'.`);
}
// This never happens as xsenv always takes the last matching binding
if (service.length > 1) {
throw Error(`Found multiple services with name: '${serviceInstanceName}'.`);
}
return service[0];
}
//# sourceMappingURL=service-bindings.js.map