@cocreate/crud-server
Advanced tools
Comparing version 1.12.0 to 1.13.0
@@ -0,1 +1,21 @@ | ||
# [1.13.0](https://github.com/CoCreate-app/CoCreate-crud-server/compare/v1.12.0...v1.13.0) (2022-11-21) | ||
### Bug Fixes | ||
* bump [@cocreate](https://github.com/cocreate) dependencies ([a7abd3b](https://github.com/CoCreate-app/CoCreate-crud-server/commit/a7abd3bb30a8d6c46dce0033a2fa67e33ff6e548)) | ||
* data.request takes priority ([d8f584e](https://github.com/CoCreate-app/CoCreate-crud-server/commit/d8f584ee978c4ae6dcd66e30a46f66724d60bb04)) | ||
* removed data.data ([cc66783](https://github.com/CoCreate-app/CoCreate-crud-server/commit/cc66783f6733ea67ae990f9894a94cea0993f069)) | ||
* renamed data.data to data.document ([ed5348f](https://github.com/CoCreate-app/CoCreate-crud-server/commit/ed5348f9a5da8055b885b7e142acd2eec5e02be8)) | ||
* set _id using ObjectId ([f2420f6](https://github.com/CoCreate-app/CoCreate-crud-server/commit/f2420f6ac26bc636c76a81fc152e474cdb3075a4)) | ||
### Features | ||
* broadcast crud even if no database exist in server ([5b53fc2](https://github.com/CoCreate-app/CoCreate-crud-server/commit/5b53fc27a353f00617638fb36da278e76aa88b79)) | ||
* crud can connect to multiple databases, mongodb adapter for crud ([b4e6b61](https://github.com/CoCreate-app/CoCreate-crud-server/commit/b4e6b618e4c6197a9fe1cb2a32f7419898e86d30)) | ||
* data response also available as data.document, improved handeling of data[type] ([bb25d9f](https://github.com/CoCreate-app/CoCreate-crud-server/commit/bb25d9f57875bbaa03bd2cafd9333e5f9d0c57f9)) | ||
* mongodb - crud multiple databases, collections, and documents ([1ec4b27](https://github.com/CoCreate-app/CoCreate-crud-server/commit/1ec4b278e4ce830d8e452944c144ecb434027c37)) | ||
* return documents containing db, database, and collection ([d13db96](https://github.com/CoCreate-app/CoCreate-crud-server/commit/d13db962500fc196af68f6c8e227ce9ba3241188)) | ||
# [1.12.0](https://github.com/CoCreate-app/CoCreate-crud-server/compare/v1.11.1...v1.12.0) (2022-10-02) | ||
@@ -2,0 +22,0 @@ |
{ | ||
"name": "@cocreate/crud-server", | ||
"version": "1.12.0", | ||
"version": "1.13.0", | ||
"description": "CoCreate-crud-server", | ||
@@ -43,3 +43,3 @@ "keywords": [ | ||
"dependencies": { | ||
"@cocreate/docs": "^1.3.18", | ||
"@cocreate/docs": "^1.3.21", | ||
"csvtojson": "^2.0.10", | ||
@@ -46,0 +46,0 @@ "json-2-csv": "^3.10.3", |
163
src/index.js
'use strict'; | ||
const crud = require('./crud'); | ||
const backup = require('./backup'); | ||
const database = require('./database'); | ||
const {replaceArray} = require("./utils.crud.js") | ||
const {searchData, sortData} = require("@cocreate/filter") | ||
const mongodb = require('./mongodb/mongodb'); | ||
class CoCreateCrudServer { | ||
constructor(wsManager, dbClient) { | ||
constructor(wsManager) { | ||
this.wsManager = wsManager | ||
this.dbClient = dbClient | ||
this.init() | ||
this.dbs = ['mongodb'] | ||
this.mongodb = mongodb | ||
this.init(); | ||
} | ||
init() { | ||
if (this.wsManager) { | ||
this.wsManager.on('createDatabase', (socket, data) => this.db(socket, 'createDatabase', data)) | ||
this.wsManager.on('readDatabase', (socket, data) => this.db(socket, 'readDatabase', data)) | ||
this.wsManager.on('updateDatabase', (socket, data) => this.db(socket, 'updateDatabase', data)) | ||
this.wsManager.on('deleteDatabase', (socket, data) => this.db(socket, 'deleteDatabase', data)) | ||
this.wsManager.on('createCollection', (socket, data) => this.db(socket, 'createCollection', data)) | ||
this.wsManager.on('readCollection', (socket, data) => this.db(socket, 'readCollection', data)) | ||
this.wsManager.on('updateCollection', (socket, data) => this.db(socket, 'updateCollection', data)) | ||
this.wsManager.on('deleteCollection', (socket, data) => this.db(socket, 'deleteCollection', data)) | ||
this.wsManager.on('createDocument', (socket, data) => this.db(socket, 'createDocument', data)) | ||
this.wsManager.on('readDocument', (socket, data) => this.db(socket, 'readDocument', data)) | ||
this.wsManager.on('updateDocument', (socket, data) => this.db(socket, 'updateDocument', data)) | ||
this.wsManager.on('deleteDocument', (socket, data) => this.db(socket, 'deleteDocument', data)) | ||
} | ||
} | ||
init() { | ||
new crud(this.wsManager, this.dbClient); | ||
new backup(this.wsManager, this.dbClient); | ||
new database(this.wsManager, this.dbClient); | ||
} | ||
async databaseStats(data) { | ||
data = await this.db('', 'databaseStats', data) | ||
return data | ||
} | ||
async createCollection(data) { | ||
data = await this.db('', 'createCollection', data) | ||
return data | ||
} | ||
async readCollection(data) { | ||
data = await this.db('', 'readCollection', data) | ||
return data | ||
} | ||
async readCollections(data) { | ||
data = await this.db('', 'readCollections', data) | ||
return data | ||
} | ||
async updateCollection(data) { | ||
data = await this.db('', 'updateCollection', data) | ||
return data | ||
} | ||
async deleteCollection(data) { | ||
data = await this.db('', 'deleteCollection', data) | ||
return data | ||
} | ||
async createDocument(data) { | ||
data = await this.db('', 'createDocument', data) | ||
return data | ||
} | ||
async readDocument(data) { | ||
data = await this.db('', 'readDocument', data) | ||
return data | ||
} | ||
async updateDocument(data) { | ||
data = await this.db('', 'updateDocument', data) | ||
return data | ||
} | ||
async deleteDocument(data) { | ||
data = await this.db('', 'deleteDocument', data) | ||
return data | ||
} | ||
async db(socket, action, data) { | ||
return new Promise(async (resolve) => { | ||
try { | ||
data['timeStamp'] = new Date().toISOString() | ||
if (action == 'updateDocument' && data.upsert != false) | ||
data.upsert = true | ||
// ToDo: support stats from multiple dbs | ||
if (data.collection || action == 'databaseStats') { | ||
if (!data.db) | ||
data['db'] = ['indexeddb', 'mongodb'] | ||
if (!data.database) | ||
data['database'] = data.organization_id || process.env.organization_id | ||
if (!data.organization_id) | ||
data['organization_id'] = process.env.organization_id | ||
} | ||
if (!data.db || !data.db.length) | ||
data.db = this.dbs | ||
let dbsLength = data.db.length | ||
for (let i = 0; i < data.db.length; i++) { | ||
dbsLength -= 1 | ||
if (this.dbs.includes(data.db[i])) { | ||
this[data.db[i]][action](data).then((data) => { | ||
//ToDo: sorting should take place here in order to return sorted values from multiple dbs | ||
if (!dbsLength) { | ||
if (socket) { | ||
this.wsManager.broadcast(socket, action, data); | ||
process.emit('changed-document', data) | ||
resolve() | ||
} else { | ||
resolve(data) | ||
} | ||
} | ||
}) | ||
} else { | ||
if (!dbsLength) { | ||
if (socket) { | ||
this.wsManager.broadcast(socket, action, data); | ||
process.emit('changed-document', data) | ||
resolve() | ||
} else { | ||
resolve(data) | ||
} | ||
} | ||
} | ||
} | ||
} catch(error) { | ||
if (socket) { | ||
errorHandler(data, error) | ||
this.wsManager.send(socket, action, data); | ||
resolve() | ||
} else { | ||
resolve(data) | ||
} | ||
} | ||
}); | ||
} | ||
ObjectId = (rnd = r16 => Math.floor(r16).toString(16)) => | ||
rnd(Date.now()/1000) + ' '.repeat(16).replace(/./g, () => rnd(Math.random()*16)) | ||
errorHandler(data, error, database, collection){ | ||
if (typeof error == 'object') | ||
error['db'] = 'mongodb' | ||
else | ||
error = {location: 'crudServer', message: error} | ||
if (database) | ||
error['database'] = database | ||
if(data.error) | ||
data.error.push(error) | ||
else | ||
data.error = [error] | ||
} | ||
} | ||
module.exports = CoCreateCrudServer; |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
96770
993
16
4
2
Updated@cocreate/docs@^1.3.21