UNPKG

pailingual-odata

Version:

TypeScript client for OData v4 services

94 lines 4.58 kB
(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