Skip to content

Commit

Permalink
Merge pull request #23 from widmogrod/feature/default-export
Browse files Browse the repository at this point in the history
Better readme
  • Loading branch information
widmogrod authored Sep 2, 2017
2 parents bee698c + 93619ae commit 8b63a13
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 67 deletions.
72 changes: 23 additions & 49 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,37 @@
# js-crdt [![Build Status](https://travis-ci.org/widmogrod/js-crdt.svg?branch=master)](https://travis-ci.org/widmogrod/js-crdt)
## Introduction
CRDT Conflict-free Replication Data Type in JavaScript.
Real time collaboration is a fascinating concept.
Main purpose of this libriary it to explore applications of data structure called `CRDT` in context of real time collaboration
and learn answers to questions like:

## Development
```
npm install
npm run build
npm test
npm run lint
npm run dist
```
- How to write collaborative applications?
- How to ensure strong eventual consistency?
- What are limirations of CRDTs?

## How `crdt/Text` type with `order/discrete` should work? (WIP)
Consider two actors `a` and `b` working concurrently on some document.
Actor `a` and `b` have __same origin__ of the document `origin:0`.
For simplification, origin is not shown here.
> CRDT stands for Conflict-free Replication Data Type in JavaScript.
```
a:0
b:0
```
## Components
Compoents that can be found in this libriary:

First actor started working on version `a:0`, and did some changes `xxx`.
Actor `b` did not start working on document.
```
a:0 xxx
b:0
```
- Data structures like `Immutable SortedSet`, `Immutable Lists`, `Immutable Maps`
- Partial ordering algorithms like `Vector clock`
- Higher order component `text` that encapsulates operation on plain text that can be used in collaborative editing.

Actor `a` decided to send his version `a:1` to actor `b`,
but before that, he want to be sure that regardless if `b` receives his changes, he can continue on working his version of document.
so he created a snapshot `a:1` of his version of document and send changes to actor `b`.
## Applications
- https://github.com/widmogrod/notepad-app - Collaborative notepad app (demo).

```
a:0 xxx a:1
b:0
```

Actor `b` sees incoming changes `a:0` of the actor `a`,
so he merge them with his current state and create new version it `b:1 a:0`
```
a:0 xxx a:1
|
b:0 b:1 a:0
```

Actor `b` decides to add something to document `yyy`, and send his changes to actor `a`.
Actor `b` in the same manner, before sending his changes to actor `a`
he creates snapshot of his version of document `b:2 a:0` and send changes `b:1 a:0` to `a`.
## Development
Basic development requires at least `nodejs@8`.

To quickly start developmen run:
```
a:0 xxx a:1
|
b:0 b:1 a:0 yyy b:2 a:0
npm install --only=dev
npm test
```

When actor `a` sees incoming changes, he merge them with his document.
Before pull request run following commands to ensure code quality:
```
a:0 xxx a:1 a:2 b:1
| |
b:0 b:1 a:0 yyy b:2 a:0
npm test
npm run lint
npm run dist
```
10 changes: 9 additions & 1 deletion build/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,12 @@ import * as utils from './utils';
import * as order from './order';
import * as text from './text';
import * as structures from './structures';
export { text, order, utils, functions, increment, structures };
declare const _default: {
text: typeof text;
order: typeof order;
utils: typeof utils;
functions: typeof functions;
increment: typeof increment;
structures: typeof structures;
};
export default _default;
14 changes: 8 additions & 6 deletions build/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion build/index.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 8 additions & 6 deletions dist/crdt.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,19 @@ exports.Increment = Increment;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const functions = require("./functions");
exports.functions = functions;
const increment = require("./increment");
exports.increment = increment;
const utils = require("./utils");
exports.utils = utils;
const order = require("./order");
exports.order = order;
const text = require("./text");
exports.text = text;
const structures = require("./structures");
exports.structures = structures;
exports.default = {
text,
order,
utils,
functions,
increment,
structures
};

},{"./functions":1,"./increment":2,"./order":4,"./structures":7,"./text":15,"./utils":19}],4:[function(require,module,exports){
"use strict";
Expand Down
2 changes: 1 addition & 1 deletion dist/crdt.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "js-crdt",
"version": "1.3.4",
"version": "1.3.5",
"description": "CRDT Conflict-free Replication Data Type",
"main": "build/index.js",
"types": "build/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import * as order from './order';
import * as text from './text';
import * as structures from './structures';

export {
export default {
text,
order,
utils,
Expand Down

0 comments on commit 8b63a13

Please sign in to comment.