Firebase Update

This commit is contained in:
Lukas Nowy
2018-12-22 23:30:39 +01:00
parent befb44764d
commit acffe619b3
11523 changed files with 1614327 additions and 930246 deletions

View File

@ -1,2 +0,0 @@
benchmark/versions/
node_modules

View File

@ -1,4 +1,7 @@
language: node_js
node_js:
- 0.8
- 0.9
- 4
- 6
- 8
- 10
- 11

View File

@ -1,86 +0,0 @@
var fs = require('fs');
var path = require('path');
var bench = require('bench');
var async = require('async');
var rmdir = require('rmdir');
var ok = require('okay');
var cloned = require('cloned');
cloned.workingDir = __dirname + '/versions';
exports.compare = {
'math': function() {
var two = 1 + 1;
},
'another': function() {
var yay = 2 + 2;
}
};
var clone = function(rev, cb) {
var outputDir = path.join(cloned.workingDir, rev);
console.log(outputDir)
if(fs.existsSync(outputDir)) {
return cb(null, {
rev: rev,
dir: outputDir
});
}
console.log('cloning version ' + rev);
cloned(rev, ok(cb, function(dir) {
console.log('cloned version ' + rev + ' to ' + dir);
cb(null, {
rev: rev,
dir: dir
});
}));
};
var versions = [
'ef599d3'
];
var scripts = fs.readdirSync(__dirname).filter(function(x) {
return x.indexOf('benchmark') > 0;
});
if(process.argv[2]) {
scripts = [process.argv[2]]
}
var run = function() {
async.map(versions, clone, function(err, results) {
if(err) throw err;
exports.compare = { };
var suites = [];
scripts.forEach(function(script) {
for(var i = 0; i < results.length; i++) {
var result = results[i];
var benchPath = path.join(result.dir, 'benchmark', script);
var suite = {};
suites.push(suite);
if(fs.existsSync(benchPath)) {
var bench = require(benchPath);
suite[script + '@' + result.rev] = bench;
} else {
console.log('%s missing at revision %s', benchPath, result.rev);
}
}
suite[script + '@HEAD'] = require(__dirname + '/' + script);
});
var compare = function(suite, cb) {
console.log('running...')
bench.compare(suite, null, null, null, function(err, data) {
if(err) return cb(err);
bench.show(data);
cb(null);
});
}
async.eachSeries(suites, compare, function(err, res) {
console.log('all suites done')
})
});
};
run();

View File

@ -1,31 +0,0 @@
var Writer = require(__dirname + '/../');
module.exports = function() {
var writer = new Writer();
writer.addInt16(-100000000);
writer.addInt16(-1000);
writer.addInt16(-1);
writer.addInt16(0);
writer.addInt16(1);
writer.addInt16(1000);
writer.addInt16(1000000000);
writer.addInt16(-100000000);
writer.addInt16(-100000000);
writer.addInt16(-1000);
writer.addInt16(-1);
writer.addInt16(0);
writer.addInt16(1);
writer.addInt16(1000);
writer.addInt16(1000000000);
writer.addInt16(-1000);
writer.addInt16(-1);
writer.addInt16(0);
writer.addInt16(1);
writer.addInt16(1000);
writer.addInt16(1000000000);
};
if(!module.parent) {
module.exports();
console.log('benchmark ok');
}

View File

@ -1,17 +0,0 @@
var Writer = require(__dirname + '/../');
module.exports = function() {
var writer = new Writer();
writer.addInt32(-10000000000000);
writer.addInt32(-1000);
writer.addInt32(-1);
writer.addInt32(0);
writer.addInt32(1);
writer.addInt32(1000);
writer.addInt32(10000000000000);
};
if(!module.parent) {
module.exports();
console.log('benchmark ok');
}

View File

@ -1,16 +0,0 @@
var Writer = require(__dirname + '/../');
var writer = new Writer();
writer.addCString('hello');
writer.addCString('something else, really');
writer.addInt32(38013);
writer.addCString('and that\'s all she wrote, folks\n...\n...not really');
module.exports = function() {
writer.join(0x50);
};
if(!module.parent) {
module.exports();
console.log('benchmark ok');
}

View File

@ -1,23 +0,0 @@
var Writer = require(__dirname + '/../');
var string = "";
for(var i = 0; i < 10; i++) {
string += 'Once upon a time long ago there lived a little programming language named JavaScript';
}
module.exports = function() {
var writer = new Writer(4);
writer.addCString(string);
writer.addCString(string);
writer.addCString(string);
writer.addCString(string);
writer.addCString(string);
writer.addCString(string);
writer.addCString(string);
writer.addCString(string);
};
if(!module.parent) {
module.exports();
console.log('benchmark ok');
}

View File

@ -1,14 +0,0 @@
var Writer = require(__dirname + '/../');
module.exports = function() {
var writer = new Writer();
writer.addInt32(10);
writer.addInt16(5);
writer.addCString('test');
writer.flush('X');
};
if(!module.parent) {
module.exports();
console.log('benchmark ok');
}

View File

@ -1,57 +1,57 @@
//binary data writer tuned for creating
//postgres message packets as effeciently as possible by reusing the
//same buffer to avoid memcpy and limit memory allocations
var Writer = module.exports = function(size) {
var Writer = module.exports = function (size) {
this.size = size || 1024;
this.buffer = Buffer(this.size + 5);
this.buffer = Buffer.alloc(this.size + 5);
this.offset = 5;
this.headerPosition = 0;
};
//resizes internal buffer if not enough size left
Writer.prototype._ensure = function(size) {
Writer.prototype._ensure = function (size) {
var remaining = this.buffer.length - this.offset;
if(remaining < size) {
if (remaining < size) {
var oldBuffer = this.buffer;
// exponential growth factor of around ~ 1.5
// https://stackoverflow.com/questions/2269063/buffer-growth-strategy
var newSize = oldBuffer.length + (oldBuffer.length >> 1) + size;
this.buffer = new Buffer(newSize);
this.buffer = Buffer.alloc(newSize);
oldBuffer.copy(this.buffer);
}
};
Writer.prototype.addInt32 = function(num) {
Writer.prototype.addInt32 = function (num) {
this._ensure(4);
this.buffer[this.offset++] = (num >>> 24 & 0xFF);
this.buffer[this.offset++] = (num >>> 16 & 0xFF);
this.buffer[this.offset++] = (num >>> 8 & 0xFF);
this.buffer[this.offset++] = (num >>> 0 & 0xFF);
this.buffer[this.offset++] = (num >>> 8 & 0xFF);
this.buffer[this.offset++] = (num >>> 0 & 0xFF);
return this;
};
Writer.prototype.addInt16 = function(num) {
Writer.prototype.addInt16 = function (num) {
this._ensure(2);
this.buffer[this.offset++] = (num >>> 8 & 0xFF);
this.buffer[this.offset++] = (num >>> 0 & 0xFF);
this.buffer[this.offset++] = (num >>> 8 & 0xFF);
this.buffer[this.offset++] = (num >>> 0 & 0xFF);
return this;
};
//for versions of node requiring 'length' as 3rd argument to buffer.write
var writeString = function(buffer, string, offset, len) {
var writeString = function (buffer, string, offset, len) {
buffer.write(string, offset, len);
};
//overwrite function for older versions of node
if(Buffer.prototype.write.length === 3) {
writeString = function(buffer, string, offset, len) {
if (Buffer.prototype.write.length === 3) {
writeString = function (buffer, string, offset, len) {
buffer.write(string, offset);
};
}
Writer.prototype.addCString = function(string) {
Writer.prototype.addCString = function (string) {
//just write a 0 for empty or null strings
if(!string) {
if (!string) {
this._ensure(1);
} else {
var len = Buffer.byteLength(string);
@ -64,14 +64,14 @@ Writer.prototype.addCString = function(string) {
return this;
};
Writer.prototype.addChar = function(c) {
Writer.prototype.addChar = function (c) {
this._ensure(1);
writeString(this.buffer, c, this.offset, 1);
this.offset++;
return this;
};
Writer.prototype.addString = function(string) {
Writer.prototype.addString = function (string) {
string = string || "";
var len = Buffer.byteLength(string);
this._ensure(len);
@ -80,18 +80,18 @@ Writer.prototype.addString = function(string) {
return this;
};
Writer.prototype.getByteLength = function() {
Writer.prototype.getByteLength = function () {
return this.offset - 5;
};
Writer.prototype.add = function(otherBuffer) {
Writer.prototype.add = function (otherBuffer) {
this._ensure(otherBuffer.length);
otherBuffer.copy(this.buffer, this.offset);
this.offset += otherBuffer.length;
return this;
};
Writer.prototype.clear = function() {
Writer.prototype.clear = function () {
this.offset = 5;
this.headerPosition = 0;
this.lastEnd = 0;
@ -99,30 +99,30 @@ Writer.prototype.clear = function() {
//appends a header block to all the written data since the last
//subsequent header or to the beginning if there is only one data block
Writer.prototype.addHeader = function(code, last) {
Writer.prototype.addHeader = function (code, last) {
var origOffset = this.offset;
this.offset = this.headerPosition;
this.buffer[this.offset++] = code;
//length is everything in this packet minus the code
this.addInt32(origOffset - (this.headerPosition+1));
this.addInt32(origOffset - (this.headerPosition + 1));
//set next header position
this.headerPosition = origOffset;
//make space for next header
this.offset = origOffset;
if(!last) {
if (!last) {
this._ensure(5);
this.offset += 5;
}
};
Writer.prototype.join = function(code) {
if(code) {
Writer.prototype.join = function (code) {
if (code) {
this.addHeader(code, true);
}
return this.buffer.slice(code ? 0 : 5, this.offset);
};
Writer.prototype.flush = function(code) {
Writer.prototype.flush = function (code) {
var result = this.join(code);
this.clear();
return result;

View File

@ -1,27 +1,27 @@
{
"_from": "buffer-writer@1.0.1",
"_id": "buffer-writer@1.0.1",
"_from": "buffer-writer@2.0.0",
"_id": "buffer-writer@2.0.0",
"_inBundle": false,
"_integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=",
"_integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==",
"_location": "/buffer-writer",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "buffer-writer@1.0.1",
"raw": "buffer-writer@2.0.0",
"name": "buffer-writer",
"escapedName": "buffer-writer",
"rawSpec": "1.0.1",
"rawSpec": "2.0.0",
"saveSpec": null,
"fetchSpec": "1.0.1"
"fetchSpec": "2.0.0"
},
"_requiredBy": [
"/pg"
],
"_resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
"_shasum": "22a936901e3029afcd7547eb4487ceb697a3bf08",
"_spec": "buffer-writer@1.0.1",
"_where": "D:\\5CHITM\\Diplomarbeit\\smart-shopper\\SmartShopper\\express-server\\node_modules\\pg",
"_resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
"_shasum": "ce7eb81a38f7829db09c873f2fbb792c0c98ec04",
"_spec": "buffer-writer@2.0.0",
"_where": "D:\\Desktop\\Git\\Firebase\\SmartShopperFirebase\\node_modules\\pg",
"author": {
"name": "Brian M. Carlson"
},
@ -32,14 +32,10 @@
"deprecated": false,
"description": "a fast, efficient buffer writer",
"devDependencies": {
"async": "~0.2.6",
"bench": "~0.3.5",
"benchmark": "~1.0.0",
"cloned": "0.0.1",
"microtime": "~0.3.3",
"mocha": "~1.8.1",
"okay": "0.0.2",
"rmdir": "~1.0.0"
"mocha": "5.2.0"
},
"engines": {
"node": ">=4"
},
"homepage": "https://github.com/brianc/node-buffer-writer#readme",
"keywords": [
@ -55,7 +51,7 @@
"url": "git://github.com/brianc/node-buffer-writer.git"
},
"scripts": {
"test": "mocha"
"test": "mocha --throw-deprecation"
},
"version": "1.0.1"
"version": "2.0.0"
}

View File

@ -3,28 +3,28 @@ var Writer = require(__dirname + "/../");
var assert = require('assert');
var util = require('util');
assert.equalBuffers = function(actual, expected) {
var spit = function(actual, expected) {
assert.equalBuffers = function (actual, expected) {
var spit = function (actual, expected) {
console.log("");
console.log("actual " + util.inspect(actual));
console.log("expect " + util.inspect(expected));
console.log("");
};
if(actual.length != expected.length) {
if (actual.length != expected.length) {
spit(actual, expected);
assert.equal(actual.length, expected.length);
assert.strictEqual(actual.length, expected.length);
}
for(var i = 0; i < actual.length; i++) {
if(actual[i] != expected[i]) {
for (var i = 0; i < actual.length; i++) {
if (actual[i] != expected[i]) {
spit(actual, expected);
}
assert.equal(actual[i],expected[i]);
assert.strictEqual(actual[i], expected[i]);
}
};
suite('adding int32', function() {
var testAddingInt32 = function(int, expectedBuffer) {
test('writes ' + int, function() {
suite('adding int32', function () {
var testAddingInt32 = function (int, expectedBuffer) {
test('writes ' + int, function () {
var subject = new Writer();
var result = subject.addInt32(int).join();
assert.equalBuffers(result, expectedBuffer);
@ -34,19 +34,19 @@ suite('adding int32', function() {
testAddingInt32(0, [0, 0, 0, 0]);
testAddingInt32(1, [0, 0, 0, 1]);
testAddingInt32(256, [0, 0, 1, 0]);
test('writes largest int32', function() {
test('writes largest int32', function () {
//todo need to find largest int32 when I have internet access
return false;
});
test('writing multiple int32s', function() {
test('writing multiple int32s', function () {
var subject = new Writer();
var result = subject.addInt32(1).addInt32(10).addInt32(0).join();
assert.equalBuffers(result, [0, 0, 0, 1, 0, 0, 0, 0x0a, 0, 0, 0, 0]);
});
suite('having to resize the buffer', function() {
test('after resize correct result returned', function() {
suite('having to resize the buffer', function () {
test('after resize correct result returned', function () {
var subject = new Writer(10);
subject.addInt32(1).addInt32(1).addInt32(1);
assert.equalBuffers(subject.join(), [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]);
@ -54,26 +54,26 @@ suite('adding int32', function() {
});
});
suite('int16', function() {
test('writes 0', function() {
suite('int16', function () {
test('writes 0', function () {
var subject = new Writer();
var result = subject.addInt16(0).join();
assert.equalBuffers(result, [0,0]);
assert.equalBuffers(result, [0, 0]);
});
test('writes 400', function() {
test('writes 400', function () {
var subject = new Writer();
var result = subject.addInt16(400).join();
assert.equalBuffers(result, [1, 0x90]);
});
test('writes many', function() {
test('writes many', function () {
var subject = new Writer();
var result = subject.addInt16(0).addInt16(1).addInt16(2).join();
assert.equalBuffers(result, [0, 0, 0, 1, 0, 2]);
});
test('resizes if internal buffer fills up', function() {
test('resizes if internal buffer fills up', function () {
var subject = new Writer(3);
var result = subject.addInt16(2).addInt16(3).join();
assert.equalBuffers(result, [0, 2, 0, 3]);
@ -81,33 +81,33 @@ suite('int16', function() {
});
suite('cString', function() {
test('writes empty cstring', function() {
suite('cString', function () {
test('writes empty cstring', function () {
var subject = new Writer();
var result = subject.addCString().join();
assert.equalBuffers(result, [0]);
});
test('writes two empty cstrings', function() {
test('writes two empty cstrings', function () {
var subject = new Writer();
var result = subject.addCString("").addCString("").join();
assert.equalBuffers(result, [0, 0]);
});
test('writes non-empty cstring', function() {
test('writes non-empty cstring', function () {
var subject = new Writer();
var result = subject.addCString("!!!").join();
assert.equalBuffers(result, [33, 33, 33, 0]);
});
test('resizes if reached end', function() {
test('resizes if reached end', function () {
var subject = new Writer(3);
var result = subject.addCString("!!!").join();
assert.equalBuffers(result, [33, 33, 33, 0]);
});
test('writes multiple cstrings', function() {
test('writes multiple cstrings', function () {
var subject = new Writer();
var result = subject.addCString("!").addCString("!").join();
assert.equalBuffers(result, [33, 0, 33, 0]);
@ -115,101 +115,101 @@ suite('cString', function() {
});
test('writes char', function() {
test('writes char', function () {
var subject = new Writer(2);
var result = subject.addChar('a').addChar('b').addChar('c').join();
assert.equalBuffers(result, [0x61, 0x62, 0x63]);
});
test('gets correct byte length', function() {
test('gets correct byte length', function () {
var subject = new Writer(5);
assert.equal(subject.getByteLength(), 0);
assert.strictEqual(subject.getByteLength(), 0);
subject.addInt32(0);
assert.equal(subject.getByteLength(), 4);
assert.strictEqual(subject.getByteLength(), 4);
subject.addCString("!");
assert.equal(subject.getByteLength(), 6);
assert.strictEqual(subject.getByteLength(), 6);
});
test('can add arbitrary buffer to the end', function() {
test('can add arbitrary buffer to the end', function () {
var subject = new Writer(4);
subject.addCString("!!!")
var result = subject.add(Buffer("@@@")).join();
var result = subject.add(Buffer.from("@@@")).join();
assert.equalBuffers(result, [33, 33, 33, 0, 0x40, 0x40, 0x40]);
});
suite('can write normal string', function() {
suite('can write normal string', function () {
var subject = new Writer(4);
var result = subject.addString("!").join();
assert.equalBuffers(result, [33]);
test('can write cString too', function() {
test('can write cString too', function () {
var result = subject.addCString("!").join();
assert.equalBuffers(result, [33, 33, 0]);
});
test('can resize', function() {
test('can resize', function () {
var result = subject.addString("!!").join();
assert.equalBuffers(result, [33, 33, 0, 33, 33]);
});
});
suite('clearing', function() {
suite('clearing', function () {
var subject = new Writer();
subject.addCString("@!!#!#");
subject.addInt32(10401);
test('clears', function() {
test('clears', function () {
subject.clear();
assert.equalBuffers(subject.join(), []);
});
test('writing more', function() {
test('writing more', function () {
var joinedResult = subject.addCString("!").addInt32(9).addInt16(2).join();
assert.equalBuffers(joinedResult, [33, 0, 0, 0, 0, 9, 0, 2]);
});
test('returns result', function() {
test('returns result', function () {
var flushedResult = subject.flush();
assert.equalBuffers(flushedResult, [33, 0, 0, 0, 0, 9, 0, 2])
});
test('clears the writer', function() {
test('clears the writer', function () {
assert.equalBuffers(subject.join(), [])
assert.equalBuffers(subject.flush(), [])
});
});
test("resizing to much larger", function() {
test("resizing to much larger", function () {
var subject = new Writer(2);
var string = "!!!!!!!!";
var result = subject.addCString(string).flush();
assert.equalBuffers(result, [33, 33, 33, 33, 33, 33, 33, 33, 0]);
});
suite("flush", function() {
test('added as a hex code to a full writer', function() {
suite("flush", function () {
test('added as a hex code to a full writer', function () {
var subject = new Writer(2);
var result = subject.addCString("!").flush(0x50);
assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0]);
});
test('added as a hex code to a non-full writer', function() {
test('added as a hex code to a non-full writer', function () {
var subject = new Writer(10).addCString("!");
var joinedResult = subject.join(0x50);
var result = subject.flush(0x50);
assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0]);
});
test('added as a hex code to a buffer which requires resizing', function() {
test('added as a hex code to a buffer which requires resizing', function () {
var result = new Writer(2).addCString("!!!!!!!!").flush(0x50);
assert.equalBuffers(result, [0x50, 0, 0, 0, 0x0D, 33, 33, 33, 33, 33, 33, 33, 33, 0]);
});
});
suite("header", function() {
test('adding two packets with headers', function() {
suite("header", function () {
test('adding two packets with headers', function () {
var subject = new Writer(10).addCString("!");
subject.addHeader(0x50);
subject.addCString("!!");
subject.addHeader(0x40);
subject.addCString("!");
var result = subject.flush(0x10);
assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0, 0x40, 0, 0, 0, 7, 33, 33, 0, 0x10, 0, 0, 0, 6, 33, 0 ]);
assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0, 0x40, 0, 0, 0, 7, 33, 33, 0, 0x10, 0, 0, 0, 6, 33, 0]);
});
});