@pluv/crdt-loro 3.2.1 → 4.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["doc","list","text","#_storage","#_setPluvId","#_undoManager","text"],"sources":["../src/counter.ts","../src/doc/builder.ts","../src/doc/CrdtLoroDoc.ts","../src/doc/CrdtLoroDocFactory.ts","../src/doc/doc.ts","../src/list.ts","../src/map.ts","../src/movableList.ts","../src/object.ts","../src/text.ts","../src/tree.ts","../src/loro.ts"],"sourcesContent":["import { LoroCounter } from \"loro-crdt\";\nimport { LoroType } from \"./types\";\n\nexport const counter = (): LoroCounter => {\n const counter = new LoroCounter();\n\n return counter as unknown as LoroType<LoroCounter, number>;\n};\n","import type {\n Container,\n LoroCounter,\n LoroDoc,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n} from \"loro-crdt\";\nimport { isContainer } from \"loro-crdt\";\nimport type { LoroType } from \"../types\";\n\nexport type LoroBuilder = ReturnType<typeof builder>;\n\nexport const builder = (doc: LoroDoc) => {\n return {\n counter(name: string): LoroCounter {\n return doc.getCounter(name);\n },\n list<T extends unknown>(\n name: string,\n value: T[] | readonly T[] = [],\n ): LoroType<LoroList<T>, T[]> {\n const list = doc.getList(name);\n\n value.forEach((item, i) => {\n if (isContainer(item)) list.insertContainer(i, item);\n else list.insert(i, item as Exclude<T, Container>);\n });\n\n return list as unknown as LoroType<LoroList<T>, T[]>;\n },\n map<T extends Record<string, unknown>>(\n name: string,\n value: T = {} as T,\n ): LoroType<LoroMap<T>, T> {\n const container = doc.getMap(name);\n\n Object.entries(value).forEach(([key, item]) => {\n if (isContainer(item)) container.setContainer(key, item);\n else container.set(key, item as Exclude<T, Container>);\n });\n\n return container as unknown as LoroType<LoroMap<T>, T>;\n },\n moveableList<T extends unknown>(\n name: string,\n value: T[] | readonly T[] = [],\n ): LoroType<LoroMovableList<T>, T[]> {\n const list = doc.getMovableList(name);\n\n value.forEach((item, i) => {\n if (isContainer(item)) list.insertContainer(i, item);\n else list.insert(i, item as Exclude<T, Container>);\n });\n\n return list as unknown as LoroType<LoroMovableList<T>, T[]>;\n },\n text(name: string, value: string = \"\"): LoroType<LoroText, string> {\n const text = doc.getText(name);\n\n text.insert(0, value);\n\n return text as unknown as LoroType<LoroText, string>;\n },\n tree(name: string) {\n return doc.getTree(name);\n },\n };\n};\n","import type {\n DocApplyEncodedStateParams,\n DocBatchApplyEncodedStateParams,\n DocSubscribeCallbackParams,\n InferCrdtJson,\n} from \"@pluv/crdt\";\nimport type { CrdtDocLike } from \"@pluv/types\";\nimport { fromUint8Array, toUint8Array } from \"js-base64\";\nimport type { Container } from \"loro-crdt\";\nimport {\n LoroCounter,\n LoroDoc,\n LoroEventBatch,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n LoroTree,\n UndoManager,\n} from \"loro-crdt\";\nimport type { LoroType } from \"../types\";\nimport type { LoroBuilder } from \"./builder\";\nimport { builder } from \"./builder\";\n\nconst MAX_UNDO_STEPS = 100;\nconst MERGE_INTERVAL_MS = 1_000;\nconst PLUV_ID_FIELD = \"__$pluv\";\n\nexport type CrdtLoroDocParams<TStorage extends Record<string, LoroType<any, any>>> = (\n builder: LoroBuilder,\n) => TStorage;\n\nexport class CrdtLoroDoc<TStorage extends Record<string, LoroType<any, any>>>\n implements CrdtDocLike<LoroDoc, TStorage>\n{\n public value: LoroDoc = new LoroDoc();\n\n #_storage: TStorage;\n #_undoManager: UndoManager | null = null;\n\n constructor(params: CrdtLoroDocParams<TStorage> = () => ({}) as TStorage) {\n const storage = params(builder(this.value));\n\n const keys = Object.keys(this.value.toJSON()).reduce(\n (set, key) => set.add(key),\n new Set<string>(),\n );\n\n this.#_storage = Object.entries(storage).reduce(\n (acc, [key, node]) => (keys.has(key) ? { ...acc, [key]: node } : acc),\n {} as TStorage,\n );\n if (!!Object.keys(storage).length) this.#_setPluvId();\n\n this.value.commit();\n }\n\n public applyEncodedState(params: DocApplyEncodedStateParams): this {\n const update =\n typeof params.update === \"string\" ? toUint8Array(params.update) : params.update;\n\n if (!update) return this;\n\n this.value.import(update);\n\n return this;\n }\n\n public batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this {\n const updates = params.updates ?? [];\n\n const filtered = updates.reduce<Uint8Array[]>((acc, update) => {\n if (!update) return acc;\n\n if (typeof update === \"string\") {\n acc.push(toUint8Array(update));\n return acc;\n }\n\n if (typeof update === \"object\") {\n acc.push(update);\n return acc;\n }\n\n return acc;\n }, []);\n\n if (!filtered.length) return this;\n\n if (filtered.length === 1) {\n const update = filtered[0] ?? null;\n\n if (!!update) this.value.import(update);\n\n return this;\n }\n\n this.value.importBatch(filtered);\n\n return this;\n }\n\n public canRedo(): boolean {\n if (!this.#_undoManager) return false;\n\n return this.#_undoManager.canRedo();\n }\n\n public canUndo(): boolean {\n if (!this.#_undoManager) return false;\n\n return this.#_undoManager.canUndo();\n }\n\n public destroy(): void {\n return;\n }\n\n public get(key?: undefined): TStorage;\n public get<TKey extends keyof TStorage>(key: TKey): TStorage[TKey];\n public get<TKey extends keyof TStorage>(key?: TKey): TStorage | TStorage[TKey] {\n if (typeof key === \"undefined\") return this.#_storage;\n\n return this.#_storage[key as TKey];\n }\n\n public getEncodedState(): string {\n return fromUint8Array(this.value.export({ mode: \"snapshot\" }));\n }\n\n public toJson(): InferCrdtJson<TStorage>;\n public toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;\n public toJson<TKey extends keyof TStorage>(type?: TKey) {\n if (typeof type === \"string\") {\n const container = this.#_storage[type] as unknown as Container;\n\n return container instanceof LoroText\n ? container.toString()\n : container instanceof LoroCounter\n ? container.value\n : container.toJSON!();\n }\n\n return Object.entries(this.#_storage).reduce(\n (acc, [key, value]) => ({\n ...(acc as any),\n [key]: value instanceof LoroText ? value.toString() : value.toJSON!(),\n }),\n {} as InferCrdtJson<TStorage>,\n );\n }\n\n public isEmpty(): boolean {\n const serialized = this.value.toJSON();\n\n return !serialized || !Object.keys(serialized).length;\n }\n\n public rebuildStorage(reference: TStorage): this {\n const isBuilt = !!Object.keys(this.#_storage).length;\n\n if (isBuilt) {\n console.warn(\"Attempted to rebuild storage multiple times\");\n return this;\n }\n\n this.#_storage = Object.entries(reference).reduce((acc, [key, node]) => {\n if (node instanceof LoroCounter) return { ...acc, [key]: this.value.getCounter(key) };\n if (node instanceof LoroList) return { ...acc, [key]: this.value.getList(key) };\n if (node instanceof LoroMap) return { ...acc, [key]: this.value.getMap(key) };\n if (node instanceof LoroMovableList) {\n return { ...acc, [key]: this.value.getMovableList(key) };\n }\n if (node instanceof LoroText) return { ...acc, [key]: this.value.getText(key) };\n if (node instanceof LoroTree) return { ...acc, [key]: this.value.getTree(key) };\n\n return acc;\n }, {} as TStorage);\n\n return this.track();\n }\n\n public redo(): this {\n this.#_undoManager?.redo();\n\n return this;\n }\n\n public subscribe(\n listener: (params: DocSubscribeCallbackParams<LoroDoc, TStorage>) => void,\n ): () => void {\n const fn = (event: LoroEventBatch) => {\n const update = fromUint8Array(this.value.export({ mode: \"update\" }));\n\n listener({\n doc: this,\n local: event.by === \"local\",\n origin: event.origin ? String(event.origin) : null,\n update,\n });\n };\n\n const unsubcribeAll = Object.values(this.#_storage).reduce<() => void>(\n (acc, crdtType) => {\n const container = crdtType as unknown as Container;\n const unsubscribe = container.subscribe(fn);\n\n return () => {\n acc();\n unsubscribe();\n };\n },\n () => undefined,\n );\n\n return unsubcribeAll;\n }\n\n public track(): this {\n if (this.#_undoManager) {\n this.#_undoManager.clear();\n this.#_undoManager.free();\n\n this.#_undoManager = null;\n }\n\n this.#_undoManager = new UndoManager(this.value, {\n maxUndoSteps: MAX_UNDO_STEPS,\n mergeInterval: MERGE_INTERVAL_MS,\n });\n\n return this;\n }\n\n /**\n * @description Unlike Yjs, this method is required to be called after each loro operation.\n * @date January 12, 2025\n */\n public transact(fn: () => void): this {\n fn();\n\n this.value.commit();\n\n return this;\n }\n\n public undo(): this {\n this.#_undoManager?.undo();\n\n return this;\n }\n\n #_setPluvId() {\n const text = this.value.getText(PLUV_ID_FIELD);\n const id = typeof crypto !== \"undefined\" ? crypto.randomUUID() : Math.random().toString();\n\n text.insert(0, id);\n }\n}\n","import { AbstractCrdtDocFactory } from \"@pluv/crdt\";\nimport type { LoroDoc } from \"loro-crdt\";\nimport type { LoroType } from \"../types\";\nimport { CrdtLoroDoc } from \"./CrdtLoroDoc\";\nimport type { LoroBuilder } from \"./builder\";\n\nexport class CrdtLoroDocFactory<\n TStorage extends Record<string, LoroType<any, any>>,\n> extends AbstractCrdtDocFactory<LoroDoc, TStorage> {\n public readonly _initialStorage: (builder: LoroBuilder) => TStorage;\n\n constructor(initialStorage: (builder: LoroBuilder) => TStorage = () => ({}) as TStorage) {\n super(initialStorage);\n\n this._initialStorage = initialStorage;\n }\n\n public getEmpty(): CrdtLoroDoc<TStorage> {\n return new CrdtLoroDoc<TStorage>();\n }\n\n public getFactory(\n initialStorage?: ((builder: LoroBuilder) => TStorage) | undefined,\n ): CrdtLoroDocFactory<TStorage> {\n return new CrdtLoroDocFactory<TStorage>(initialStorage ?? this._initialStorage);\n }\n\n public getInitialized(\n initialStorage?: (builder: LoroBuilder) => TStorage,\n ): CrdtLoroDoc<TStorage> {\n return new CrdtLoroDoc<TStorage>(initialStorage ?? this._initialStorage);\n }\n}\n","import type { LoroType } from \"../types\";\nimport type { LoroBuilder } from \"./builder\";\nimport { CrdtLoroDocFactory } from \"./CrdtLoroDocFactory\";\n\nexport const doc = <TStorage extends Record<string, LoroType<any, any>>>(\n value: (builder: LoroBuilder) => TStorage = () => ({}) as TStorage,\n): CrdtLoroDocFactory<TStorage> => {\n return new CrdtLoroDocFactory<TStorage>(value);\n};\n","import type { Container } from \"loro-crdt\";\nimport { LoroList, isContainer } from \"loro-crdt\";\nimport type { LoroType } from \"./types\";\n\nexport const list = <T extends unknown>(\n value: T[] | readonly T[] = [],\n): LoroType<LoroList<T>, T[]> => {\n const container = new LoroList();\n\n value.forEach((item, i) => {\n if (isContainer(item)) container.insertContainer(i, item);\n else container.insert(i, item as Exclude<T, Container>);\n });\n\n return container as unknown as LoroType<LoroList<T>, T[]>;\n};\n","import type { Container } from \"loro-crdt\";\nimport { LoroMap, isContainer } from \"loro-crdt\";\nimport type { LoroType } from \"./types\";\n\nexport const map = <T extends unknown>(\n value: readonly (readonly [key: string, value: T])[] = [],\n): LoroType<LoroMap<Record<string, T>>, Record<string, T>> => {\n const container = new LoroMap();\n\n value.forEach(([key, item]) => {\n if (isContainer(item)) container.setContainer(key, item);\n else container.set(key, item as Exclude<T, Container>);\n });\n\n return container as unknown as LoroType<LoroMap<Record<string, T>>, Record<string, T>>;\n};\n","import type { Container } from \"loro-crdt\";\nimport { isContainer, LoroMovableList } from \"loro-crdt\";\nimport type { LoroType } from \"./types\";\n\nexport const movableList = <T extends unknown>(value: T[] | readonly T[] = []) => {\n const container = new LoroMovableList();\n\n value.forEach((item, i) => {\n if (isContainer(item)) container.insertContainer(i, item);\n else container.insert(i, item as Exclude<T, Container>);\n });\n\n return container as unknown as LoroType<LoroMovableList<T>, T[]>;\n};\n","import type { Container } from \"loro-crdt\";\nimport { LoroMap, isContainer } from \"loro-crdt\";\nimport type { LoroType } from \"./types\";\n\nexport const object = <T extends Record<string, any>>(value: T): LoroType<LoroMap<T>, T> => {\n const container = new LoroMap();\n\n Object.entries(value).forEach(([key, item]) => {\n if (isContainer(item)) container.setContainer(key, item);\n else container.set(key, item as Exclude<T, Container>);\n });\n\n return container as unknown as LoroType<LoroMap<T>, T>;\n};\n","import { LoroText } from \"loro-crdt\";\nimport type { LoroType } from \"./types\";\n\nexport const text = (value: string = \"\"): LoroType<LoroText, string> => {\n const container = new LoroText();\n\n container.insert(0, value);\n\n return container as unknown as LoroType<LoroText, string>;\n};\n","import { LoroTree } from \"loro-crdt\";\n\nexport const tree = <T extends Record<string, unknown>>() => {\n const container = new LoroTree<T>();\n\n return container;\n};\n","export { counter } from \"./counter\";\nexport { CrdtLoroDoc, doc } from \"./doc\";\nexport type { LoroBuilder } from \"./doc\";\nexport { list } from \"./list\";\nexport { map } from \"./map\";\nexport { movableList } from \"./movableList\";\nexport { object } from \"./object\";\nexport { text } from \"./text\";\nexport { tree } from \"./tree\";\nexport type { LoroType } from \"./types\";\nexport const kind = \"loro\" as const;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pluv/crdt-loro",
3
- "version": "3.2.1",
3
+ "version": "4.0.0",
4
4
  "description": "loro for @pluv/io",
5
5
  "author": {
6
6
  "email": "david@pluv.io",
@@ -14,33 +14,37 @@
14
14
  "url": "git+https://github.com/pluv-io/pluv.git",
15
15
  "directory": "packages/crdt-loro"
16
16
  },
17
- "main": "./dist/index.js",
18
- "module": "./dist/index.mjs",
19
- "types": "./dist/index.d.ts",
17
+ "type": "module",
18
+ "types": "./dist/index.d.mts",
20
19
  "publishConfig": {
21
20
  "access": "public"
22
21
  },
23
22
  "dependencies": {
24
- "@types/node": "^24.0.14",
25
- "js-base64": "^3.7.7",
26
- "@pluv/crdt": "^3.2.1",
27
- "@pluv/types": "^3.2.1"
23
+ "@types/node": "^25.0.9",
24
+ "js-base64": "^3.7.8",
25
+ "@pluv/crdt": "^4.0.0",
26
+ "@pluv/types": "^4.0.0"
28
27
  },
29
28
  "peerDependencies": {
30
29
  "loro-crdt": "^1.0.0"
31
30
  },
32
31
  "devDependencies": {
33
- "eslint": "^9.31.0",
34
- "loro-crdt": "^1.5.9",
35
- "tsup": "^8.5.0",
36
- "typescript": "^5.8.3",
37
- "@pluv/tsconfig": "^3.2.1",
38
- "eslint-config-pluv": "^3.2.1"
32
+ "eslint": "^9.39.2",
33
+ "loro-crdt": "^1.10.4",
34
+ "tsdown": "0.20.0-beta.4",
35
+ "typescript": "^5.9.3",
36
+ "@pluv/tsconfig": "^4.0.0",
37
+ "eslint-config-pluv": "^4.0.0"
38
+ },
39
+ "exports": {
40
+ ".": "./dist/index.mjs",
41
+ "./*": "./*"
39
42
  },
40
43
  "scripts": {
41
- "build": "tsup src/index.ts --format esm,cjs --dts",
42
- "dev": "tsup src/index.ts --format esm,cjs --watch --dts",
44
+ "build": "tsdown",
45
+ "dev": "tsdown --watch",
43
46
  "lint": "eslint \"src/**/*.ts*\" --fix --max-warnings 0",
47
+ "typecheck": "tsc --noEmit",
44
48
  "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
45
49
  }
46
50
  }
@@ -0,0 +1,14 @@
1
+ import { defineConfig } from "tsdown";
2
+
3
+ export default defineConfig({
4
+ format: ["esm"],
5
+ dts: true,
6
+ outDir: "dist",
7
+ entry: "src/index.ts",
8
+ target: "esnext",
9
+ sourcemap: true,
10
+ clean: true,
11
+ exports: {
12
+ all: true,
13
+ },
14
+ });
package/dist/index.d.ts DELETED
@@ -1,94 +0,0 @@
1
- import * as loro_crdt from 'loro-crdt';
2
- import { LoroCounter, LoroDoc, LoroList, LoroMap, LoroMovableList, LoroText, LoroTree } from 'loro-crdt';
3
- import { CrdtType, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, InferCrdtJson, DocSubscribeCallbackParams, AbstractCrdtDocFactory } from '@pluv/crdt';
4
- import { CrdtDocLike } from '@pluv/types';
5
-
6
- declare const counter: () => LoroCounter;
7
-
8
- type LoroType<TValue extends unknown, TJson extends unknown = any> = TValue & CrdtType<TValue, TJson> & {
9
- toJSON?: () => any;
10
- toString?: () => string;
11
- };
12
-
13
- type LoroBuilder = ReturnType<typeof builder>;
14
- declare const builder: (doc: LoroDoc) => {
15
- counter(name: string): LoroCounter;
16
- list<T extends unknown>(name: string, value?: T[] | readonly T[]): LoroType<LoroList<T>, T[]>;
17
- map<T extends Record<string, unknown>>(name: string, value?: T): LoroType<LoroMap<T>, T>;
18
- moveableList<T extends unknown>(name: string, value?: T[] | readonly T[]): LoroType<LoroMovableList<T>, T[]>;
19
- text(name: string, value?: string): LoroType<LoroText, string>;
20
- tree(name: string): loro_crdt.LoroTree<Record<string, unknown>>;
21
- };
22
-
23
- type CrdtLoroDocParams<TStorage extends Record<string, LoroType<any, any>>> = (builder: LoroBuilder) => TStorage;
24
- declare class CrdtLoroDoc<TStorage extends Record<string, LoroType<any, any>>> implements CrdtDocLike<LoroDoc, TStorage> {
25
- #private;
26
- value: LoroDoc;
27
- constructor(params?: CrdtLoroDocParams<TStorage>);
28
- applyEncodedState(params: DocApplyEncodedStateParams): this;
29
- batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
30
- canRedo(): boolean;
31
- canUndo(): boolean;
32
- destroy(): void;
33
- get(key?: undefined): TStorage;
34
- get<TKey extends keyof TStorage>(key: TKey): TStorage[TKey];
35
- getEncodedState(): string;
36
- toJson(): InferCrdtJson<TStorage>;
37
- toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;
38
- isEmpty(): boolean;
39
- rebuildStorage(reference: TStorage): this;
40
- redo(): this;
41
- subscribe(listener: (params: DocSubscribeCallbackParams<LoroDoc, TStorage>) => void): () => void;
42
- track(): this;
43
- /**
44
- * @description Unlike Yjs, this method is required to be called after each loro operation.
45
- * @date January 12, 2025
46
- */
47
- transact(fn: () => void): this;
48
- undo(): this;
49
- }
50
-
51
- declare class CrdtLoroDocFactory<TStorage extends Record<string, LoroType<any, any>>> extends AbstractCrdtDocFactory<LoroDoc, TStorage> {
52
- readonly _initialStorage: (builder: LoroBuilder) => TStorage;
53
- constructor(initialStorage?: (builder: LoroBuilder) => TStorage);
54
- getEmpty(): CrdtLoroDoc<TStorage>;
55
- getFactory(initialStorage?: ((builder: LoroBuilder) => TStorage) | undefined): CrdtLoroDocFactory<TStorage>;
56
- getInitialized(initialStorage?: (builder: LoroBuilder) => TStorage): CrdtLoroDoc<TStorage>;
57
- }
58
-
59
- declare const doc: <TStorage extends Record<string, LoroType<any, any>>>(value?: (builder: LoroBuilder) => TStorage) => CrdtLoroDocFactory<TStorage>;
60
-
61
- declare const list: <T extends unknown>(value?: T[] | readonly T[]) => LoroType<LoroList<T>, T[]>;
62
-
63
- declare const map: <T extends unknown>(value?: readonly (readonly [key: string, value: T])[]) => LoroType<LoroMap<Record<string, T>>, Record<string, T>>;
64
-
65
- declare const movableList: <T extends unknown>(value?: T[] | readonly T[]) => LoroType<LoroMovableList<T>, T[]>;
66
-
67
- declare const object: <T extends Record<string, any>>(value: T) => LoroType<LoroMap<T>, T>;
68
-
69
- declare const text: (value?: string) => LoroType<LoroText, string>;
70
-
71
- declare const tree: <T extends Record<string, unknown>>() => LoroTree<T>;
72
-
73
- declare const kind: "loro";
74
-
75
- type loro_CrdtLoroDoc<TStorage extends Record<string, LoroType<any, any>>> = CrdtLoroDoc<TStorage>;
76
- declare const loro_CrdtLoroDoc: typeof CrdtLoroDoc;
77
- type loro_LoroBuilder = LoroBuilder;
78
- type loro_LoroType<TValue extends unknown, TJson extends unknown = any> = LoroType<TValue, TJson>;
79
- declare const loro_counter: typeof counter;
80
- declare const loro_doc: typeof doc;
81
- declare const loro_kind: typeof kind;
82
- declare const loro_list: typeof list;
83
- declare const loro_map: typeof map;
84
- declare const loro_movableList: typeof movableList;
85
- declare const loro_object: typeof object;
86
- declare const loro_text: typeof text;
87
- declare const loro_tree: typeof tree;
88
- declare namespace loro {
89
- export { loro_CrdtLoroDoc as CrdtLoroDoc, type loro_LoroBuilder as LoroBuilder, type loro_LoroType as LoroType, loro_counter as counter, loro_doc as doc, loro_kind as kind, loro_list as list, loro_map as map, loro_movableList as movableList, loro_object as object, loro_text as text, loro_tree as tree };
90
- }
91
-
92
- type LoroLibraryType = typeof loro;
93
-
94
- export { type LoroLibraryType, loro };
package/dist/index.js DELETED
@@ -1,377 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
- var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
- var __typeError = (msg) => {
11
- throw TypeError(msg);
12
- };
13
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
- var __spreadValues = (a, b) => {
15
- for (var prop in b || (b = {}))
16
- if (__hasOwnProp.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- if (__getOwnPropSymbols)
19
- for (var prop of __getOwnPropSymbols(b)) {
20
- if (__propIsEnum.call(b, prop))
21
- __defNormalProp(a, prop, b[prop]);
22
- }
23
- return a;
24
- };
25
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
26
- var __export = (target, all) => {
27
- for (var name in all)
28
- __defProp(target, name, { get: all[name], enumerable: true });
29
- };
30
- var __copyProps = (to, from, except, desc) => {
31
- if (from && typeof from === "object" || typeof from === "function") {
32
- for (let key of __getOwnPropNames(from))
33
- if (!__hasOwnProp.call(to, key) && key !== except)
34
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
35
- }
36
- return to;
37
- };
38
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
39
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
40
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
41
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
42
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
43
- var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
44
-
45
- // src/index.ts
46
- var index_exports = {};
47
- __export(index_exports, {
48
- loro: () => loro_exports
49
- });
50
- module.exports = __toCommonJS(index_exports);
51
-
52
- // src/loro.ts
53
- var loro_exports = {};
54
- __export(loro_exports, {
55
- CrdtLoroDoc: () => CrdtLoroDoc,
56
- counter: () => counter,
57
- doc: () => doc,
58
- kind: () => kind,
59
- list: () => list,
60
- map: () => map,
61
- movableList: () => movableList,
62
- object: () => object,
63
- text: () => text,
64
- tree: () => tree
65
- });
66
-
67
- // src/counter.ts
68
- var import_loro_crdt = require("loro-crdt");
69
- var counter = () => {
70
- const counter2 = new import_loro_crdt.LoroCounter();
71
- return counter2;
72
- };
73
-
74
- // src/doc/CrdtLoroDoc.ts
75
- var import_js_base64 = require("js-base64");
76
- var import_loro_crdt3 = require("loro-crdt");
77
-
78
- // src/doc/builder.ts
79
- var import_loro_crdt2 = require("loro-crdt");
80
- var builder = (doc2) => {
81
- return {
82
- counter(name) {
83
- return doc2.getCounter(name);
84
- },
85
- list(name, value = []) {
86
- const list2 = doc2.getList(name);
87
- value.forEach((item, i) => {
88
- if ((0, import_loro_crdt2.isContainer)(item)) list2.insertContainer(i, item);
89
- else list2.insert(i, item);
90
- });
91
- return list2;
92
- },
93
- map(name, value = {}) {
94
- const container = doc2.getMap(name);
95
- Object.entries(value).forEach(([key, item]) => {
96
- if ((0, import_loro_crdt2.isContainer)(item)) container.setContainer(key, item);
97
- else container.set(key, item);
98
- });
99
- return container;
100
- },
101
- moveableList(name, value = []) {
102
- const list2 = doc2.getMovableList(name);
103
- value.forEach((item, i) => {
104
- if ((0, import_loro_crdt2.isContainer)(item)) list2.insertContainer(i, item);
105
- else list2.insert(i, item);
106
- });
107
- return list2;
108
- },
109
- text(name, value = "") {
110
- const text2 = doc2.getText(name);
111
- text2.insert(0, value);
112
- return text2;
113
- },
114
- tree(name) {
115
- return doc2.getTree(name);
116
- }
117
- };
118
- };
119
-
120
- // src/doc/CrdtLoroDoc.ts
121
- var MAX_UNDO_STEPS = 100;
122
- var MERGE_INTERVAL_MS = 1e3;
123
- var PLUV_ID_FIELD = "__$pluv";
124
- var __storage, __undoManager, _CrdtLoroDoc_instances, _setPluvId_fn;
125
- var CrdtLoroDoc = class {
126
- constructor(params = () => ({})) {
127
- __privateAdd(this, _CrdtLoroDoc_instances);
128
- this.value = new import_loro_crdt3.LoroDoc();
129
- __privateAdd(this, __storage);
130
- __privateAdd(this, __undoManager, null);
131
- const storage = params(builder(this.value));
132
- const keys = Object.keys(this.value.toJSON()).reduce(
133
- (set, key) => set.add(key),
134
- /* @__PURE__ */ new Set()
135
- );
136
- __privateSet(this, __storage, Object.entries(storage).reduce(
137
- (acc, [key, node]) => keys.has(key) ? __spreadProps(__spreadValues({}, acc), { [key]: node }) : acc,
138
- {}
139
- ));
140
- if (!!Object.keys(storage).length) __privateMethod(this, _CrdtLoroDoc_instances, _setPluvId_fn).call(this);
141
- this.value.commit();
142
- }
143
- applyEncodedState(params) {
144
- const update = typeof params.update === "string" ? (0, import_js_base64.toUint8Array)(params.update) : params.update;
145
- if (!update) return this;
146
- this.value.import(update);
147
- return this;
148
- }
149
- batchApplyEncodedState(params) {
150
- var _a, _b;
151
- const updates = (_a = params.updates) != null ? _a : [];
152
- const filtered = updates.reduce((acc, update) => {
153
- if (!update) return acc;
154
- if (typeof update === "string") {
155
- acc.push((0, import_js_base64.toUint8Array)(update));
156
- return acc;
157
- }
158
- if (typeof update === "object") {
159
- acc.push(update);
160
- return acc;
161
- }
162
- return acc;
163
- }, []);
164
- if (!filtered.length) return this;
165
- if (filtered.length === 1) {
166
- const update = (_b = filtered[0]) != null ? _b : null;
167
- if (!!update) this.value.import(update);
168
- return this;
169
- }
170
- this.value.importBatch(filtered);
171
- return this;
172
- }
173
- canRedo() {
174
- if (!__privateGet(this, __undoManager)) return false;
175
- return __privateGet(this, __undoManager).canRedo();
176
- }
177
- canUndo() {
178
- if (!__privateGet(this, __undoManager)) return false;
179
- return __privateGet(this, __undoManager).canUndo();
180
- }
181
- destroy() {
182
- return;
183
- }
184
- get(key) {
185
- if (typeof key === "undefined") return __privateGet(this, __storage);
186
- return __privateGet(this, __storage)[key];
187
- }
188
- getEncodedState() {
189
- return (0, import_js_base64.fromUint8Array)(this.value.export({ mode: "snapshot" }));
190
- }
191
- toJson(type) {
192
- if (typeof type === "string") {
193
- const container = __privateGet(this, __storage)[type];
194
- return container instanceof import_loro_crdt3.LoroText ? container.toString() : container instanceof import_loro_crdt3.LoroCounter ? container.value : container.toJSON();
195
- }
196
- return Object.entries(__privateGet(this, __storage)).reduce(
197
- (acc, [key, value]) => __spreadProps(__spreadValues({}, acc), {
198
- [key]: value instanceof import_loro_crdt3.LoroText ? value.toString() : value.toJSON()
199
- }),
200
- {}
201
- );
202
- }
203
- isEmpty() {
204
- const serialized = this.value.toJSON();
205
- return !serialized || !Object.keys(serialized).length;
206
- }
207
- rebuildStorage(reference) {
208
- const isBuilt = !!Object.keys(__privateGet(this, __storage)).length;
209
- if (isBuilt) {
210
- console.warn("Attempted to rebuild storage multiple times");
211
- return this;
212
- }
213
- __privateSet(this, __storage, Object.entries(reference).reduce((acc, [key, node]) => {
214
- if (node instanceof import_loro_crdt3.LoroCounter) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getCounter(key) });
215
- if (node instanceof import_loro_crdt3.LoroList) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getList(key) });
216
- if (node instanceof import_loro_crdt3.LoroMap) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getMap(key) });
217
- if (node instanceof import_loro_crdt3.LoroMovableList) {
218
- return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getMovableList(key) });
219
- }
220
- if (node instanceof import_loro_crdt3.LoroText) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getText(key) });
221
- if (node instanceof import_loro_crdt3.LoroTree) return __spreadProps(__spreadValues({}, acc), { [key]: this.value.getTree(key) });
222
- return acc;
223
- }, {}));
224
- return this.track();
225
- }
226
- redo() {
227
- var _a;
228
- (_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.redo();
229
- return this;
230
- }
231
- subscribe(listener) {
232
- const fn = (event) => {
233
- const update = (0, import_js_base64.fromUint8Array)(this.value.export({ mode: "update" }));
234
- listener({
235
- doc: this,
236
- local: event.by === "local",
237
- origin: event.origin ? String(event.origin) : null,
238
- update
239
- });
240
- };
241
- const unsubcribeAll = Object.values(__privateGet(this, __storage)).reduce(
242
- (acc, crdtType) => {
243
- const container = crdtType;
244
- const unsubscribe = container.subscribe(fn);
245
- return () => {
246
- acc();
247
- unsubscribe();
248
- };
249
- },
250
- () => void 0
251
- );
252
- return unsubcribeAll;
253
- }
254
- track() {
255
- if (__privateGet(this, __undoManager)) {
256
- __privateGet(this, __undoManager).clear();
257
- __privateGet(this, __undoManager).free();
258
- __privateSet(this, __undoManager, null);
259
- }
260
- __privateSet(this, __undoManager, new import_loro_crdt3.UndoManager(this.value, {
261
- maxUndoSteps: MAX_UNDO_STEPS,
262
- mergeInterval: MERGE_INTERVAL_MS
263
- }));
264
- return this;
265
- }
266
- /**
267
- * @description Unlike Yjs, this method is required to be called after each loro operation.
268
- * @date January 12, 2025
269
- */
270
- transact(fn) {
271
- fn();
272
- this.value.commit();
273
- return this;
274
- }
275
- undo() {
276
- var _a;
277
- (_a = __privateGet(this, __undoManager)) == null ? void 0 : _a.undo();
278
- return this;
279
- }
280
- };
281
- __storage = new WeakMap();
282
- __undoManager = new WeakMap();
283
- _CrdtLoroDoc_instances = new WeakSet();
284
- _setPluvId_fn = function() {
285
- const text2 = this.value.getText(PLUV_ID_FIELD);
286
- const id = typeof crypto !== "undefined" ? crypto.randomUUID() : Math.random().toString();
287
- text2.insert(0, id);
288
- };
289
-
290
- // src/doc/CrdtLoroDocFactory.ts
291
- var import_crdt = require("@pluv/crdt");
292
- var CrdtLoroDocFactory = class _CrdtLoroDocFactory extends import_crdt.AbstractCrdtDocFactory {
293
- constructor(initialStorage = () => ({})) {
294
- super(initialStorage);
295
- this._initialStorage = initialStorage;
296
- }
297
- getEmpty() {
298
- return new CrdtLoroDoc();
299
- }
300
- getFactory(initialStorage) {
301
- return new _CrdtLoroDocFactory(initialStorage != null ? initialStorage : this._initialStorage);
302
- }
303
- getInitialized(initialStorage) {
304
- return new CrdtLoroDoc(initialStorage != null ? initialStorage : this._initialStorage);
305
- }
306
- };
307
-
308
- // src/doc/doc.ts
309
- var doc = (value = () => ({})) => {
310
- return new CrdtLoroDocFactory(value);
311
- };
312
-
313
- // src/list.ts
314
- var import_loro_crdt4 = require("loro-crdt");
315
- var list = (value = []) => {
316
- const container = new import_loro_crdt4.LoroList();
317
- value.forEach((item, i) => {
318
- if ((0, import_loro_crdt4.isContainer)(item)) container.insertContainer(i, item);
319
- else container.insert(i, item);
320
- });
321
- return container;
322
- };
323
-
324
- // src/map.ts
325
- var import_loro_crdt5 = require("loro-crdt");
326
- var map = (value = []) => {
327
- const container = new import_loro_crdt5.LoroMap();
328
- value.forEach(([key, item]) => {
329
- if ((0, import_loro_crdt5.isContainer)(item)) container.setContainer(key, item);
330
- else container.set(key, item);
331
- });
332
- return container;
333
- };
334
-
335
- // src/movableList.ts
336
- var import_loro_crdt6 = require("loro-crdt");
337
- var movableList = (value = []) => {
338
- const container = new import_loro_crdt6.LoroMovableList();
339
- value.forEach((item, i) => {
340
- if ((0, import_loro_crdt6.isContainer)(item)) container.insertContainer(i, item);
341
- else container.insert(i, item);
342
- });
343
- return container;
344
- };
345
-
346
- // src/object.ts
347
- var import_loro_crdt7 = require("loro-crdt");
348
- var object = (value) => {
349
- const container = new import_loro_crdt7.LoroMap();
350
- Object.entries(value).forEach(([key, item]) => {
351
- if ((0, import_loro_crdt7.isContainer)(item)) container.setContainer(key, item);
352
- else container.set(key, item);
353
- });
354
- return container;
355
- };
356
-
357
- // src/text.ts
358
- var import_loro_crdt8 = require("loro-crdt");
359
- var text = (value = "") => {
360
- const container = new import_loro_crdt8.LoroText();
361
- container.insert(0, value);
362
- return container;
363
- };
364
-
365
- // src/tree.ts
366
- var import_loro_crdt9 = require("loro-crdt");
367
- var tree = () => {
368
- const container = new import_loro_crdt9.LoroTree();
369
- return container;
370
- };
371
-
372
- // src/loro.ts
373
- var kind = "loro";
374
- // Annotate the CommonJS export names for ESM import in node:
375
- 0 && (module.exports = {
376
- loro
377
- });