Socket
Socket
Sign inDemoInstall

@cocreate/crud-client

Package Overview
Dependencies
Maintainers
1
Versions
320
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@cocreate/crud-client - npm Package Compare versions

Comparing version 1.27.0 to 1.28.0

4

package.json
{
"name": "@cocreate/crud-client",
"version": "1.27.0",
"version": "1.28.0",
"description": "An useful CRUD api operate Create, read, update, delete with built in database. Can be used as a firebase alternative. Easily configured using HTML5 attributes and/or JavaScript API.",

@@ -62,5 +62,5 @@ "keywords": [

"@cocreate/indexeddb": "^1.13.5",
"@cocreate/socket-client": "^1.27.0",
"@cocreate/socket-client": "^1.28.0",
"@cocreate/uuid": "^1.7.2"
}
}

@@ -70,3 +70,3 @@ /********************************************************************************

data['timeStamp'] = new Date().toISOString()
data['timeStamp'] = new Date()

@@ -78,3 +78,3 @@ if (data.method.startsWith('read'))

if (!data.organization_id)
data.organization_id = await this.getOrganizationId()
data.organization_id = await this.socket.organization_id()

@@ -85,5 +85,9 @@ if (data.database || data.array || data.type) {

if (!data.database)
data['database'] = data.organization_id || this.socket.config.organization_id
data['database'] = data.organization_id
if (!data.user_id)
data['user_id'] = this.socket.config.user_id
data['user_id'] = this.socket.user_id
if (data.broadcastClient !== false && data.broadcastClient !== 'false')
data['broadcastClient'] = true
if (data.method.startsWith('read'))
data.broadcastBrowser = false
}

@@ -93,20 +97,25 @@

indexeddb.send(data).then((response) => {
if (!data.method.startsWith('read')) {
if (!data.broadcastBrowser && data.broadcastBrowser != 'false')
response['broadcastBrowser'] = 'once'
if (data.method.startsWith('delete')) {
indexeddb.send({
method: 'create.object',
database: 'crudSync',
array: 'deleted',
object: { _id: ObjectId(), item: response }
})
}
if (data.method.startsWith('delete')) {
indexeddb.send({
method: 'create.object',
database: 'crudSync',
array: 'deleted',
object: { _id: ObjectId(), item: response }
})
}
this.socket.send(response).then((response) => {
let type = data.method.split('.');
type = type[type.length - 1];
if (type && response[type] && response[type].length) {
if (data.broadcastBrowser !== false && data.broadcastBrowser !== 'false')
response['broadcastBrowser'] = true
resolve(response);
})
response.status = 'resolved'
this.socket.send(response)
} else {
this.socket.send(response).then((response) => {
resolve(response);
})
}
})

@@ -121,19 +130,2 @@ } else {

getOrganizationId: function () {
return new Promise(async (resolve) => {
let organization_id = this.socket.config.organization_id || localStorage.getItem('organization_id')
if (organization_id)
resolve(organization_id)
else {
let test = setTimeout(() => {
organization_id = this.socket.config.organization_id || localStorage.getItem('organization_id')
if (organization_id)
resolve(organization_id)
}, 1000)
}
});
},
listen: function (method, callback) {

@@ -144,3 +136,2 @@ // TODO: this.socket.listen('crud.' + method, callback);

// TODO: could be handeled by sharedworker once support is more widespread https://caniuse.com/sharedworkers
syncListeners: function () {

@@ -162,130 +153,30 @@ const method = ['create', 'read', 'update', 'delete'];

sync: async function (data) {
const self = this
if (indexeddb && data.uid && data.status == 'received') {
if (data.method == 'read.array' || data.method == 'read.object') {
// TODO: on page refresh clientId is updated may require a browserId to group all clientIds
if (this.socket.clientId == data.clientId)
self.syncDatabase(data)
if (data.method.startsWith('read.') && this.socket.has(data.socketId)) {
const self = this
let type = data.method.split(".")[1]
let deletedItems = await this.getDeletedItems()
let isDeleted = '' // this.isDeleted(type, items[i], deletedItems)
} else {
if (this.socket.clientId != data.clientId) {
indexeddb.send({
method: "read.object",
database: 'crudSync',
array: 'synced',
object: { _id: data.uid }
}).then((response) => {
if (!response.object || !response.object[0]) {
indexeddb.send({
method: "create.object",
database: 'crudSync',
array: 'synced',
object: { _id: data.uid }
})
indexeddb.send({ ...data })
}
if (isDeleted) {
console.log('sync failed item recently deleted')
} else {
let response = await indexeddb.send({
method: 'update.' + type,
[type]: data[type],
$filter: {
query: [
// { key: 'modified.on', value: data.modified.on, operator: '$gt' },
{ key: 'modified.on', value: data.timeStamp, operator: '$lt' }
]
},
organization_id: data.organization_id
})
}
}
}
},
syncDatabase: async function (data) {
const self = this
let type = data.method.split(".")[1]
let db
let Data = { ...data }
Data.type = type
Data[type] = []
let deletedItems = await this.getDeletedItems()
let items = data[type];
if (!Array.isArray(items) && items != undefined)
items = [items]
let itemsLength = items.length
for (let i = 0; i < items.length; i++) {
let isDeleted = this.isDeleted(type, items[i], deletedItems)
if (isDeleted) {
console.log('sync failed item recently deleted')
} else {
if (!db) {
db = await indexeddb.send({ method: 'get.database', database: items[i].$database })
} else if (db.name != items[i].database) {
db.close()
db = await indexeddb.send({ method: 'get.database', database: items[i].$database })
if (response)
self.socket.sendLocalMessage(response)
}
if (type == 'array') {
itemsLength -= 1
let objectStoreNames = Array.from(db.objectStoreNames)
if (!objectStoreNames.includes(items[i].name)) {
Data.request.push(items[i].name)
Data[type].push(items[i])
}
if (!itemsLength) {
db.close()
if (Data.array.length) {
indexeddb.send({ ...Data })
self.broadcastSynced('sync', Data)
}
}
}
if (type == 'object' && items[i].array && items[i]._id) {
let transaction = db.transaction([items[i].$array], "readwrite");
let array = transaction.objectStore(items[i].$array);
let request = array.get(items[i]._id);
request.onsuccess = function () {
itemsLength -= 1
let storedDoc = request.result
let storedDocCompare, docCompare
let Doc = { ...items[i] }
delete items[i].$storage
delete items[i].$database
delete items[i].$array
if (storedDoc) {
storedDocCompare = storedDoc.modified || storedDoc.created
docCompare = items[i].modified || items[i].created
// TODO: on page load objects can be updated resulting in a false compare. needs to sync
if (storedDocCompare && docCompare) {
if (Doc.array == 'crdt-transactions')
console.log('crdt-transactions', Doc)
console.log('isSyncable', storedDocCompare.on, storedDocCompare.on < docCompare.on, docCompare.on)
if (storedDocCompare.on < docCompare.on) {
Data.object.push(Doc)
array.put(items[i])
} else {
}
}
} else {
Data.object.push(Doc)
array.put(items[i])
}
if (!itemsLength) {
db.close()
self.broadcastSynced('sync', Data)
}
}
request.onerror = function () {
itemsLength -= 1
if (!itemsLength) {
db.close()
}
console.log('sync failed', items[i])
}
}
} else if (this.socket.clientId != data.clientId) {
indexeddb.send({ ...data })
}

@@ -346,10 +237,2 @@ }

broadcastSynced: function (action, data) {
const listeners = this.socket.listeners.get(action);
if (listeners)
listeners.forEach(listener => {
listener(data);
});
},
syncServer: function () {

@@ -356,0 +239,0 @@ const self = this;

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc