@cr_docs_t/dts 0.0.5 → 0.0.7-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,16 @@
1
- import FNode from "./FNode";
1
+ import { FugueState } from "../types/Fugue";
2
2
  import UniquelyDenseTotalOrder from "../TotalOrder/UniquelyDenseTotalOrder";
3
+ import { FugueMessage } from "../types/Message";
3
4
  /**
4
5
  * A Fugue List CRDT, with insert and delete operations
5
6
  */
6
7
  declare class FugueList<P> {
7
- state: FNode<P>[][];
8
+ state: FugueState<P>;
8
9
  totalOrder: UniquelyDenseTotalOrder<P>;
9
10
  positionCounter: number;
10
- constructor(totalOrder: UniquelyDenseTotalOrder<P>);
11
+ ws: WebSocket | null;
12
+ constructor(totalOrder: UniquelyDenseTotalOrder<P>, ws: WebSocket | null);
13
+ private propagate;
11
14
  /**
12
15
  * Inserts new element with 'value' at 'index' in the list
13
16
  * @param index - Index to insert 'value' at
@@ -20,6 +23,7 @@ declare class FugueList<P> {
20
23
  */
21
24
  delete(index: number): void;
22
25
  observe(): string;
26
+ effect(msg: FugueMessage<P>): void;
23
27
  }
24
28
  export default FugueList;
25
29
  //# sourceMappingURL=FugueList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FugueList.d.ts","sourceRoot":"","sources":["../../src/Fugue/FugueList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,uBAAuB,MAAM,uCAAuC,CAAC;AAE5E;;GAEG;AACH,cAAM,SAAS,CAAC,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAM;IACzB,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACvC,eAAe,SAAK;gBAER,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAIlD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IA+BnC;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM;IASpB,OAAO,IAAI,MAAM;CAepB;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"FugueList.d.ts","sourceRoot":"","sources":["../../src/Fugue/FugueList.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,uBAAuB,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAa,MAAM,kBAAkB,CAAC;AAE3D;;GAEG;AACH,cAAM,SAAS,CAAC,CAAC;IACb,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAM;IAC1B,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACvC,eAAe,SAAK;IACpB,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;gBAET,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;IAKxE,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAsCnC;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM;IAgBpB,OAAO,IAAI,MAAM;IAgBjB,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;CAc9B;AAED,eAAe,SAAS,CAAC"}
@@ -1,12 +1,19 @@
1
1
  import FNode from "./FNode";
2
+ import { Operation } from "../types/Message";
2
3
  /**
3
4
  * A Fugue List CRDT, with insert and delete operations
4
5
  */
5
6
  class FugueList {
6
- constructor(totalOrder) {
7
+ constructor(totalOrder, ws) {
7
8
  this.state = [];
8
9
  this.positionCounter = 0;
9
10
  this.totalOrder = totalOrder;
11
+ this.ws = ws;
12
+ }
13
+ propagate(msg) {
14
+ if (!this.ws)
15
+ return;
16
+ this.ws.send(JSON.stringify(msg));
10
17
  }
11
18
  /**
12
19
  * Inserts new element with 'value' at 'index' in the list
@@ -42,6 +49,12 @@ class FugueList {
42
49
  atIndex.push(new FNode(this.totalOrder.createBetween(a.position), value));
43
50
  }
44
51
  }
52
+ // Send to replicas
53
+ this.propagate({
54
+ operation: Operation.INSERT,
55
+ position: index,
56
+ data: value,
57
+ });
45
58
  }
46
59
  /**
47
60
  * Delete value in the list at index
@@ -54,6 +67,12 @@ class FugueList {
54
67
  i++;
55
68
  }
56
69
  this.state.pop();
70
+ // Send to replicas
71
+ this.propagate({
72
+ operation: Operation.DELETE,
73
+ position: index,
74
+ data: null,
75
+ });
57
76
  }
58
77
  observe() {
59
78
  let res = new String();
@@ -70,5 +89,20 @@ class FugueList {
70
89
  }
71
90
  return res.toString();
72
91
  }
92
+ effect(msg) {
93
+ // On
94
+ const { operation, data, position } = msg;
95
+ switch (operation) {
96
+ // Operation.INSERT -> insert
97
+ case Operation.INSERT:
98
+ if (!data)
99
+ throw Error("Data is required for Operation.INSERT");
100
+ this.insert(position, data);
101
+ // Operation.DELETE -> delete
102
+ case Operation.DELETE:
103
+ this.delete(position);
104
+ }
105
+ throw Error("Invalid operation");
106
+ }
73
107
  }
74
108
  export default FugueList;
package/dist/index.d.ts CHANGED
@@ -2,5 +2,7 @@ import FugueList from "./Fugue/FugueList";
2
2
  import CausalTree from "./CausalTree/CausalTree";
3
3
  import UniquelyDenseTotalOrder from "./TotalOrder/UniquelyDenseTotalOrder";
4
4
  import StringTotalOrder from "./TotalOrder/StringTotalOrder";
5
- export { FugueList, CausalTree, UniquelyDenseTotalOrder, StringTotalOrder, };
5
+ import { FugueMessage } from "./types/Message";
6
+ import { FugueState } from "./types/Fugue";
7
+ export { FugueList, CausalTree, UniquelyDenseTotalOrder, StringTotalOrder, FugueMessage, FugueState, };
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,uBAAuB,MAAM,sCAAsC,CAAC;AAC3E,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAEH,SAAS,EACT,UAAU,EAEV,uBAAuB,EACvB,gBAAgB,GAEnB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,uBAAuB,MAAM,sCAAsC,CAAC;AAC3E,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAEH,SAAS,EACT,UAAU,EAEV,uBAAuB,EACvB,gBAAgB,EAGhB,YAAY,EACZ,UAAU,GACb,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,4 @@ import CausalTree from "./CausalTree/CausalTree";
3
3
  import StringTotalOrder from "./TotalOrder/StringTotalOrder";
4
4
  export {
5
5
  // Data Types
6
- FugueList, CausalTree, StringTotalOrder,
7
- // Utilities
8
- };
6
+ FugueList, CausalTree, StringTotalOrder, };
@@ -0,0 +1,3 @@
1
+ import FNode from "../Fugue/FNode";
2
+ export type FugueState<P> = FNode<P>[][];
3
+ //# sourceMappingURL=Fugue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fugue.d.ts","sourceRoot":"","sources":["../../src/types/Fugue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEnC,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ export declare enum Operation {
2
+ INSERT = 0,
3
+ DELETE = 1
4
+ }
5
+ export type Position = number;
6
+ export type Data = string;
7
+ export interface FugueMessage<P> {
8
+ operation: Operation;
9
+ position: number;
10
+ data: Data | null;
11
+ }
12
+ //# sourceMappingURL=Message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/types/Message.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACjB,MAAM,IAAA;IACN,MAAM,IAAA;CACT;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAE1B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACrB"}
@@ -0,0 +1,5 @@
1
+ export var Operation;
2
+ (function (Operation) {
3
+ Operation[Operation["INSERT"] = 0] = "INSERT";
4
+ Operation[Operation["DELETE"] = 1] = "DELETE";
5
+ })(Operation || (Operation = {}));
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@cr_docs_t/dts",
3
- "version": "0.0.5",
3
+ "version": "0.0.7-alpha.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "prepublishOnly": "npm run build"
10
+ },
7
11
  "exports": {
8
12
  ".": {
9
13
  "import": "./dist/index.js",
@@ -16,14 +20,12 @@
16
20
  "Tanitoluwa Olamiji Adebayo"
17
21
  ],
18
22
  "license": "ISC",
23
+ "packageManager": "pnpm@10.20.0",
19
24
  "devDependencies": {
20
25
  "@types/node": "^24.10.1",
21
26
  "typescript": "^5.9.3"
22
27
  },
23
28
  "files": [
24
29
  "dist"
25
- ],
26
- "scripts": {
27
- "build": "tsc"
28
- }
29
- }
30
+ ]
31
+ }