@chix/flow
Version:
84 lines • 3.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var forOf = require("object-forof");
var packet_1 = require("./packet");
var reserved = ['isPacket', 'get', 'read', 'write', 'create', 'clone'];
var PacketContainer = (function () {
function PacketContainer(params) {
var _this = this;
if (params === void 0) { params = {}; }
this._meta = {};
this.params = params;
forOf(function (name, packet) {
if (!packet_1.Packet.isPacket(packet)) {
throw Error("Packet expected got " + typeof packet + " for param " + name);
}
if (reserved.indexOf(name) === -1) {
Object.defineProperty(_this, name, {
enumerable: true,
get: function () {
return packet.read(packet.owner);
},
set: function (val) {
packet.write(packet.owner, val);
},
});
packet_1.Packet.metaMerge(_this._meta, packet._meta);
}
else {
throw Error("Parameter name '" + name + "' not allowed");
}
}, this.params);
forOf(function (_name, p) {
Object.assign(p._meta, _this._meta);
}, this.params);
}
PacketContainer.create = function (params) {
return new PacketContainer(params);
};
PacketContainer.prototype.isPacket = function (packet) {
return packet_1.Packet.isPacket(packet);
};
PacketContainer.prototype.get = function (name) {
return this.params[name];
};
PacketContainer.prototype.clone = function (name, value) {
this.hasParamOrThrow(name);
var packet = this.params[name];
var packetClone = packet.clone(packet.owner);
if (packet === packetClone) {
throw Error('Failed to clone packet.');
}
if (value) {
packetClone.write(packet.owner, value);
}
return packetClone;
};
PacketContainer.prototype.read = function (name) {
this.hasParamOrThrow(name);
var packet = this.params[name];
return packet.read(packet.owner);
};
PacketContainer.prototype.write = function (name, val) {
this.hasParamOrThrow(name);
var packet = this.params[name];
return packet.write(packet.owner, val);
};
PacketContainer.prototype.hasParam = function (name) {
return !!this.params[name];
};
PacketContainer.prototype.hasParamOrThrow = function (name) {
if (this.hasParam(name)) {
return true;
}
throw Error(name + " does not exist.");
};
PacketContainer.prototype.create = function (value, type) {
var p = packet_1.Packet.create(value, type);
Object.assign(p._meta, this._meta);
return p;
};
return PacketContainer;
}());
exports.PacketContainer = PacketContainer;
//# sourceMappingURL=packetContainer.js.map