pailingual-odata
Version:
TypeScript client for OData v4 services
94 lines • 4.58 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./query", "./collectionSource", "./singleSource", "./executable"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const query_1 = require("./query");
const collectionSource_1 = require("./collectionSource");
const singleSource_1 = require("./singleSource");
const executable_1 = require("./executable");
function expandExpressionBuild(propertyName, expression, apiMetadata, entityType, options) {
let navPropMD = entityType.navProperties[propertyName];
if (navPropMD == null)
throw new Error("Expand support navigation properties only");
const propType = navPropMD.type;
const q = query_1.Query.create(apiMetadata, propType, options);
let sourceFactory = () => navPropMD.collection
? new collectionSource_1.CollectionSource(propType, apiMetadata, q)
: new singleSource_1.SingleSource(propType, apiMetadata, q);
let 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 = ",") {
let entity = sourceFactory();
entity = func(entity);
return entity.query.buildParams(options, separator);
}
exports.buildQueryParamsExpression = buildQueryParamsExpression;
function generateOperations(obj, queryAccessor, apiMetadata, entityType, isCollection = false) {
for (let ns in apiMetadata.namespaces) {
for (let metadata of apiMetadata.namespaces[ns].operations) {
if ((metadata.bindingTo == undefined && entityType == undefined) //unbounded
|| (metadata.bindingTo
&& (metadata.bindingTo.collection || false) == isCollection
&& metadata.bindingTo.type == entityType)) {
Object.defineProperty(obj, metadata.name, {
get: () => {
return (...args) => {
let 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);
};
}
});
}
}
}
}
exports.generateOperations = generateOperations;
function startsWith(str, search, 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) {
for (var name in funcs) {
let base = ctor.prototype[name];
let func = funcs[name];
ctor.prototype[name] = function () {
return func.apply(this, [base && base.bind(this)].concat(Array.from(arguments)));
};
}
}
}
exports._extends = _extends;
});
//# sourceMappingURL=utils.js.map