![Namecheap Takes Down Polyfill.io Service Following Supply Chain Attack](https://cdn.sanity.io/images/cgdhsj6q/production/6af25114feaaac7179b18127c83327568ff592d1-1024x1024.webp?w=800&fit=max&auto=format)
Security News
Namecheap Takes Down Polyfill.io Service Following Supply Chain Attack
Polyfill.io has been serving malware for months via its CDN, after the project's open source maintainer sold the service to a company based in China.
crdt
Advanced tools
Readme
#CRDT - Commutative Replicated Data Types
a CRDT is a data type designed so that operations on it commute - give the same result indepent of the order in which they are applied.
CRDTs give you eventual consistency for free. it is not necessary to track concurrent changes and use complicated merge algorithms. this module is useful for collaborative/distributed/peer2peer (same things) applications.
Further Reading: A comprehensive study of Convergent and Commutative Replicated Data Types
create two documents,
var Doc = require('crdt').Doc
var A = new Doc()
var B = new Doc()
then pipe them together
var as
(as = A.createStream())
.pipe(B.createStream())
.pipe(as)
We just replicated two documents with in the same process... this is the idea, but of course, we want to do it on different machines...
notice the pattern is basically the same...
the client side ...
var net = require('net')
var es = require('es')
var Doc = require('crdt').Doc
var A = new Doc()
var stream
(stream = net.connect())
.pipe(A.createStream())
.pipe(stream)
and the server ...
var net = require('net')
var es = require('es')
var Doc = require('crdt').Doc
var A = new Doc()
net.createServer(function (stream) {
stream
.pipe(A.createStream())
.pipe(stream)
})
Add a Row
to the document initialized to obj
.
If obj
doesn't have a unique id
property, a random key will be created.
Return the Row
object.
Get a Row
from the document by id
.
Sets Row
with ID id
to doc
. Returns the Row
. It has all the effects and
implications of calling Row#set
.
Remove a Row
from the document by id
Also removes from all sets as well.
Returns a raw Doc
object.
Create a Set
a set is a collection of rows defined by a particular
value on a particular property.
var cheeses = doc.createSet('type', 'cheese')
key
and value
must both be strings.
You can also create a Set
using a filter function.
var cheeses = doc.createSet(function (state) {
return state.type === 'cheese'
})
A filter function should just be a more expressive filter and shouldn't be a stateful function
same as Doc#createSet
except that seqs have a significant order.
sequences can also be created with a filter using Doc#createSeq(filter)
create a stream that is used to connect to another Doc instance.
Emitted when a new Row
is created
Emitted when a new Row
is updated
an object with in a crdt Doc
set key
to value
. if Row#set(obj)
is called instead
all the keys in obj will update atomically.
This causes a 'change' event to be emitted, and an update message to be sent down the stream. (note, if the stream in not yet connected, that is okay, current state of the document is replicated as soon as the streams are connected.)
get the current value for a key.
return a raw object ready for serialization. this is not a JSON string yet, misleading name, but that is the correct JSON.stringify api.
Emitted when a row is changed. this may be the result of a local or a remote update.
changed is the a hash of the fields that have changed.
Emitted when a row is removed. This may be the result of a local or a remote update.
A collection of Rows
within a document.
get the contents of this set as a regular js Array
calls toJSON
on the each Row
in the set and puts it in an array.
check if a row|id is a member of the set.
get an item in this set, if it exists.
Iterate over the Rows
in the set.
Iterate over the Rows
in the set and any new row that may be
added to the set in the future.
removes a row from the set. sets the set's key
, to null.
note, if you have multiple sets with the same key, they are mutually exclusive,
and adding a node to a different set will remove it from the first one.
Emitted when a row is added to the set.
Emitted when a row in the set changed. The changed value contains a hash of the key / values that changed.
Emitted when a row is removed from the set
just like a Set, but the items are ordered.
they will begiven a _sort
property.
get the first item in the seq.
get the last item in the seq.
check if a row|id is a member of the seq. (inherited from Set
)
find the index of the given row or id.
get the item currently at index
push a Row
onto the start of the Seq
push a Row
onto the end of the Seq
get the number of items currently in the Seq
.
remove the last item.
remove the first item.
insert item
before the given row/id
.
insert item
after the given row/id
.
Finds the item that is after this key
Finds the item that is before this key
Emitted when the row has changed it's position in the sequence
FAQs
Commutative Replicated Data Types for easy distributed/collaborative apps
The npm package crdt receives a total of 157 weekly downloads. As such, crdt popularity was classified as not popular.
We found that crdt demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Polyfill.io has been serving malware for months via its CDN, after the project's open source maintainer sold the service to a company based in China.
Security News
OpenSSF is warning open source maintainers to stay vigilant against reputation farming on GitHub, where users artificially inflate their status by manipulating interactions on closed issues and PRs.
Security News
A JavaScript library maintainer is under fire after merging a controversial PR to support legacy versions of Node.js.