pluie-bin/dist/pluie-bin.js

230 lines
7.9 KiB
JavaScript
Raw Normal View History

2016-12-18 13:44:45 +00:00
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2016-12-18 22:50:34 +00:00
if (typeof pluie == 'undefined') {
pluie = { bin : {}};
}
require('./lib/bin')(pluie.bin);
module.exports = pluie;
2016-12-18 13:44:45 +00:00
},{"./lib/bin":2}],2:[function(require,module,exports){
'use strict';
2016-12-18 22:50:34 +00:00
module.exports = function (ns) {
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
String.prototype.removeEndNullBytes = function() {
return this.replace(/\0+$/g, '');
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
String.prototype.removeStartNullBytes = function() {
return this.replace(/^\0+/g, '');
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ns.enc = new TextEncoder("utf-8");
ns.dec = new TextDecoder("utf-8", {fatal: true});
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ns.intFromBytes = function(bytes)
2016-12-18 13:44:45 +00:00
{
var value = null;
if (bytes!=null && bytes.length > 0) {
// Big Endian
for (var i = value = 0, lim = bytes.length; i < lim; i++) {
value = value * 256 + bytes[i];
}
}
return value;
2016-12-18 22:50:34 +00:00
};
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.bytesFromInt = function(value, size)
2016-12-18 13:44:45 +00:00
{
var bytes = new Uint8Array(size);
while (value) {
bytes.set([value & 255], --size);
value >>= 8;
}
return bytes;
2016-12-18 22:50:34 +00:00
};
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.pack = function(size, type, value)
2016-12-18 13:44:45 +00:00
{
var packed = null
if (type == 'n' || type == 'N') {
// js int max on 32 signed bits
if (value >= 0 && value <= 2147483647) {
packed = this.bytesFromInt(value, type == 'n' ? 2 : 4);
}
}
else if (type == 'a') {
packed = new Uint8Array(size);
packed.set(this.enc.encode(value), 0);
}
return packed;
2016-12-18 22:50:34 +00:00
};
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.unpack = function(size, type, bytes)
2016-12-18 13:44:45 +00:00
{
var unpacked = null
if (type == 'n' || type == 'N') {
var selByte = bytes.slice(0, size*(type == 'n' ? 2 : 4));
unpacked = this.intFromBytes(selByte);
}
else if (type == 'a') {
unpacked = this.dec.decode(bytes.slice(0, size)).removeEndNullBytes();
}
return unpacked;
2016-12-18 22:50:34 +00:00
};
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.mergeBuffers = function(bufferArray)
2016-12-18 13:44:45 +00:00
{
var maxLength = 0;
for(var i=0, lim=bufferArray.length; i < lim; i++) {
if (bufferArray[i] != null) {
maxLength += bufferArray[i].byteLength;
}
}
var tmp = new Uint8Array(maxLength);
for(var i=0, pos = 0, lim=bufferArray.length; i < lim; i++) {
if (bufferArray[i] != null) {
tmp.set(new Uint8Array(bufferArray[i]), pos);
pos += bufferArray[i].byteLength;
}
}
return tmp;
2016-12-18 22:50:34 +00:00
};
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.getBuffer = function(array, size)
2016-12-18 13:44:45 +00:00
{
var buffer = new Uint8Array(!size ? array.length : size);
buffer.set(new Uint8Array(array), 0);
return buffer;
2016-12-18 22:50:34 +00:00
};
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
require('./file')(ns);
return ns;
2016-12-18 13:44:45 +00:00
}
},{"./file":3}],3:[function(require,module,exports){
2016-12-18 22:50:34 +00:00
'use strict';
module.exports = function (ns) {
require('./header')(ns);
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.File = function(binary, header) {
2016-12-18 13:44:45 +00:00
this.header = header;
this.binary = binary;
this.extractProperties = function(binary) {
if (!binary) binary = this.binary;
if (binary != null && binary.length >= this.header.def.length) {
this.header.def.map.forEach (function(prop) {
var bytes = binary.slice(prop.offset, prop.offset+prop.length);
2016-12-18 22:50:34 +00:00
var unpacked = ns.unpack(prop.size, prop.type, bytes);
2016-12-18 13:44:45 +00:00
prop.value = unpacked;
});
}
};
this.buildProperties = function(properties) {
var data = [];
this.header.buildProperties(properties);
this.header.def.map.forEach (function(prop) {
2016-12-18 22:50:34 +00:00
var packed = ns.pack(prop.size, prop.type, prop.value);
2016-12-18 13:44:45 +00:00
data.push(packed);
});
2016-12-18 22:50:34 +00:00
data = ns.mergeBuffers(data);
2016-12-18 13:44:45 +00:00
};
this.extractProperties(binary);
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.smpFile = function(binary) {
return new ns.File(binary, new ns.Header([
2016-12-18 13:44:45 +00:00
['signature', 'a', 9, '∢SMP0.2'],
['size' , 'N', 1, ''],
['id' , 'N', 1, ''],
['from' , 'a', 32, ''],
['to' , 'a', 32, ''],
['channel' , 'a', 32, ''],
['command' , 'n', 1, ''],
['index' , 'n', 1, ''],
['split' , 'n', 1, '']
]));
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.smpsFile = function(binary) {
return new ns.File(binary, new ns.Header([
2016-12-18 13:44:45 +00:00
['signature', 'a', 13, 'ﷸSMPS0.2∢'],
['size' , 'N', 1, ''],
['nonce' , 'a', 12, ''],
['cypher' , 'a', 135, '']
]));
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.smpaFile = function(binary) {
return new ns.BaseFile(binary, new ns.Header([
2016-12-18 13:44:45 +00:00
['signature', 'a', 13, 'ﷸSMPA0.2∢'],
['size' , 'N', 1, ''],
['nonce' , 'a', 24, ''],
['cypher' , 'a', 199, '']
]));
}
}
},{"./header":4}],4:[function(require,module,exports){
'use strict';
2016-12-18 22:50:34 +00:00
module.exports = function (ns) {
2016-12-18 13:44:45 +00:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var HeaderProperty = function(name, type, size, defaultValue)
{
this.name = name;
this.type = type;
this.size = size;
this.length = type == 'N' ? size*4 : (type == 'n' ? size*2 : size );
this.value = defaultValue;
};
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var HeaderDef = function(mapData)
{
var map = [];
mapData.forEach(function (def) {
map.push(new HeaderProperty(def[0], def[1], def[2], def[3]));
});
this.map = map;
var keys = [];
var indexes = {};
var offset = 0;
var index = 0;
this.map.forEach(function(prop) {
prop.offset = offset;
keys[keys.length] = prop.name;
offset += prop.length;
indexes[prop.name] = index++;
});
this.indexes = indexes;
this.keys = keys;
this.length = offset;
this.getProperty = function(key) {
return this.map[this.indexes[key]];
}
};
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-12-18 22:50:34 +00:00
ns.Header = function(def) {
2016-12-18 13:44:45 +00:00
this.def = new HeaderDef(def);
this.value = function(key) {
return this.def.getProperty(key).value;
};
this.buildProperties = function(properties) {
this.def.map.forEach(function(prop) {
if (prop.name != 'signature') {
if (typeof properties[prop.name] != 'undefined') {
prop.value = properties[prop.name];
}
}
});
};
}
}
},{}]},{},[1]);