loro-crdt 0.15.4 → 0.16.1

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,3 +0,0 @@
1
- {
2
- "deno.enable": true
3
- }
package/deno/deno.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@loro/loro",
3
- "version": "0.1.0",
4
- "exports": "./mod.ts"
5
- }
package/deno/mod.ts DELETED
@@ -1 +0,0 @@
1
- export * from "npm:loro-crdt@0.14.2";
package/deno/test.ts DELETED
@@ -1,13 +0,0 @@
1
- import { Loro } from "./mod.ts";
2
- import { expect } from 'npm:expect'
3
-
4
- Deno.test("test", () => {
5
- const doc = new Loro();
6
- const text = doc.getText("text");
7
- text.insert(0, "123")
8
- expect(text.toString()).toEqual("123");
9
- text.insert(0, "123")
10
- expect(text.toString()).toEqual("123123");
11
- const docB = Loro.fromSnapshot(doc.exportSnapshot());
12
- expect(docB.getText('text').toString()).toEqual("123123");
13
- })
package/rollup.config.mjs DELETED
@@ -1,37 +0,0 @@
1
- import { defineConfig } from "rollup";
2
- import dts from "rollup-plugin-dts";
3
- import esbuild from "rollup-plugin-esbuild";
4
- import packageJson from "./package.json" assert { type: "json" };
5
-
6
- const name = packageJson.main.replace(/\.js$/, "");
7
-
8
- const bundle = (config) => ({
9
- ...config,
10
- input: "src/index.ts",
11
- external: (id) => !/^[./]/.test(id),
12
- });
13
-
14
- export default defineConfig([
15
- bundle({
16
- plugins: [esbuild()],
17
- output: [
18
- {
19
- file: `${name}.js`,
20
- format: "cjs",
21
- sourcemap: true,
22
- },
23
- {
24
- file: `${name}.mjs`,
25
- format: "es",
26
- sourcemap: true,
27
- },
28
- ],
29
- }),
30
- bundle({
31
- plugins: [dts()],
32
- output: {
33
- file: `${name}.d.ts`,
34
- format: "es",
35
- },
36
- }),
37
- ]);
package/src/awareness.ts DELETED
@@ -1,108 +0,0 @@
1
- import { AwarenessWasm, PeerID, Value } from "loro-wasm";
2
-
3
- export type AwarenessListener = (
4
- arg: { updated: PeerID[]; added: PeerID[]; removed: PeerID[] },
5
- origin: "local" | "timeout" | "remote" | string,
6
- ) => void;
7
-
8
- /**
9
- * Awareness is a structure that allows to track the ephemeral state of the peers.
10
- *
11
- * If we don't receive a state update from a peer within the timeout, we will remove their state.
12
- * The timeout is in milliseconds. This can be used to handle the off-line state of a peer.
13
- */
14
- export class Awareness<T extends Value = Value> {
15
- inner: AwarenessWasm<T>;
16
- private peer: PeerID;
17
- private timer: number | undefined;
18
- private timeout: number;
19
- private listeners: Set<AwarenessListener> = new Set();
20
- constructor(peer: PeerID, timeout: number = 30000) {
21
- this.inner = new AwarenessWasm(peer, timeout);
22
- this.peer = peer;
23
- this.timeout = timeout;
24
- }
25
-
26
- apply(bytes: Uint8Array, origin = "remote") {
27
- const { updated, added } = this.inner.apply(bytes);
28
- this.listeners.forEach((listener) => {
29
- listener({ updated, added, removed: [] }, origin);
30
- });
31
-
32
- this.startTimerIfNotEmpty();
33
- }
34
-
35
- setLocalState(state: T) {
36
- const wasEmpty = this.inner.getState(this.peer) == null;
37
- this.inner.setLocalState(state);
38
- if (wasEmpty) {
39
- this.listeners.forEach((listener) => {
40
- listener(
41
- { updated: [], added: [this.inner.peer()], removed: [] },
42
- "local",
43
- );
44
- });
45
- } else {
46
- this.listeners.forEach((listener) => {
47
- listener(
48
- { updated: [this.inner.peer()], added: [], removed: [] },
49
- "local",
50
- );
51
- });
52
- }
53
-
54
- this.startTimerIfNotEmpty();
55
- }
56
-
57
- getLocalState(): T | undefined {
58
- return this.inner.getState(this.peer);
59
- }
60
-
61
- getAllStates(): Record<PeerID, T> {
62
- return this.inner.getAllStates();
63
- }
64
-
65
- encode(peers: PeerID[]): Uint8Array {
66
- return this.inner.encode(peers);
67
- }
68
-
69
- encodeAll(): Uint8Array {
70
- return this.inner.encodeAll();
71
- }
72
-
73
- addListener(listener: AwarenessListener) {
74
- this.listeners.add(listener);
75
- }
76
-
77
- removeListener(listener: AwarenessListener) {
78
- this.listeners.delete(listener);
79
- }
80
-
81
- peers(): PeerID[] {
82
- return this.inner.peers();
83
- }
84
-
85
- destroy() {
86
- clearInterval(this.timer);
87
- this.listeners.clear();
88
- }
89
-
90
- private startTimerIfNotEmpty() {
91
- if (this.inner.isEmpty() || this.timer != null) {
92
- return;
93
- }
94
-
95
- this.timer = setInterval(() => {
96
- const removed = this.inner.removeOutdated();
97
- if (removed.length > 0) {
98
- this.listeners.forEach((listener) => {
99
- listener({ updated: [], added: [], removed }, "timeout");
100
- });
101
- }
102
- if (this.inner.isEmpty()) {
103
- clearInterval(this.timer);
104
- this.timer = undefined;
105
- }
106
- }, this.timeout / 2) as unknown as number;
107
- }
108
- }