@absolutejs/sync-loro 0.0.2 → 0.0.4

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.
package/README.md CHANGED
@@ -48,4 +48,4 @@ compatibility; Loro assigns a peer id internally.
48
48
 
49
49
  ## License
50
50
 
51
- CC BY-NC 4.0
51
+ Apache License 2.0. See [LICENSE](./LICENSE).
package/dist/index.js CHANGED
@@ -1,4 +1,19 @@
1
1
  // @bun
2
+ var __defProp = Object.defineProperty;
3
+ var __returnValue = (v) => v;
4
+ function __exportSetter(name, newValue) {
5
+ this[name] = __returnValue.bind(null, newValue);
6
+ }
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true,
12
+ configurable: true,
13
+ set: __exportSetter.bind(all, name)
14
+ });
15
+ };
16
+
2
17
  // src/index.ts
3
18
  import { LoroDoc } from "loro-crdt";
4
19
  var TEXT_KEY = "text";
@@ -82,5 +97,5 @@ export {
82
97
  createLoroText
83
98
  };
84
99
 
85
- //# debugId=F14EF622F649D70764756E2164756E21
100
+ //# debugId=31F5A6D18D533C6064756E2164756E21
86
101
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * A [Loro](https://loro.dev)-backed collaborative-text CRDT for `@absolutejs/sync`,\n * behind the same `CrdtText` / `TextCrdtAdapter` contract as the first-party\n * `rgaText` and `@absolutejs/sync-yjs`. Loro is a fast, Rust/wasm CRDT library;\n * swapping `rgaText` for `loroText` needs no other change at the call site.\n *\n * The serialized state is a **base64 string** of a Loro snapshot, so it stays\n * JSON-safe for the sync engine's change feed and row storage. Merges are\n * commutative/associative/idempotent.\n */\nimport type { CrdtText, TextCrdtAdapter } from '@absolutejs/sync/crdt';\nimport { LoroDoc } from 'loro-crdt';\n\nconst TEXT_KEY = 'text';\n\nconst toBase64 = (bytes: Uint8Array): string => {\n\tlet binary = '';\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\n\treturn btoa(binary);\n};\n\nconst fromBase64 = (base64: string): Uint8Array => {\n\tconst binary = atob(base64);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let index = 0; index < binary.length; index += 1) {\n\t\tbytes[index] = binary.charCodeAt(index);\n\t}\n\n\treturn bytes;\n};\n\nconst snapshot = (doc: LoroDoc): string =>\n\ttoBase64(doc.export({ mode: 'snapshot' }));\n\nconst docFrom = (state?: string): LoroDoc => {\n\tconst doc = new LoroDoc();\n\tif (state !== undefined && state.length > 0) {\n\t\tdoc.import(fromBase64(state));\n\t}\n\n\treturn doc;\n};\n\n// Reconcile `text` to `next` by editing only the changed middle.\nconst reconcile = (text: ReturnType<LoroDoc['getText']>, next: string) => {\n\tconst current = text.toString();\n\tif (current === next) {\n\t\treturn;\n\t}\n\tlet prefix = 0;\n\tconst maxPrefix = Math.min(current.length, next.length);\n\twhile (prefix < maxPrefix && current[prefix] === next[prefix]) {\n\t\tprefix += 1;\n\t}\n\tlet suffix = 0;\n\twhile (\n\t\tsuffix < maxPrefix - prefix &&\n\t\tcurrent[current.length - 1 - suffix] === next[next.length - 1 - suffix]\n\t) {\n\t\tsuffix += 1;\n\t}\n\tconst removed = current.length - prefix - suffix;\n\tconst inserted = next.slice(prefix, next.length - suffix);\n\tif (removed > 0) {\n\t\ttext.delete(prefix, removed);\n\t}\n\tif (inserted.length > 0) {\n\t\ttext.insert(prefix, inserted);\n\t}\n};\n\n/** Create a live Loro-backed collaborative-text doc for `replica`. */\nexport const createLoroText = (\n\treplica: string,\n\tinitial?: string\n): CrdtText<string> => {\n\tconst doc = docFrom(initial);\n\tconst text = doc.getText(TEXT_KEY);\n\n\treturn {\n\t\tmerge: (state) => {\n\t\t\tif (state.length > 0) {\n\t\t\t\tdoc.import(fromBase64(state));\n\t\t\t}\n\t\t},\n\t\tsetText: (next) => {\n\t\t\treconcile(text, next);\n\t\t\tdoc.commit();\n\t\t},\n\t\tstate: () => snapshot(doc),\n\t\ttext: () => text.toString()\n\t};\n};\n\n/**\n * The Loro collaborative-text backend as a {@link TextCrdtAdapter}. Drop-in for\n * the first-party `rgaText`. The `replica` argument is accepted for contract\n * compatibility; Loro assigns a peer id internally.\n */\nexport const loroText: TextCrdtAdapter<string> = {\n\tcreate: createLoroText,\n\tempty: () => snapshot(new LoroDoc()),\n\tmerge: (a, b) => {\n\t\tconst doc = docFrom(a);\n\t\tif (b.length > 0) {\n\t\t\tdoc.import(fromBase64(b));\n\t\t}\n\n\t\treturn snapshot(doc);\n\t},\n\ttextOf: (state) => docFrom(state).getText(TEXT_KEY).toString()\n};\n"
6
6
  ],
7
- "mappings": ";;AAWA;AAEA,IAAM,WAAW;AAEjB,IAAM,WAAW,CAAC,UAA8B;AAAA,EAC/C,IAAI,SAAS;AAAA,EACb,WAAW,QAAQ,OAAO;AAAA,IACzB,UAAU,OAAO,aAAa,IAAI;AAAA,EACnC;AAAA,EAEA,OAAO,KAAK,MAAM;AAAA;AAGnB,IAAM,aAAa,CAAC,WAA+B;AAAA,EAClD,MAAM,SAAS,KAAK,MAAM;AAAA,EAC1B,MAAM,QAAQ,IAAI,WAAW,OAAO,MAAM;AAAA,EAC1C,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,IACtD,MAAM,SAAS,OAAO,WAAW,KAAK;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA;AAGR,IAAM,WAAW,CAAC,QACjB,SAAS,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC,CAAC;AAE1C,IAAM,UAAU,CAAC,UAA4B;AAAA,EAC5C,MAAM,MAAM,IAAI;AAAA,EAChB,IAAI,UAAU,aAAa,MAAM,SAAS,GAAG;AAAA,IAC5C,IAAI,OAAO,WAAW,KAAK,CAAC;AAAA,EAC7B;AAAA,EAEA,OAAO;AAAA;AAIR,IAAM,YAAY,CAAC,MAAsC,SAAiB;AAAA,EACzE,MAAM,UAAU,KAAK,SAAS;AAAA,EAC9B,IAAI,YAAY,MAAM;AAAA,IACrB;AAAA,EACD;AAAA,EACA,IAAI,SAAS;AAAA,EACb,MAAM,YAAY,KAAK,IAAI,QAAQ,QAAQ,KAAK,MAAM;AAAA,EACtD,OAAO,SAAS,aAAa,QAAQ,YAAY,KAAK,SAAS;AAAA,IAC9D,UAAU;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AAAA,EACb,OACC,SAAS,YAAY,UACrB,QAAQ,QAAQ,SAAS,IAAI,YAAY,KAAK,KAAK,SAAS,IAAI,SAC/D;AAAA,IACD,UAAU;AAAA,EACX;AAAA,EACA,MAAM,UAAU,QAAQ,SAAS,SAAS;AAAA,EAC1C,MAAM,WAAW,KAAK,MAAM,QAAQ,KAAK,SAAS,MAAM;AAAA,EACxD,IAAI,UAAU,GAAG;AAAA,IAChB,KAAK,OAAO,QAAQ,OAAO;AAAA,EAC5B;AAAA,EACA,IAAI,SAAS,SAAS,GAAG;AAAA,IACxB,KAAK,OAAO,QAAQ,QAAQ;AAAA,EAC7B;AAAA;AAIM,IAAM,iBAAiB,CAC7B,SACA,YACsB;AAAA,EACtB,MAAM,MAAM,QAAQ,OAAO;AAAA,EAC3B,MAAM,OAAO,IAAI,QAAQ,QAAQ;AAAA,EAEjC,OAAO;AAAA,IACN,OAAO,CAAC,UAAU;AAAA,MACjB,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,IAAI,OAAO,WAAW,KAAK,CAAC;AAAA,MAC7B;AAAA;AAAA,IAED,SAAS,CAAC,SAAS;AAAA,MAClB,UAAU,MAAM,IAAI;AAAA,MACpB,IAAI,OAAO;AAAA;AAAA,IAEZ,OAAO,MAAM,SAAS,GAAG;AAAA,IACzB,MAAM,MAAM,KAAK,SAAS;AAAA,EAC3B;AAAA;AAQM,IAAM,WAAoC;AAAA,EAChD,QAAQ;AAAA,EACR,OAAO,MAAM,SAAS,IAAI,OAAS;AAAA,EACnC,OAAO,CAAC,GAAG,MAAM;AAAA,IAChB,MAAM,MAAM,QAAQ,CAAC;AAAA,IACrB,IAAI,EAAE,SAAS,GAAG;AAAA,MACjB,IAAI,OAAO,WAAW,CAAC,CAAC;AAAA,IACzB;AAAA,IAEA,OAAO,SAAS,GAAG;AAAA;AAAA,EAEpB,QAAQ,CAAC,UAAU,QAAQ,KAAK,EAAE,QAAQ,QAAQ,EAAE,SAAS;AAC9D;",
8
- "debugId": "F14EF622F649D70764756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;AAWA;AAEA,IAAM,WAAW;AAEjB,IAAM,WAAW,CAAC,UAA8B;AAAA,EAC/C,IAAI,SAAS;AAAA,EACb,WAAW,QAAQ,OAAO;AAAA,IACzB,UAAU,OAAO,aAAa,IAAI;AAAA,EACnC;AAAA,EAEA,OAAO,KAAK,MAAM;AAAA;AAGnB,IAAM,aAAa,CAAC,WAA+B;AAAA,EAClD,MAAM,SAAS,KAAK,MAAM;AAAA,EAC1B,MAAM,QAAQ,IAAI,WAAW,OAAO,MAAM;AAAA,EAC1C,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,IACtD,MAAM,SAAS,OAAO,WAAW,KAAK;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA;AAGR,IAAM,WAAW,CAAC,QACjB,SAAS,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC,CAAC;AAE1C,IAAM,UAAU,CAAC,UAA4B;AAAA,EAC5C,MAAM,MAAM,IAAI;AAAA,EAChB,IAAI,UAAU,aAAa,MAAM,SAAS,GAAG;AAAA,IAC5C,IAAI,OAAO,WAAW,KAAK,CAAC;AAAA,EAC7B;AAAA,EAEA,OAAO;AAAA;AAIR,IAAM,YAAY,CAAC,MAAsC,SAAiB;AAAA,EACzE,MAAM,UAAU,KAAK,SAAS;AAAA,EAC9B,IAAI,YAAY,MAAM;AAAA,IACrB;AAAA,EACD;AAAA,EACA,IAAI,SAAS;AAAA,EACb,MAAM,YAAY,KAAK,IAAI,QAAQ,QAAQ,KAAK,MAAM;AAAA,EACtD,OAAO,SAAS,aAAa,QAAQ,YAAY,KAAK,SAAS;AAAA,IAC9D,UAAU;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AAAA,EACb,OACC,SAAS,YAAY,UACrB,QAAQ,QAAQ,SAAS,IAAI,YAAY,KAAK,KAAK,SAAS,IAAI,SAC/D;AAAA,IACD,UAAU;AAAA,EACX;AAAA,EACA,MAAM,UAAU,QAAQ,SAAS,SAAS;AAAA,EAC1C,MAAM,WAAW,KAAK,MAAM,QAAQ,KAAK,SAAS,MAAM;AAAA,EACxD,IAAI,UAAU,GAAG;AAAA,IAChB,KAAK,OAAO,QAAQ,OAAO;AAAA,EAC5B;AAAA,EACA,IAAI,SAAS,SAAS,GAAG;AAAA,IACxB,KAAK,OAAO,QAAQ,QAAQ;AAAA,EAC7B;AAAA;AAIM,IAAM,iBAAiB,CAC7B,SACA,YACsB;AAAA,EACtB,MAAM,MAAM,QAAQ,OAAO;AAAA,EAC3B,MAAM,OAAO,IAAI,QAAQ,QAAQ;AAAA,EAEjC,OAAO;AAAA,IACN,OAAO,CAAC,UAAU;AAAA,MACjB,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,IAAI,OAAO,WAAW,KAAK,CAAC;AAAA,MAC7B;AAAA;AAAA,IAED,SAAS,CAAC,SAAS;AAAA,MAClB,UAAU,MAAM,IAAI;AAAA,MACpB,IAAI,OAAO;AAAA;AAAA,IAEZ,OAAO,MAAM,SAAS,GAAG;AAAA,IACzB,MAAM,MAAM,KAAK,SAAS;AAAA,EAC3B;AAAA;AAQM,IAAM,WAAoC;AAAA,EAChD,QAAQ;AAAA,EACR,OAAO,MAAM,SAAS,IAAI,OAAS;AAAA,EACnC,OAAO,CAAC,GAAG,MAAM;AAAA,IAChB,MAAM,MAAM,QAAQ,CAAC;AAAA,IACrB,IAAI,EAAE,SAAS,GAAG;AAAA,MACjB,IAAI,OAAO,WAAW,CAAC,CAAC;AAAA,IACzB;AAAA,IAEA,OAAO,SAAS,GAAG;AAAA;AAAA,EAEpB,QAAQ,CAAC,UAAU,QAAQ,KAAK,EAAE,QAAQ,QAAQ,EAAE,SAAS;AAC9D;",
8
+ "debugId": "31F5A6D18D533C6064756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,9 @@
1
+ export declare const manifest: Omit<import("@absolutejs/manifest").PackageManifest<Record<never, never>, never>, "contract" | "settings" | "tools"> & (({
2
+ contract: 1;
3
+ tools?: Record<string, import("@absolutejs/manifest").LegacyManifestTool<never>> | undefined;
4
+ } | {
5
+ contract: 2;
6
+ tools?: Record<string, import("@absolutejs/manifest").AuthorizedManifestTool<never>> | undefined;
7
+ }) & {
8
+ settings: import("@sinclair/typebox").TObject<{}>;
9
+ });