@pluv/crdt-yjs 5.0.1 → 5.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.
Files changed (45) hide show
  1. package/dist/index.d.mts +209 -0
  2. package/dist/index.d.mts.map +1 -0
  3. package/dist/index.mjs +551 -0
  4. package/dist/index.mjs.map +1 -0
  5. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  6. package/package.json +9 -9
  7. package/CHANGELOG.md +0 -1626
  8. package/eslint.config.mjs +0 -4
  9. package/src/array/YjsArray.ts +0 -18
  10. package/src/array/array.ts +0 -9
  11. package/src/array/index.ts +0 -2
  12. package/src/awareness/PluvYjsAwareness.ts +0 -220
  13. package/src/awareness/awareness.ts +0 -15
  14. package/src/awareness/index.ts +0 -2
  15. package/src/constants.ts +0 -2
  16. package/src/doc/CrdtYjsDoc.ts +0 -241
  17. package/src/doc/CrdtYjsDocFactory.ts +0 -33
  18. package/src/doc/builder.ts +0 -71
  19. package/src/doc/doc.ts +0 -9
  20. package/src/doc/index.ts +0 -4
  21. package/src/index.ts +0 -5
  22. package/src/map/YjsMap.ts +0 -19
  23. package/src/map/index.ts +0 -2
  24. package/src/map/map.ts +0 -9
  25. package/src/provider/PluvYjsProvider.ts +0 -132
  26. package/src/provider/index.ts +0 -2
  27. package/src/provider/provider.ts +0 -15
  28. package/src/text/YjsText.ts +0 -16
  29. package/src/text/index.ts +0 -2
  30. package/src/text/text.ts +0 -7
  31. package/src/types.ts +0 -35
  32. package/src/utils/index.ts +0 -1
  33. package/src/utils/oneLine.ts +0 -7
  34. package/src/xmlElement/YjsXmlElement.ts +0 -25
  35. package/src/xmlElement/index.ts +0 -2
  36. package/src/xmlElement/xmlElement.ts +0 -9
  37. package/src/xmlFragment/YjsXmlFragment.ts +0 -19
  38. package/src/xmlFragment/index.ts +0 -2
  39. package/src/xmlFragment/xmlFragment.ts +0 -8
  40. package/src/xmlText/YjsXmlText.ts +0 -16
  41. package/src/xmlText/index.ts +0 -2
  42. package/src/xmlText/xmlText.ts +0 -7
  43. package/src/yjs.ts +0 -12
  44. package/tsconfig.json +0 -8
  45. package/tsdown.config.ts +0 -14
@@ -0,0 +1,209 @@
1
+ import { Array, Doc, Map as Map$1, Text, XmlElement, XmlFragment, XmlText } from "yjs";
2
+ import { ObservableV2 } from "lib0/observable";
3
+ import { AbstractCrdtDocFactory, CrdtType, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, DocSubscribeCallbackParams, InferCrdtJson } from "@pluv/crdt";
4
+ import { CrdtDocLike, CrdtType as CrdtType$1, IOLike, PluvRouterEventConfig, RoomLike } from "@pluv/types";
5
+ //#region src/types.d.ts
6
+ type YjsType<TValue extends unknown, TJson extends unknown = any> = CrdtType<TValue, TJson> & {
7
+ initialValue?: any;
8
+ toJSON: () => any;
9
+ };
10
+ /**
11
+ * @description Type internally defined by Yjs.Awareness
12
+ * @see https://github.com/yjs/y-protocols/blob/master/awareness.js
13
+ */
14
+ interface YjsAwarenessUpdate {
15
+ added: number[];
16
+ updated: number[];
17
+ removed: number[];
18
+ }
19
+ type YjsProviderStatus = "connecting" | "connected" | "disconnected";
20
+ /**
21
+ * @description Type internally defined by Yjs.Awareness
22
+ * @see https://github.com/yjs/y-protocols/blob/master/awareness.js
23
+ */
24
+ interface MetaClientState {
25
+ clock: number;
26
+ lastUpdated: number;
27
+ }
28
+ type AwarenessPresence<TPresence extends Record<string, any>, TField extends keyof TPresence | null> = TField extends null ? TPresence : TField extends keyof TPresence ? TPresence[TField] : never;
29
+ //#endregion
30
+ //#region src/array/array.d.ts
31
+ declare const array: <T extends unknown>(value?: T[] | readonly T[]) => YjsType<Array<T>, T[]>;
32
+ //#endregion
33
+ //#region src/awareness/PluvYjsAwareness.d.ts
34
+ interface PluvYjsAwarenessParams<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> {
35
+ presenceField?: TField;
36
+ room: RoomLike<TIO, Doc, TPresence, TStorage, TEvents>;
37
+ }
38
+ declare class PluvYjsAwareness<TIO extends IOLike, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> extends ObservableV2<{
39
+ change: (updates: YjsAwarenessUpdate, kind: "presence") => void;
40
+ destroy: (awareness: PluvYjsAwareness<TIO, TPresence, TStorage, TEvents, TField>) => void;
41
+ update: (updates: YjsAwarenessUpdate, kind: "local" | "presence") => void;
42
+ }> {
43
+ readonly doc: Doc;
44
+ private readonly _field;
45
+ private readonly _idMap;
46
+ private readonly _room;
47
+ private readonly _unsubscribe;
48
+ get clientID(): number;
49
+ get states(): Map<number, TPresence>;
50
+ constructor(params: PluvYjsAwarenessParams<TIO, TPresence, TStorage, TEvents, TField>);
51
+ destroy(): void;
52
+ getLocalState(): AwarenessPresence<TPresence, TField>;
53
+ setLocalState(state: AwarenessPresence<TPresence, TField>): void;
54
+ setLocalStateField<TLocalField extends keyof AwarenessPresence<TPresence, TField>>(field: TLocalField, value: AwarenessPresence<TPresence, TField>[TLocalField]): void;
55
+ /**
56
+ * !HACK
57
+ * @description We're building the awareness presences from the states stored on the room's
58
+ * presense instead of using the map defined in the awareness interface.
59
+ * @see https://github.com/yjs/y-protocols/blob/master/awareness.js
60
+ * @date May 13, 2025
61
+ */
62
+ getStates(): Map<number, AwarenessPresence<TPresence, TField>>;
63
+ private _adaptPresence;
64
+ private _deriveUpdates;
65
+ private _resetIdMap;
66
+ /**
67
+ * !HACK
68
+ * @description We dgaf about these. We're just mirroring the fields that exist in the
69
+ * og awareness to make sure everything aligns.
70
+ * @see https://github.com/yjs/y-protocols/blob/master/awareness.js
71
+ * @date May 13, 2025
72
+ */
73
+ readonly meta: Map<any, MetaClientState>;
74
+ readonly _checkInterval: number;
75
+ }
76
+ //#endregion
77
+ //#region src/awareness/awareness.d.ts
78
+ declare const awareness: <TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null>(params: PluvYjsAwarenessParams<TIO, TPresence, TStorage, TEvents, TField>) => PluvYjsAwareness<TIO, TPresence, TStorage, TEvents, TField>;
79
+ //#endregion
80
+ //#region src/doc/builder.d.ts
81
+ type YjsBuilder = ReturnType<typeof builder>;
82
+ declare const builder: (doc: Doc) => {
83
+ array<T extends unknown>(name: string, value?: T[] | readonly T[]): YjsType<Array<T>, T[]>;
84
+ map<T extends unknown>(name: string, value?: readonly (readonly [key: string, value: T])[]): YjsType<Map$1<T>, Record<string, T>>;
85
+ text(name: string, value?: string): YjsType<Text, string>;
86
+ xmlElement(name: string, children?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]): YjsType<XmlElement, string>;
87
+ xmlFragment(name: string, children?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]): YjsType<XmlFragment, string>;
88
+ xmlText(name: string): YjsType<XmlText, string>;
89
+ };
90
+ //#endregion
91
+ //#region src/doc/CrdtYjsDoc.d.ts
92
+ type CrdtYjsDocParams<TStorage extends Record<string, YjsType<any, any>>> = (builder: YjsBuilder) => TStorage;
93
+ declare class CrdtYjsDoc<TStorage extends Record<string, YjsType<any, any>>> implements CrdtDocLike<Doc, TStorage> {
94
+ #private;
95
+ value: Doc;
96
+ constructor(params?: CrdtYjsDocParams<TStorage>);
97
+ applyEncodedState(params: DocApplyEncodedStateParams): this;
98
+ batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
99
+ canRedo(): boolean;
100
+ canUndo(): boolean;
101
+ destroy(): void;
102
+ get(key?: undefined): TStorage;
103
+ get<TKey extends keyof TStorage>(type: TKey): TStorage[TKey];
104
+ getEncodedState(): string;
105
+ isEmpty(): boolean;
106
+ rebuildStorage(reference: TStorage): this;
107
+ redo(): this;
108
+ subscribe(listener: (params: DocSubscribeCallbackParams<Doc, TStorage>) => void): () => void;
109
+ track(): this;
110
+ transact(fn: () => void): this;
111
+ toJson(): InferCrdtJson<TStorage>;
112
+ toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;
113
+ undo(): this;
114
+ }
115
+ //#endregion
116
+ //#region src/doc/CrdtYjsDocFactory.d.ts
117
+ declare class CrdtYjsDocFactory<TStorage extends Record<string, YjsType<any, any>> = {}> extends AbstractCrdtDocFactory<Doc, TStorage> {
118
+ readonly _initialStorage: (builder: YjsBuilder) => TStorage;
119
+ constructor(initialStorage?: (builder: YjsBuilder) => TStorage);
120
+ getEmpty(): CrdtYjsDoc<TStorage>;
121
+ getFactory(initialStorage: (builder: YjsBuilder) => TStorage): CrdtYjsDocFactory<TStorage>;
122
+ getInitialized(initialStorage?: (builder: YjsBuilder) => TStorage): CrdtYjsDoc<TStorage>;
123
+ }
124
+ //#endregion
125
+ //#region src/doc/doc.d.ts
126
+ declare const doc: <TStorage extends Record<string, YjsType<any, any>>>(value?: (buidler: YjsBuilder) => TStorage) => CrdtYjsDocFactory<TStorage>;
127
+ //#endregion
128
+ //#region src/map/map.d.ts
129
+ declare const map: <T extends unknown>(value?: readonly (readonly [key: string, value: T])[]) => YjsType<Map$1<T>, Record<string, T>>;
130
+ //#endregion
131
+ //#region src/provider/PluvYjsProvider.d.ts
132
+ interface PluvYjsProviderParams<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> {
133
+ presenceField?: TField;
134
+ room: RoomLike<TIO, Doc, TPresence, TStorage, TEvents>;
135
+ }
136
+ /**
137
+ * !HACK
138
+ * @description This doesn't really do anything but emit states in a Yjs.Provider compatible way.
139
+ * Connections and document syncing are handled by the PluvRoom already.
140
+ * @date May 13, 2025
141
+ */
142
+ declare class PluvYjsProvider<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null> extends ObservableV2<{
143
+ "connection-close": (event: CloseEvent | null, provider: PluvYjsProvider<TIO, TPresence, TStorage, TEvents, TField>) => void;
144
+ "connection-error": (event: Event, provider: PluvYjsProvider<TIO, TPresence, TStorage, TEvents, TField>) => void;
145
+ status: (event: {
146
+ status: YjsProviderStatus;
147
+ }) => void;
148
+ sync: (state: boolean) => void;
149
+ synced: (state: boolean) => void;
150
+ }> {
151
+ readonly awareness: PluvYjsAwareness<TIO, TPresence, TStorage, TEvents, TField>;
152
+ readonly doc: Doc;
153
+ private readonly _room;
154
+ private readonly _unsubscribe;
155
+ private _synced;
156
+ constructor(params: PluvYjsProviderParams<TIO, TPresence, TStorage, TEvents, TField>);
157
+ get synced(): boolean;
158
+ set synced(state: boolean);
159
+ destroy(): void;
160
+ private _toProviderStatus;
161
+ /**
162
+ * !HACK
163
+ * @description We dgaf about these, since the room manages these already. We're just mirroring
164
+ * the fields that exist in the og provider to make sure everything aligns.
165
+ * @see https://github.com/yjs/y-websocket/blob/master/src/y-websocket.js
166
+ * @date May 13, 2025
167
+ */
168
+ connect(): void;
169
+ disconnect(): void;
170
+ }
171
+ //#endregion
172
+ //#region src/provider/provider.d.ts
173
+ declare const provider: <TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TStorage extends Record<string, CrdtType$1<any, any>>, TEvents extends PluvRouterEventConfig, TField extends keyof TPresence | null = null>(params: PluvYjsProviderParams<TIO, TPresence, TStorage, TEvents, TField>) => PluvYjsProvider<TIO, TPresence, TStorage, TEvents, TField>;
174
+ //#endregion
175
+ //#region src/text/text.d.ts
176
+ declare const text: (value?: string) => YjsType<Text, string>;
177
+ //#endregion
178
+ //#region src/xmlElement/YjsXmlElement.d.ts
179
+ declare class YjsXmlElement<T extends Record<string, any> = Record<string, any>> extends XmlElement<T> implements YjsType<XmlElement, string> {
180
+ initialValue?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[];
181
+ constructor(name: string, value: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]);
182
+ __pluvType(): any;
183
+ }
184
+ //#endregion
185
+ //#region src/xmlElement/xmlElement.d.ts
186
+ declare const xmlElement: <T extends Record<string, any> = Record<string, any>>(name: string, children: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]) => YjsXmlElement<T>;
187
+ //#endregion
188
+ //#region src/xmlFragment/YjsXmlFragment.d.ts
189
+ declare class YjsXmlFragment extends XmlFragment implements YjsType<XmlFragment, string> {
190
+ initialValue?: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[];
191
+ constructor(value: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]);
192
+ __pluvType(): any;
193
+ }
194
+ //#endregion
195
+ //#region src/xmlFragment/xmlFragment.d.ts
196
+ declare const xmlFragment: (children: (XmlElement | XmlText)[] | readonly (XmlElement | XmlText)[]) => YjsXmlFragment;
197
+ //#endregion
198
+ //#region src/xmlText/xmlText.d.ts
199
+ declare const xmlText: () => YjsType<XmlText, string>;
200
+ declare namespace yjs_d_exports {
201
+ export { YjsBuilder, YjsType, array, awareness, doc, kind, map, provider, text, xmlElement, xmlFragment, xmlText };
202
+ }
203
+ declare const kind: "yjs";
204
+ //#endregion
205
+ //#region src/index.d.ts
206
+ type YjsLibraryType = typeof yjs_d_exports;
207
+ //#endregion
208
+ export { YjsLibraryType, yjs_d_exports as yjs };
209
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/array/array.ts","../src/awareness/PluvYjsAwareness.ts","../src/awareness/awareness.ts","../src/doc/builder.ts","../src/doc/CrdtYjsDoc.ts","../src/doc/CrdtYjsDocFactory.ts","../src/doc/doc.ts","../src/map/map.ts","../src/provider/PluvYjsProvider.ts","../src/provider/provider.ts","../src/text/text.ts","../src/xmlElement/YjsXmlElement.ts","../src/xmlElement/xmlElement.ts","../src/xmlFragment/YjsXmlFragment.ts","../src/xmlFragment/xmlFragment.ts","../src/xmlText/xmlText.ts","../src/yjs.ts","../src/index.ts"],"mappings":"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"}