Compare commits

..

10 Commits
knex ... master

Author SHA1 Message Date
97d5a651f7 Rollback to 12.0.0 and update index.js 2018-05-14 03:21:29 +07:00
2c5e6d1877 Downgrade socketcluster 2018-05-13 13:25:36 +07:00
74d2bf49c1 Migrate from node-uuid to uuid 2018-05-13 12:01:36 +07:00
39e102869f Update socketserver 2018-05-13 11:58:57 +07:00
Zalmoxisus
7bde44b110 v0.2.3 2017-09-06 21:49:37 +03:00
Mihail Diordiev
574fe1f02a Merge pull request #45 from skovhus/upgrade-socketcluster
Fix installation error caused by uws
2017-09-06 21:48:51 +03:00
skovhus
8063a88990 Upgrade socketcluster dependency (uws@0.13.0 has been removed from npm) 2017-08-07 11:41:13 +02:00
Zalmoxisus
c1d84f5ef9 v0.2.3 2017-07-11 21:47:22 +03:00
Patrick Wang
58023a8d67 Support RN > 0.46.0-rc.0 for injectServer (#40) 2017-07-11 03:00:32 +08:00
Jhen-Jie Hong
38e81e3aad Support RN >= 0.44.0-rc.0 for injectserver (#38) 2017-04-14 17:10:53 +03:00
11 changed files with 73 additions and 137 deletions

1
.gitignore vendored
View File

@ -3,4 +3,3 @@ node_modules
.DS_Store .DS_Store
coverage coverage
.idea .idea
remotedev-db.sqlite3

View File

@ -8,7 +8,9 @@ var endFlag = '/* ' + name + ' end */';
var serverFlags = { var serverFlags = {
'react-native': { 'react-native': {
'0.0.1': ' _server(argv, config, resolve, reject);', '0.0.1': ' _server(argv, config, resolve, reject);',
'0.31.0': " runServer(args, config, () => console.log('\\nReact packager ready.\\n'));" '0.31.0': " runServer(args, config, () => console.log('\\nReact packager ready.\\n'));",
'0.44.0-rc.0': ' runServer(args, config, startedCallback, readyCallback);',
'0.46.0-rc.0': ' runServer(runServerArgs, configT, startedCallback, readyCallback);'
}, },
'react-native-desktop': { 'react-native-desktop': {
'0.0.1': ' _server(argv, config, resolve, reject);' '0.0.1': ' _server(argv, config, resolve, reject);'
@ -92,4 +94,4 @@ exports.revert = function(modulePath, moduleName) {
); );
} }
return true; return true;
}; };

View File

@ -1,6 +0,0 @@
{
"connection": { "filename": "./remotedev-db.sqlite3" },
"client": "sqlite3",
"debug": false,
"migrate": true
}

View File

@ -9,7 +9,7 @@ var LOG_LEVEL_WARN = 2;
var LOG_LEVEL_INFO = 3; var LOG_LEVEL_INFO = 3;
module.exports = function(argv) { module.exports = function(argv) {
var SocketCluster = require('socketcluster').SocketCluster; var SocketCluster = require('socketcluster');
var options = assign(getOptions(argv), { var options = assign(getOptions(argv), {
workerController: __dirname + '/lib/worker.js', workerController: __dirname + '/lib/worker.js',
allowClientPublish: false allowClientPublish: false

View File

@ -1,27 +0,0 @@
var path = require('path');
var knexModule = require('knex');
module.exports = function connector(options) {
var dbOptions = options.dbOptions;
dbOptions.useNullAsDefault = true;
if (!dbOptions.migrate) {
return knexModule(dbOptions);
}
dbOptions.migrations = { directory: path.resolve(__dirname, 'migrations') };
dbOptions.seeds = { directory: path.resolve(__dirname, 'seeds') };
var knex = knexModule(dbOptions);
knex.migrate.latest()
.then(function() {
return knex.seed.run();
})
.then(function() {
console.log('Migrations are finished.');
})
.catch(function(error) {
console.error(error);
});
return knexModule(dbOptions);
};

View File

@ -1,39 +0,0 @@
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.createTable('remotedev_reports', function(table) {
table.uuid('id').primary();
table.string('type');
table.string('title');
table.string('description');
table.string('action');
table.text('payload');
table.text('preloadedState');
table.text('screenshot');
table.string('userAgent');
table.string('version');
table.string('user');
table.string('userId');
table.string('meta');
table.string('exception');
table.timestamp('added');
table.uuid('appId')
.references('id')
.inTable('remotedev_apps');
}),
knex.schema.createTable('remotedev_apps', function(table){
table.uuid('id').primary();
table.string('title');
table.string('description');
table.string('url');
table.timestamps();
})
])
};
exports.down = function(knex, Promise) {
return Promise.all([
knex.schema.dropTable('remotedev_reports'),
knex.schema.dropTable('remotedev_apps')
])
};

View File

@ -1,12 +0,0 @@
exports.seed = function(knex, Promise) {
return Promise.all([
knex('remotedev_apps').del()
]).then(function() {
return Promise.all([
knex('remotedev_apps').insert({
id: '78626c31-e16b-4528-b8e5-f81301b627f4',
title: 'Default'
})
]);
});
};

View File

@ -1,13 +1,4 @@
var path = require('path');
module.exports = function getOptions(argv) { module.exports = function getOptions(argv) {
var dbOptions = argv.dbOptions;
if (typeof dbOptions === 'string') {
dbOptions = require(path.resolve(process.cwd(), argv.dbOptions));
} else if (typeof dbOptions === 'undefined') {
dbOptions = require('../defaultDbOptions.json');
}
return { return {
host: argv.hostname || process.env.npm_package_remotedev_hostname || null, host: argv.hostname || process.env.npm_package_remotedev_hostname || null,
port: Number(argv.port || process.env.npm_package_remotedev_port) || 8000, port: Number(argv.port || process.env.npm_package_remotedev_port) || 8000,
@ -17,7 +8,8 @@ module.exports = function getOptions(argv) {
cert: argv.cert || process.env.npm_package_remotedev_cert || null, cert: argv.cert || process.env.npm_package_remotedev_cert || null,
passphrase: argv.passphrase || process.env.npm_package_remotedev_passphrase || null passphrase: argv.passphrase || process.env.npm_package_remotedev_passphrase || null
}, },
dbOptions: dbOptions, adapter: argv.adapter || process.env.npm_package_remotedev_adapter,
dbOptions: argv.dbOptions || process.env.npm_package_remotedev_db,
logLevel: argv.logLevel || 3 logLevel: argv.logLevel || 3
}; };
} }

View File

@ -1,9 +1,11 @@
var uuid = require('node-uuid'); var uuidv4 = require('uuid/v4');
var pick = require('lodash/pick'); var pick = require('lodash/pick');
var connector = require('./db/connector'); var JSData = require('js-data');
var getAdapter = require('./adapter');
var reports = 'remotedev_reports'; var store;
var knex; var adapter;
var Report;
var baseFields = ['id', 'title', 'added']; var baseFields = ['id', 'title', 'added'];
@ -13,17 +15,41 @@ function error(msg) {
}); });
} }
function map(data, fields) {
if (!fields) return data;
return data.map(function(r) {
return pick(r, fields);
});
}
function listEvery(query) {
if (!adapter) {
return new Promise(function(resolve) {
var report = Report.filter(query);
return resolve(report);
});
}
return Report.findAll(query);
}
function list(query, fields) { function list(query, fields) {
knex.select().from('remotedev_apps').then(function(r){ console.log(r) }); return new Promise(function(resolve) {
var r = knex.select(fields || baseFields).from(reports); listEvery(query).then(function(data) {
if (query) return r.where(query); return resolve(map(data, fields || baseFields));
return r; });
});
} }
function get(id) { function get(id) {
if (!id) return error('No id specified.'); if (!id) return error('No id specified.');
return knex(reports).where('id', id); if (!adapter) {
return new Promise(function(resolve) {
var report = Report.get(id);
return resolve(report);
});
}
return Report.find(id);
} }
function add(data) { function add(data) {
@ -35,7 +61,7 @@ function add(data) {
} }
var obj = { var obj = {
id: uuid.v4(), id: uuidv4(),
type: data.type, type: data.type,
title: data.title || data.exception && data.exception.message || data.action, title: data.title || data.exception && data.exception.message || data.action,
description: data.description, description: data.description,
@ -49,11 +75,17 @@ function add(data) {
user: data.user, user: data.user,
userId: typeof data.user === 'object' ? data.user.id : data.user, userId: typeof data.user === 'object' ? data.user.id : data.user,
meta: data.meta, meta: data.meta,
exception: data.exception exception: data.exception,
added: Date.now()
}; };
return knex.insert(obj).into(reports) if (!adapter) {
.then(function (){ return byBaseFields(obj); }) return new Promise(function(resolve) {
var report = Report.inject(obj);
return resolve(report);
});
}
return Report.create(obj);
} }
function byBaseFields(data) { function byBaseFields(data) {
@ -61,12 +93,24 @@ function byBaseFields(data) {
} }
function createStore(options) { function createStore(options) {
knex = connector(options); var adapterName = options.adapter;
store = new JSData.DS();
if (adapterName) {
var DSAdapter = getAdapter(adapterName);
adapter = new DSAdapter(options.dbOptions);
store.registerAdapter(adapterName, adapter, { default: true });
}
Report = store.defineResource('report');
return { return {
list: list, list: list,
get: get, get: get,
add: add add: add,
selectors: {
byBaseFields: byBaseFields
}
}; };
} }

View File

@ -26,29 +26,20 @@ module.exports.run = function(worker) {
switch(req.body.op) { switch(req.body.op) {
case 'get': case 'get':
store.get(req.body.id).then(function(r) { store.get(req.body.id).then(function(r) {
res.send(r[0] || {}); res.send(r || {});
}).catch(function(error) {
console.error(error);
res.sendStatus(500)
}); });
break; break;
case 'list': case 'list':
store.list(req.body.query, req.body.fields).then(function(r) { store.list(req.body.query, req.body.fields).then(function(r) {
res.send(r); res.send(r);
}).catch(function(error) {
console.error(error);
res.sendStatus(500)
}); });
break; break;
default: default:
store.add(req.body).then(function(r) { store.add(req.body).then(function(r) {
res.send({ id: r.id, error: r.error }); res.send({ id: r.id, error: r.error });
scServer.exchange.publish('report', { scServer.exchange.publish('report', {
type: 'add', data: r type: 'add', data: store.selectors.byBaseFields(r)
}); });
}).catch(function(error) {
console.error(error);
res.status(500).send({})
}); });
} }
}); });
@ -69,8 +60,6 @@ module.exports.run = function(worker) {
if (req.channel === 'report') { if (req.channel === 'report') {
store.list().then(function(data) { store.list().then(function(data) {
req.socket.emit(req.channel, { type: 'list', data: data }); req.socket.emit(req.channel, { type: 'list', data: data });
}).catch(function(error) {
console.error(error);
}); });
} }
}); });
@ -90,9 +79,7 @@ module.exports.run = function(worker) {
}); });
socket.on('getReport', function (id, respond) { socket.on('getReport', function (id, respond) {
store.get(id).then(function(data) { store.get(id).then(function(data) {
respond(null, data[0]); respond(null, data);
}).catch(function(error) {
console.error(error);
}); });
}); });
socket.on('disconnect', function() { socket.on('disconnect', function() {

View File

@ -1,6 +1,6 @@
{ {
"name": "remotedev-server", "name": "remotedev-server",
"version": "0.2.1", "version": "0.2.4",
"description": "Run the RemoteDev monitor on your local server.", "description": "Run the RemoteDev monitor on your local server.",
"main": "index.js", "main": "index.js",
"bin": { "bin": {
@ -9,9 +9,7 @@
"files": [ "files": [
"bin", "bin",
"lib", "lib",
"views", "views"
"index.js",
"defaultDbOptions.json"
], ],
"repository": { "repository": {
"type": "git", "type": "git",
@ -35,14 +33,12 @@
"express": "^4.13.3", "express": "^4.13.3",
"getport": "^0.1.0", "getport": "^0.1.0",
"js-data": "^2.9.0", "js-data": "^2.9.0",
"knex": "^0.12.6",
"lodash": "^4.15.0", "lodash": "^4.15.0",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"node-uuid": "^1.4.0",
"object-assign": "^4.0.0", "object-assign": "^4.0.0",
"repeat-string": "^1.5.4", "repeat-string": "^1.5.4",
"semver": "^5.3.0", "semver": "^5.3.0",
"socketcluster": "^5.0.4", "socketcluster": "^12.0.0",
"sqlite3": "^3.1.8" "uuid": "^3.2.1"
} }
} }