sdk-javascript/lib/cloudevent.js

128 lines
2.6 KiB
JavaScript

const Spec = require("./specs/spec_1.js");
const Formatter = require("./formats/json/formatter.js");
/*
* Class created using the Builder Design Pattern.
*
* https://en.wikipedia.org/wiki/Builder_pattern
*/
function Cloudevent(_spec, _formatter) {
this.spec = (_spec) ? new _spec(Cloudevent) : new Spec(Cloudevent);
this.formatter = (_formatter) ? new _formatter() : new Formatter();
// The map of extensions
this.extensions = {};
}
/*
* To format the payload using the formatter
*/
Cloudevent.prototype.format = function() {
// Check the constraints
this.spec.check();
// To run asData()
this.getData();
// Then, format
return this.formatter.format(this.spec.payload);
};
Cloudevent.prototype.toString = function() {
return this.formatter.toString(this.spec.payload);
};
Cloudevent.prototype.type = function(type) {
this.spec.type(type);
return this;
};
Cloudevent.prototype.getType = function() {
return this.spec.getType();
};
Cloudevent.prototype.specversion = function(version) {
return this.spec.specversion(version);
};
Cloudevent.prototype.getSpecversion = function() {
return this.spec.getSpecversion();
};
Cloudevent.prototype.source = function(_source) {
this.spec.source(_source);
return this;
};
Cloudevent.prototype.getSource = function() {
return this.spec.getSource();
};
Cloudevent.prototype.id = function(_id) {
this.spec.id(_id);
return this;
};
Cloudevent.prototype.getId = function() {
return this.spec.getId();
};
Cloudevent.prototype.time = function(_time) {
this.spec.time(_time);
return this;
};
Cloudevent.prototype.getTime = function() {
return this.spec.getTime();
};
Cloudevent.prototype.schemaurl = function(_schemaurl) {
this.spec.schemaurl(_schemaurl);
return this;
};
Cloudevent.prototype.getSchemaurl = function() {
return this.spec.getSchemaurl();
};
Cloudevent.prototype.dataContenttype = function(_contenttype) {
this.spec.dataContenttype(_contenttype);
return this;
};
Cloudevent.prototype.getDataContenttype = function() {
return this.spec.getDataContenttype();
};
Cloudevent.prototype.data = function(_data) {
this.spec.data(_data);
return this;
};
Cloudevent.prototype.getData = function() {
return this.spec.getData();
};
Cloudevent.prototype.addExtension = function(key, value) {
this.spec.addExtension(key, value);
// Stores localy
this.extensions[key] = value;
return this;
};
Cloudevent.prototype.getExtensions = function() {
return this.extensions;
};
/*
* Export the formats
*/
Cloudevent.formats = {
json: Formatter,
"json0.1": Formatter
};
module.exports = Cloudevent;