@absolutejs/sync-automerge 0.0.2 → 0.0.3

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; Automerge manages actor identity 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 * as Automerge from "@automerge/automerge";
4
19
  var toBase64 = (bytes) => {
@@ -69,5 +84,5 @@ export {
69
84
  automergeText
70
85
  };
71
86
 
72
- //# debugId=FB0D6126D29D984364756E2164756E21
87
+ //# debugId=AAAFB438DDF31EA164756E2164756E21
73
88
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * An Automerge-backed collaborative-text CRDT for `@absolutejs/sync`, behind the\n * same `CrdtText` / `TextCrdtAdapter` contract as the first-party `rgaText` and\n * `@absolutejs/sync-yjs`. Automerge is a mature, battle-tested CRDT library;\n * swapping `rgaText` for `automergeText` needs no other change at the call site.\n *\n * The serialized state is a **base64 string** of an Automerge document, so it\n * stays JSON-safe for the sync engine's change feed and row storage. Merges are\n * commutative/associative/idempotent, so a merge-on-write mutation combines\n * concurrent edits without clobbering.\n */\nimport type { CrdtText, TextCrdtAdapter } from '@absolutejs/sync/crdt';\nimport * as Automerge from '@automerge/automerge';\n\ntype Doc = { text: string };\n\n// Isomorphic base64 (browser + Bun expose btoa/atob), so the adapter runs\n// unchanged on the client and the server.\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 emptyDoc = (): Automerge.Doc<Doc> => Automerge.from<Doc>({ text: '' });\nconst encode = (doc: Automerge.Doc<Doc>): string =>\n\ttoBase64(Automerge.save(doc));\nconst decode = (state: string): Automerge.Doc<Doc> =>\n\tAutomerge.load<Doc>(fromBase64(state));\nconst load = (state: string): Automerge.Doc<Doc> =>\n\tstate.length > 0 ? decode(state) : emptyDoc();\n\n// Reconcile `text` to `next` by editing only the changed middle (keep the common\n// prefix/suffix), so two replicas editing different spots merge.\nconst reconcile = (\n\tdoc: Automerge.Doc<Doc>,\n\tnext: string\n): Automerge.Doc<Doc> => {\n\tconst current = doc.text;\n\tif (current === next) {\n\t\treturn doc;\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\n\treturn Automerge.change(doc, (draft) => {\n\t\tAutomerge.splice(draft, ['text'], prefix, removed, inserted);\n\t});\n};\n\n/** Create a live Automerge-backed collaborative-text doc for `replica`. */\nexport const createAutomergeText = (\n\treplica: string,\n\tinitial?: string\n): CrdtText<string> => {\n\tlet doc = initial !== undefined ? load(initial) : emptyDoc();\n\n\treturn {\n\t\tmerge: (state) => {\n\t\t\tif (state.length > 0) {\n\t\t\t\tdoc = Automerge.merge(doc, decode(state));\n\t\t\t}\n\t\t},\n\t\tsetText: (next) => {\n\t\t\tdoc = reconcile(doc, next);\n\t\t},\n\t\tstate: () => encode(doc),\n\t\ttext: () => doc.text\n\t};\n};\n\n/**\n * The Automerge collaborative-text backend as a {@link TextCrdtAdapter}. Drop-in\n * for the first-party `rgaText`. The `replica` argument is accepted for contract\n * compatibility; Automerge manages actor identity internally.\n */\nexport const automergeText: TextCrdtAdapter<string> = {\n\tcreate: createAutomergeText,\n\tempty: () => encode(emptyDoc()),\n\tmerge: (a, b) => {\n\t\tconst merged =\n\t\t\tb.length > 0 ? Automerge.merge(load(a), decode(b)) : load(a);\n\n\t\treturn encode(merged);\n\t},\n\ttextOf: (state) => load(state).text\n};\n"
6
6
  ],
7
- "mappings": ";;AAYA;AAMA,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,MAAoC,eAAU,EAAE,MAAM,GAAG,CAAC;AAC3E,IAAM,SAAS,CAAC,QACf,SAAmB,eAAK,GAAG,CAAC;AAC7B,IAAM,SAAS,CAAC,UACL,eAAU,WAAW,KAAK,CAAC;AACtC,IAAM,QAAO,CAAC,UACb,MAAM,SAAS,IAAI,OAAO,KAAK,IAAI,SAAS;AAI7C,IAAM,YAAY,CACjB,KACA,SACwB;AAAA,EACxB,MAAM,UAAU,IAAI;AAAA,EACpB,IAAI,YAAY,MAAM;AAAA,IACrB,OAAO;AAAA,EACR;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,EAExD,OAAiB,iBAAO,KAAK,CAAC,UAAU;AAAA,IAC7B,iBAAO,OAAO,CAAC,MAAM,GAAG,QAAQ,SAAS,QAAQ;AAAA,GAC3D;AAAA;AAIK,IAAM,sBAAsB,CAClC,SACA,YACsB;AAAA,EACtB,IAAI,MAAM,YAAY,YAAY,MAAK,OAAO,IAAI,SAAS;AAAA,EAE3D,OAAO;AAAA,IACN,OAAO,CAAC,UAAU;AAAA,MACjB,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,MAAgB,gBAAM,KAAK,OAAO,KAAK,CAAC;AAAA,MACzC;AAAA;AAAA,IAED,SAAS,CAAC,SAAS;AAAA,MAClB,MAAM,UAAU,KAAK,IAAI;AAAA;AAAA,IAE1B,OAAO,MAAM,OAAO,GAAG;AAAA,IACvB,MAAM,MAAM,IAAI;AAAA,EACjB;AAAA;AAQM,IAAM,gBAAyC;AAAA,EACrD,QAAQ;AAAA,EACR,OAAO,MAAM,OAAO,SAAS,CAAC;AAAA,EAC9B,OAAO,CAAC,GAAG,MAAM;AAAA,IAChB,MAAM,SACL,EAAE,SAAS,IAAc,gBAAM,MAAK,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,MAAK,CAAC;AAAA,IAE5D,OAAO,OAAO,MAAM;AAAA;AAAA,EAErB,QAAQ,CAAC,UAAU,MAAK,KAAK,EAAE;AAChC;",
8
- "debugId": "FB0D6126D29D984364756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;AAYA;AAMA,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,MAAoC,eAAU,EAAE,MAAM,GAAG,CAAC;AAC3E,IAAM,SAAS,CAAC,QACf,SAAmB,eAAK,GAAG,CAAC;AAC7B,IAAM,SAAS,CAAC,UACL,eAAU,WAAW,KAAK,CAAC;AACtC,IAAM,QAAO,CAAC,UACb,MAAM,SAAS,IAAI,OAAO,KAAK,IAAI,SAAS;AAI7C,IAAM,YAAY,CACjB,KACA,SACwB;AAAA,EACxB,MAAM,UAAU,IAAI;AAAA,EACpB,IAAI,YAAY,MAAM;AAAA,IACrB,OAAO;AAAA,EACR;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,EAExD,OAAiB,iBAAO,KAAK,CAAC,UAAU;AAAA,IAC7B,iBAAO,OAAO,CAAC,MAAM,GAAG,QAAQ,SAAS,QAAQ;AAAA,GAC3D;AAAA;AAIK,IAAM,sBAAsB,CAClC,SACA,YACsB;AAAA,EACtB,IAAI,MAAM,YAAY,YAAY,MAAK,OAAO,IAAI,SAAS;AAAA,EAE3D,OAAO;AAAA,IACN,OAAO,CAAC,UAAU;AAAA,MACjB,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,MAAgB,gBAAM,KAAK,OAAO,KAAK,CAAC;AAAA,MACzC;AAAA;AAAA,IAED,SAAS,CAAC,SAAS;AAAA,MAClB,MAAM,UAAU,KAAK,IAAI;AAAA;AAAA,IAE1B,OAAO,MAAM,OAAO,GAAG;AAAA,IACvB,MAAM,MAAM,IAAI;AAAA,EACjB;AAAA;AAQM,IAAM,gBAAyC;AAAA,EACrD,QAAQ;AAAA,EACR,OAAO,MAAM,OAAO,SAAS,CAAC;AAAA,EAC9B,OAAO,CAAC,GAAG,MAAM;AAAA,IAChB,MAAM,SACL,EAAE,SAAS,IAAc,gBAAM,MAAK,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,MAAK,CAAC;AAAA,IAE5D,OAAO,OAAO,MAAM;AAAA;AAAA,EAErB,QAAQ,CAAC,UAAU,MAAK,KAAK,EAAE;AAChC;",
8
+ "debugId": "AAAFB438DDF31EA164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1 @@
1
+ export declare const manifest: import("@absolutejs/manifest").PackageManifest<Record<never, never>, never>;