pailingual-odata
Version:
TypeScript client for OData v4 services
98 lines (97 loc) • 4.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var query_1 = require("./query");
var collectionSource_1 = require("./collectionSource");
var singleSource_1 = require("./singleSource");
var executable_1 = require("./executable");
function expandExpressionBuild(propertyName, expression, apiMetadata, entityType, options) {
var navPropMD = entityType.navProperties[propertyName];
if (navPropMD == null)
throw new Error("Expand support navigation properties only");
var propType = navPropMD.type;
var q = query_1.Query.create(apiMetadata, propType, options);
var sourceFactory = function () { return navPropMD.collection
? new collectionSource_1.CollectionSource(propType, apiMetadata, q)
: new singleSource_1.SingleSource(propType, apiMetadata, q); };
var params = buildQueryParamsExpression(expression, sourceFactory, options, ";");
if (params)
return propertyName + "(" + params + ")";
return propertyName;
}
exports.expandExpressionBuild = expandExpressionBuild;
function buildPathExpression(func, metadata, apiMetadata) {
var entity = new singleSource_1.SingleSource(metadata, apiMetadata, query_1.Query.create(null, metadata, undefined));
entity = func(entity);
var path = entity.query.url(false);
if (startsWith(path, "/"))
return path.substr(1);
return path;
}
exports.buildPathExpression = buildPathExpression;
function buildQueryParamsExpression(func, sourceFactory, options, separator) {
if (separator === void 0) { separator = ","; }
var entity = sourceFactory();
entity = func(entity);
return entity.query.buildParams(options, separator);
}
exports.buildQueryParamsExpression = buildQueryParamsExpression;
function generateOperations(obj, queryAccessor, apiMetadata, entityType, isCollection) {
if (isCollection === void 0) { isCollection = false; }
for (var ns in apiMetadata.namespaces) {
var _loop_1 = function (metadata) {
if ((metadata.bindingTo == undefined && entityType == undefined) //unbounded
|| (metadata.bindingTo
&& (metadata.bindingTo.collection || false) == isCollection
&& metadata.bindingTo.type == entityType)) {
Object.defineProperty(obj, metadata.name, {
get: function () {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var query = queryAccessor().operation(metadata, args);
if (metadata.returnType && metadata.returnType.collection)
return new collectionSource_1.CollectionSource(metadata.returnType.type, apiMetadata, query);
return new executable_1.Executable(query);
};
}
});
}
};
for (var _i = 0, _a = apiMetadata.namespaces[ns].operations; _i < _a.length; _i++) {
var metadata = _a[_i];
_loop_1(metadata);
}
}
}
exports.generateOperations = generateOperations;
function startsWith(str, search, position) {
if (position === void 0) { position = 0; }
return str.indexOf(search, position) == position;
}
exports.startsWith = startsWith;
function endsWith(subjectString, search, position) {
if (position === undefined || position > subjectString.length) {
position = subjectString.length;
}
position -= search.length;
var lastIndex = subjectString.indexOf(search, position);
return lastIndex !== -1 && lastIndex === position;
}
exports.endsWith = endsWith;
function _extends(ctor, funcs) {
if (funcs) {
var _loop_2 = function () {
var base = ctor.prototype[name];
var func = funcs[name];
ctor.prototype[name] = function () {
return func.apply(this, [base && base.bind(this)].concat(Array.from(arguments)));
};
};
for (var name in funcs) {
_loop_2();
}
}
}
exports._extends = _extends;