@sap_oss/odata-library
Version:
OData client for testing Netweawer OData services.
82 lines (71 loc) • 2.37 kB
JavaScript
"use strict";
const _ = require("lodash");
function defineProperty(element, prop, value) {
Object.defineProperty(element, prop, {
get: () => value,
});
}
function defineOptionalNumber(element, prop) {
let value = _.has(element.raw.$, prop)
? Number(element.raw.$[prop])
: undefined;
defineProperty(element, _.lowerFirst(prop), value);
}
/**
* Envelops an function import parameter.
*
* There are substantial differences between MC-CSLD and OASIS-CSDL. SAP implementation follows MS-CSDL.
* OASIS-CSDL doesn't have function import parameters, it has action and function parameters (~ model function parameters).
*
* https://docs.microsoft.com/en-us/openspecs/windows_protocols/mc-csdl/2d7f0f3e-1333-4309-8194-a0148a9c946c
*
* @class FunctionImportParameter
*/
class FunctionImportParameter {
/**
* Creates an instance of FunctionImportParameter.
* @param {Object} rawMetadata raw metadata object for the function import
* @param {CsdlSchema} schema to resolve model references
* @memberof FunctionImportParameter
*/
constructor(rawMetadata, schema) {
let mode = rawMetadata.$.Mode;
defineProperty(this, "raw", rawMetadata);
defineProperty(this, "name", rawMetadata.$.Name);
defineProperty(this, "type", schema.getType(rawMetadata.$.Type));
defineOptionalNumber(this, "MaxLength");
defineProperty(this, "nullable", rawMetadata.$.Nullable !== "false");
defineOptionalNumber(this, "Precision");
defineOptionalNumber(this, "Scale");
if (!["In", "Out", "InOut"].includes(mode)) {
if (schema.settings.strict !== false) {
throw new Error(
`Unknown mode '${this.mode} for function import parameter '${this.name}`
);
} else {
mode = "In";
}
}
defineProperty(this, "mode", mode);
let extensions = [];
defineProperty(this, "extensions", extensions);
}
/**
* Gets legacy api object. (XML casing, maybe some other changes.)
*
* @returns {Object} legacy api object
* @memberof FunctionImport
*/
getLegacyApiObject() {
return {
MaxLength: this.maxLength,
Mode: this.mode,
Name: this.name,
Nullable: this.nullable,
Precision: this.precision,
Scale: this.scale,
Type: this.type.namespaceQualifiedName,
};
}
}
module.exports = FunctionImportParameter;