service-model
Version:
An object oriented web service framework inspired by Windows Communication Foundation.
51 lines (50 loc) • 1.95 kB
JavaScript
var versionMessageFilter_1 = require("../dispatcher/versionMessageFilter");
var versionMessageInspector_1 = require("../dispatcher/versionMessageInspector");
/**
* Contract and endpoint behavior that allows an endpoint to be selected by version number as specified by the client.
* The version of the contract must be provided in [semver](http://semver.org/) format. The behavior can be applied to
* a contract using the [[Versioning]] decorator or to a specific endpoint by adding an instance of VersioningBehavior
* to the list of behaviors for the endpoint.
*
* <uml>
* hide members
* hide circle
* ContractBehavior <|.. VersioningBehavior
* EndpointBehavior <|.. VersioningBehavior
* </uml>
*
* ### Example
*
* ```typescript
* @Contract("Calculator")
* @Versioning({ version: "1.0.0" })
* export class CalculatorService {
* ...
* }
* ```
*/
var VersioningBehavior = (function () {
/**
* Constructs a VersioningBehavior object.
* @param options Options for the behvaior.
*/
function VersioningBehavior(options) {
if (!options) {
throw new Error("Missing required argument 'options'.");
}
if (!options.version) {
throw new Error("Missing required argument 'options.version'.");
}
this.version = options.version;
this.contract = options.contract;
}
VersioningBehavior.prototype.applyContractBehavior = function (description, endpoint) {
endpoint.filter = new versionMessageFilter_1.VersionMessageFilter(this.version).and(endpoint.filter);
endpoint.messageInspectors.push(new versionMessageInspector_1.VersionMessageInspector());
};
VersioningBehavior.prototype.applyEndpointBehavior = function (description, endpoint) {
this.applyContractBehavior(description.contract, endpoint);
};
return VersioningBehavior;
})();
exports.VersioningBehavior = VersioningBehavior;