@pluv/crdt 1.0.2 → 2.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.
- package/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +8 -0
- package/dist/index.d.mts +15 -42
- package/dist/index.d.ts +15 -42
- package/dist/index.js +7 -7
- package/dist/index.mjs +7 -6
- package/package.json +4 -4
- package/src/AbstractCrdtDocFactory.ts +14 -4
- package/src/NoopCrdtDoc.ts +4 -4
- package/src/NoopCrdtDocFactory.ts +6 -2
- package/src/index.ts +9 -3
- package/src/types.ts +12 -0
- package/src/AbstractCrdtDoc.ts +0 -41
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @pluv/crdt@
|
|
2
|
+
> @pluv/crdt@2.0.0 build /home/runner/work/pluv/pluv/packages/crdt
|
|
3
3
|
> tsup src/index.ts --format esm,cjs --dts
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
[34mCLI[39m Target: es6
|
|
9
9
|
[34mESM[39m Build start
|
|
10
10
|
[34mCJS[39m Build start
|
|
11
|
-
[32mESM[39m [1mdist/index.mjs [22m[32m1.
|
|
12
|
-
[32mESM[39m ⚡️ Build success in
|
|
11
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m1.51 KB[39m
|
|
12
|
+
[32mESM[39m ⚡️ Build success in 24ms
|
|
13
13
|
[32mCJS[39m [1mdist/index.js [22m[32m2.63 KB[39m
|
|
14
|
-
[32mCJS[39m ⚡️ Build success in
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 24ms
|
|
15
15
|
[34mDTS[39m Build start
|
|
16
|
-
[32mDTS[39m ⚡️ Build success in
|
|
17
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[
|
|
18
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 507ms
|
|
17
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m2.78 KB[39m
|
|
18
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m2.78 KB[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Json,
|
|
1
|
+
import { Json, CrdtDocLike, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, DocSubscribeCallbackParams } from '@pluv/types';
|
|
2
|
+
export { CrdtDocLike, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, DocSubscribeCallbackParams } from '@pluv/types';
|
|
2
3
|
|
|
3
4
|
type CrdtType<TValue extends unknown, TJson extends unknown = any> = Omit<TValue, "__pluvType"> & {
|
|
4
5
|
__pluvType: () => TJson;
|
|
@@ -6,49 +7,20 @@ type CrdtType<TValue extends unknown, TJson extends unknown = any> = Omit<TValue
|
|
|
6
7
|
type InferCrdtJson<T extends unknown> = T extends CrdtType<any, infer IJson> ? InferCrdtJson<IJson> : T extends Record<string, any> ? {
|
|
7
8
|
[P in keyof T]: InferCrdtJson<T[P]>;
|
|
8
9
|
} : T extends (infer IJson)[] ? InferCrdtJson<IJson>[] : T extends readonly (infer IJson)[] ? readonly InferCrdtJson<IJson>[] : T extends Json ? T : string;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
update?: Maybe<string | Uint8Array>;
|
|
13
|
-
}
|
|
14
|
-
interface DocBatchApplyEncodedStateParams {
|
|
15
|
-
origin?: string;
|
|
16
|
-
updates?: Maybe<readonly Maybe<string | Uint8Array>[]>;
|
|
17
|
-
}
|
|
18
|
-
interface DocSubscribeCallbackParams<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
19
|
-
doc: AbstractCrdtDoc<TStorage>;
|
|
20
|
-
local: boolean;
|
|
21
|
-
origin?: string | null;
|
|
22
|
-
update: string;
|
|
23
|
-
}
|
|
24
|
-
declare abstract class AbstractCrdtDoc<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
25
|
-
abstract applyEncodedState(params: DocApplyEncodedStateParams): this;
|
|
26
|
-
abstract batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
|
|
27
|
-
abstract canRedo(): boolean;
|
|
28
|
-
abstract canUndo(): boolean;
|
|
29
|
-
abstract destroy(): void;
|
|
30
|
-
abstract get(key?: undefined): TStorage;
|
|
31
|
-
abstract get<TKey extends keyof TStorage>(key: TKey): TStorage[TKey];
|
|
32
|
-
abstract getEncodedState(): string;
|
|
33
|
-
abstract isEmpty(): boolean;
|
|
34
|
-
abstract rebuildStorage(reference: TStorage): this;
|
|
35
|
-
abstract redo(): this;
|
|
36
|
-
abstract subscribe(listener: (params: DocSubscribeCallbackParams<TStorage>) => void): () => void;
|
|
37
|
-
abstract toJson(): InferCrdtJson<TStorage>;
|
|
38
|
-
abstract toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;
|
|
39
|
-
abstract track(): this;
|
|
40
|
-
abstract transact(fn: () => void, origin?: string): this;
|
|
41
|
-
abstract undo(): this;
|
|
42
|
-
}
|
|
10
|
+
type InferInitialStorageFn<TFactory extends AbstractCrdtDocFactory<any>> = TFactory["_initialStorage"];
|
|
11
|
+
type InferStorage<TFactory extends AbstractCrdtDocFactory<any>> = ReturnType<InferInitialStorageFn<TFactory>>;
|
|
12
|
+
type InferBuilder<TFactory extends AbstractCrdtDocFactory<any>> = Parameters<InferInitialStorageFn<TFactory>>[0];
|
|
43
13
|
|
|
44
14
|
declare abstract class AbstractCrdtDocFactory<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
abstract
|
|
15
|
+
_initialStorage: (builder: any) => TStorage;
|
|
16
|
+
constructor(initialStorage: (builder: any) => TStorage);
|
|
17
|
+
abstract getEmpty(): CrdtDocLike<TStorage>;
|
|
18
|
+
abstract getFactory(initialStorage?: (builder: any) => TStorage): AbstractCrdtDocFactory<TStorage>;
|
|
19
|
+
abstract getInitialized(initialStorage?: (builder: any) => TStorage): CrdtDocLike<TStorage>;
|
|
48
20
|
resolveEncodedState(updates: string | string[] | readonly string[]): string | null;
|
|
49
21
|
}
|
|
50
22
|
|
|
51
|
-
declare class NoopCrdtDoc
|
|
23
|
+
declare class NoopCrdtDoc implements CrdtDocLike<any> {
|
|
52
24
|
applyEncodedState(params: DocApplyEncodedStateParams): this;
|
|
53
25
|
batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
|
|
54
26
|
canRedo(): boolean;
|
|
@@ -68,13 +40,14 @@ declare class NoopCrdtDoc extends AbstractCrdtDoc<any> {
|
|
|
68
40
|
}
|
|
69
41
|
|
|
70
42
|
declare class NoopCrdtDocFactory extends AbstractCrdtDocFactory<any> {
|
|
43
|
+
constructor(initialStorage?: () => {});
|
|
71
44
|
getEmpty(): NoopCrdtDoc;
|
|
72
|
-
getFactory(initialStorage?: (() => any) | undefined): NoopCrdtDocFactory;
|
|
73
|
-
getInitialized(initialStorage?: (() => any) | undefined): NoopCrdtDoc;
|
|
45
|
+
getFactory(initialStorage?: ((builder: any) => any) | undefined): NoopCrdtDocFactory;
|
|
46
|
+
getInitialized(initialStorage?: ((builder: any) => any) | undefined): NoopCrdtDoc;
|
|
74
47
|
}
|
|
75
48
|
|
|
76
49
|
declare const noop: {
|
|
77
50
|
doc: (args?: any) => NoopCrdtDocFactory;
|
|
78
51
|
};
|
|
79
52
|
|
|
80
|
-
export {
|
|
53
|
+
export { AbstractCrdtDocFactory, type CrdtType, type InferBuilder, type InferCrdtJson, type InferInitialStorageFn, type InferStorage, NoopCrdtDoc, NoopCrdtDocFactory, noop };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Json,
|
|
1
|
+
import { Json, CrdtDocLike, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, DocSubscribeCallbackParams } from '@pluv/types';
|
|
2
|
+
export { CrdtDocLike, DocApplyEncodedStateParams, DocBatchApplyEncodedStateParams, DocSubscribeCallbackParams } from '@pluv/types';
|
|
2
3
|
|
|
3
4
|
type CrdtType<TValue extends unknown, TJson extends unknown = any> = Omit<TValue, "__pluvType"> & {
|
|
4
5
|
__pluvType: () => TJson;
|
|
@@ -6,49 +7,20 @@ type CrdtType<TValue extends unknown, TJson extends unknown = any> = Omit<TValue
|
|
|
6
7
|
type InferCrdtJson<T extends unknown> = T extends CrdtType<any, infer IJson> ? InferCrdtJson<IJson> : T extends Record<string, any> ? {
|
|
7
8
|
[P in keyof T]: InferCrdtJson<T[P]>;
|
|
8
9
|
} : T extends (infer IJson)[] ? InferCrdtJson<IJson>[] : T extends readonly (infer IJson)[] ? readonly InferCrdtJson<IJson>[] : T extends Json ? T : string;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
update?: Maybe<string | Uint8Array>;
|
|
13
|
-
}
|
|
14
|
-
interface DocBatchApplyEncodedStateParams {
|
|
15
|
-
origin?: string;
|
|
16
|
-
updates?: Maybe<readonly Maybe<string | Uint8Array>[]>;
|
|
17
|
-
}
|
|
18
|
-
interface DocSubscribeCallbackParams<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
19
|
-
doc: AbstractCrdtDoc<TStorage>;
|
|
20
|
-
local: boolean;
|
|
21
|
-
origin?: string | null;
|
|
22
|
-
update: string;
|
|
23
|
-
}
|
|
24
|
-
declare abstract class AbstractCrdtDoc<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
25
|
-
abstract applyEncodedState(params: DocApplyEncodedStateParams): this;
|
|
26
|
-
abstract batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
|
|
27
|
-
abstract canRedo(): boolean;
|
|
28
|
-
abstract canUndo(): boolean;
|
|
29
|
-
abstract destroy(): void;
|
|
30
|
-
abstract get(key?: undefined): TStorage;
|
|
31
|
-
abstract get<TKey extends keyof TStorage>(key: TKey): TStorage[TKey];
|
|
32
|
-
abstract getEncodedState(): string;
|
|
33
|
-
abstract isEmpty(): boolean;
|
|
34
|
-
abstract rebuildStorage(reference: TStorage): this;
|
|
35
|
-
abstract redo(): this;
|
|
36
|
-
abstract subscribe(listener: (params: DocSubscribeCallbackParams<TStorage>) => void): () => void;
|
|
37
|
-
abstract toJson(): InferCrdtJson<TStorage>;
|
|
38
|
-
abstract toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;
|
|
39
|
-
abstract track(): this;
|
|
40
|
-
abstract transact(fn: () => void, origin?: string): this;
|
|
41
|
-
abstract undo(): this;
|
|
42
|
-
}
|
|
10
|
+
type InferInitialStorageFn<TFactory extends AbstractCrdtDocFactory<any>> = TFactory["_initialStorage"];
|
|
11
|
+
type InferStorage<TFactory extends AbstractCrdtDocFactory<any>> = ReturnType<InferInitialStorageFn<TFactory>>;
|
|
12
|
+
type InferBuilder<TFactory extends AbstractCrdtDocFactory<any>> = Parameters<InferInitialStorageFn<TFactory>>[0];
|
|
43
13
|
|
|
44
14
|
declare abstract class AbstractCrdtDocFactory<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
abstract
|
|
15
|
+
_initialStorage: (builder: any) => TStorage;
|
|
16
|
+
constructor(initialStorage: (builder: any) => TStorage);
|
|
17
|
+
abstract getEmpty(): CrdtDocLike<TStorage>;
|
|
18
|
+
abstract getFactory(initialStorage?: (builder: any) => TStorage): AbstractCrdtDocFactory<TStorage>;
|
|
19
|
+
abstract getInitialized(initialStorage?: (builder: any) => TStorage): CrdtDocLike<TStorage>;
|
|
48
20
|
resolveEncodedState(updates: string | string[] | readonly string[]): string | null;
|
|
49
21
|
}
|
|
50
22
|
|
|
51
|
-
declare class NoopCrdtDoc
|
|
23
|
+
declare class NoopCrdtDoc implements CrdtDocLike<any> {
|
|
52
24
|
applyEncodedState(params: DocApplyEncodedStateParams): this;
|
|
53
25
|
batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
|
|
54
26
|
canRedo(): boolean;
|
|
@@ -68,13 +40,14 @@ declare class NoopCrdtDoc extends AbstractCrdtDoc<any> {
|
|
|
68
40
|
}
|
|
69
41
|
|
|
70
42
|
declare class NoopCrdtDocFactory extends AbstractCrdtDocFactory<any> {
|
|
43
|
+
constructor(initialStorage?: () => {});
|
|
71
44
|
getEmpty(): NoopCrdtDoc;
|
|
72
|
-
getFactory(initialStorage?: (() => any) | undefined): NoopCrdtDocFactory;
|
|
73
|
-
getInitialized(initialStorage?: (() => any) | undefined): NoopCrdtDoc;
|
|
45
|
+
getFactory(initialStorage?: ((builder: any) => any) | undefined): NoopCrdtDocFactory;
|
|
46
|
+
getInitialized(initialStorage?: ((builder: any) => any) | undefined): NoopCrdtDoc;
|
|
74
47
|
}
|
|
75
48
|
|
|
76
49
|
declare const noop: {
|
|
77
50
|
doc: (args?: any) => NoopCrdtDocFactory;
|
|
78
51
|
};
|
|
79
52
|
|
|
80
|
-
export {
|
|
53
|
+
export { AbstractCrdtDocFactory, type CrdtType, type InferBuilder, type InferCrdtJson, type InferInitialStorageFn, type InferStorage, NoopCrdtDoc, NoopCrdtDocFactory, noop };
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
-
AbstractCrdtDoc: () => AbstractCrdtDoc,
|
|
24
23
|
AbstractCrdtDocFactory: () => AbstractCrdtDocFactory,
|
|
25
24
|
NoopCrdtDoc: () => NoopCrdtDoc,
|
|
26
25
|
NoopCrdtDocFactory: () => NoopCrdtDocFactory,
|
|
@@ -28,12 +27,11 @@ __export(index_exports, {
|
|
|
28
27
|
});
|
|
29
28
|
module.exports = __toCommonJS(index_exports);
|
|
30
29
|
|
|
31
|
-
// src/AbstractCrdtDoc.ts
|
|
32
|
-
var AbstractCrdtDoc = class {
|
|
33
|
-
};
|
|
34
|
-
|
|
35
30
|
// src/AbstractCrdtDocFactory.ts
|
|
36
31
|
var AbstractCrdtDocFactory = class {
|
|
32
|
+
constructor(initialStorage) {
|
|
33
|
+
this._initialStorage = initialStorage;
|
|
34
|
+
}
|
|
37
35
|
resolveEncodedState(updates) {
|
|
38
36
|
if (typeof updates === "string") return updates;
|
|
39
37
|
if (!updates.length) return null;
|
|
@@ -42,7 +40,7 @@ var AbstractCrdtDocFactory = class {
|
|
|
42
40
|
};
|
|
43
41
|
|
|
44
42
|
// src/NoopCrdtDoc.ts
|
|
45
|
-
var NoopCrdtDoc = class
|
|
43
|
+
var NoopCrdtDoc = class {
|
|
46
44
|
applyEncodedState(params) {
|
|
47
45
|
return this;
|
|
48
46
|
}
|
|
@@ -93,6 +91,9 @@ var NoopCrdtDoc = class extends AbstractCrdtDoc {
|
|
|
93
91
|
|
|
94
92
|
// src/NoopCrdtDocFactory.ts
|
|
95
93
|
var NoopCrdtDocFactory = class extends AbstractCrdtDocFactory {
|
|
94
|
+
constructor(initialStorage = () => ({})) {
|
|
95
|
+
super(initialStorage);
|
|
96
|
+
}
|
|
96
97
|
getEmpty() {
|
|
97
98
|
return new NoopCrdtDoc();
|
|
98
99
|
}
|
|
@@ -110,7 +111,6 @@ var noop = {
|
|
|
110
111
|
};
|
|
111
112
|
// Annotate the CommonJS export names for ESM import in node:
|
|
112
113
|
0 && (module.exports = {
|
|
113
|
-
AbstractCrdtDoc,
|
|
114
114
|
AbstractCrdtDocFactory,
|
|
115
115
|
NoopCrdtDoc,
|
|
116
116
|
NoopCrdtDocFactory,
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
// src/AbstractCrdtDoc.ts
|
|
2
|
-
var AbstractCrdtDoc = class {
|
|
3
|
-
};
|
|
4
|
-
|
|
5
1
|
// src/AbstractCrdtDocFactory.ts
|
|
6
2
|
var AbstractCrdtDocFactory = class {
|
|
3
|
+
constructor(initialStorage) {
|
|
4
|
+
this._initialStorage = initialStorage;
|
|
5
|
+
}
|
|
7
6
|
resolveEncodedState(updates) {
|
|
8
7
|
if (typeof updates === "string") return updates;
|
|
9
8
|
if (!updates.length) return null;
|
|
@@ -12,7 +11,7 @@ var AbstractCrdtDocFactory = class {
|
|
|
12
11
|
};
|
|
13
12
|
|
|
14
13
|
// src/NoopCrdtDoc.ts
|
|
15
|
-
var NoopCrdtDoc = class
|
|
14
|
+
var NoopCrdtDoc = class {
|
|
16
15
|
applyEncodedState(params) {
|
|
17
16
|
return this;
|
|
18
17
|
}
|
|
@@ -63,6 +62,9 @@ var NoopCrdtDoc = class extends AbstractCrdtDoc {
|
|
|
63
62
|
|
|
64
63
|
// src/NoopCrdtDocFactory.ts
|
|
65
64
|
var NoopCrdtDocFactory = class extends AbstractCrdtDocFactory {
|
|
65
|
+
constructor(initialStorage = () => ({})) {
|
|
66
|
+
super(initialStorage);
|
|
67
|
+
}
|
|
66
68
|
getEmpty() {
|
|
67
69
|
return new NoopCrdtDoc();
|
|
68
70
|
}
|
|
@@ -79,7 +81,6 @@ var noop = {
|
|
|
79
81
|
doc: (args) => new NoopCrdtDocFactory()
|
|
80
82
|
};
|
|
81
83
|
export {
|
|
82
|
-
AbstractCrdtDoc,
|
|
83
84
|
AbstractCrdtDocFactory,
|
|
84
85
|
NoopCrdtDoc,
|
|
85
86
|
NoopCrdtDocFactory,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pluv/crdt",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "crdt base for @pluv/io",
|
|
5
5
|
"author": "leedavidcs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -17,14 +17,14 @@
|
|
|
17
17
|
"access": "public"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@pluv/types": "^
|
|
20
|
+
"@pluv/types": "^2.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"eslint": "^9.25.1",
|
|
24
24
|
"tsup": "^8.4.0",
|
|
25
25
|
"typescript": "^5.8.3",
|
|
26
|
-
"@pluv/tsconfig": "^
|
|
27
|
-
"eslint-config-pluv": "^
|
|
26
|
+
"@pluv/tsconfig": "^2.0.0",
|
|
27
|
+
"eslint-config-pluv": "^2.0.0"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "tsup src/index.ts --format esm,cjs --dts",
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CrdtDocLike } from "@pluv/types";
|
|
2
2
|
import type { CrdtType } from "./types";
|
|
3
3
|
|
|
4
4
|
export abstract class AbstractCrdtDocFactory<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
5
|
-
public
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
public _initialStorage: (builder: any) => TStorage;
|
|
6
|
+
|
|
7
|
+
constructor(initialStorage: (builder: any) => TStorage) {
|
|
8
|
+
this._initialStorage = initialStorage;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public abstract getEmpty(): CrdtDocLike<TStorage>;
|
|
12
|
+
public abstract getFactory(
|
|
13
|
+
initialStorage?: (builder: any) => TStorage,
|
|
14
|
+
): AbstractCrdtDocFactory<TStorage>;
|
|
15
|
+
public abstract getInitialized(
|
|
16
|
+
initialStorage?: (builder: any) => TStorage,
|
|
17
|
+
): CrdtDocLike<TStorage>;
|
|
8
18
|
|
|
9
19
|
public resolveEncodedState(updates: string | string[] | readonly string[]): string | null {
|
|
10
20
|
if (typeof updates === "string") return updates;
|
package/src/NoopCrdtDoc.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
CrdtDocLike,
|
|
2
3
|
DocApplyEncodedStateParams,
|
|
3
4
|
DocBatchApplyEncodedStateParams,
|
|
4
5
|
DocSubscribeCallbackParams,
|
|
5
|
-
} from "
|
|
6
|
-
import { AbstractCrdtDoc } from "./AbstractCrdtDoc";
|
|
6
|
+
} from "@pluv/types";
|
|
7
7
|
|
|
8
|
-
export class NoopCrdtDoc
|
|
8
|
+
export class NoopCrdtDoc implements CrdtDocLike<any> {
|
|
9
9
|
public applyEncodedState(params: DocApplyEncodedStateParams): this {
|
|
10
10
|
return this;
|
|
11
11
|
}
|
|
@@ -2,15 +2,19 @@ import { AbstractCrdtDocFactory } from "./AbstractCrdtDocFactory";
|
|
|
2
2
|
import { NoopCrdtDoc } from "./NoopCrdtDoc";
|
|
3
3
|
|
|
4
4
|
export class NoopCrdtDocFactory extends AbstractCrdtDocFactory<any> {
|
|
5
|
+
constructor(initialStorage: () => {} = () => ({})) {
|
|
6
|
+
super(initialStorage);
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
public getEmpty(): NoopCrdtDoc {
|
|
6
10
|
return new NoopCrdtDoc();
|
|
7
11
|
}
|
|
8
12
|
|
|
9
|
-
public getFactory(initialStorage?: (() => any) | undefined): NoopCrdtDocFactory {
|
|
13
|
+
public getFactory(initialStorage?: ((builder: any) => any) | undefined): NoopCrdtDocFactory {
|
|
10
14
|
return this;
|
|
11
15
|
}
|
|
12
16
|
|
|
13
|
-
public getInitialized(initialStorage?: (() => any) | undefined): NoopCrdtDoc {
|
|
17
|
+
public getInitialized(initialStorage?: ((builder: any) => any) | undefined): NoopCrdtDoc {
|
|
14
18
|
return new NoopCrdtDoc();
|
|
15
19
|
}
|
|
16
20
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
export { AbstractCrdtDoc } from "./AbstractCrdtDoc";
|
|
2
1
|
export type {
|
|
2
|
+
CrdtDocLike,
|
|
3
3
|
DocApplyEncodedStateParams,
|
|
4
4
|
DocBatchApplyEncodedStateParams,
|
|
5
5
|
DocSubscribeCallbackParams,
|
|
6
|
-
} from "
|
|
6
|
+
} from "@pluv/types";
|
|
7
7
|
export { AbstractCrdtDocFactory } from "./AbstractCrdtDocFactory";
|
|
8
8
|
export { noop } from "./noop";
|
|
9
9
|
export { NoopCrdtDoc } from "./NoopCrdtDoc";
|
|
10
10
|
export { NoopCrdtDocFactory } from "./NoopCrdtDocFactory";
|
|
11
|
-
export type {
|
|
11
|
+
export type {
|
|
12
|
+
CrdtType,
|
|
13
|
+
InferBuilder,
|
|
14
|
+
InferCrdtJson,
|
|
15
|
+
InferInitialStorageFn,
|
|
16
|
+
InferStorage,
|
|
17
|
+
} from "./types";
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Json } from "@pluv/types";
|
|
2
|
+
import { AbstractCrdtDocFactory } from "./AbstractCrdtDocFactory";
|
|
2
3
|
|
|
3
4
|
export type CrdtType<TValue extends unknown, TJson extends unknown = any> = Omit<
|
|
4
5
|
TValue,
|
|
@@ -19,3 +20,14 @@ export type InferCrdtJson<T extends unknown> =
|
|
|
19
20
|
: T extends Json
|
|
20
21
|
? T
|
|
21
22
|
: string;
|
|
23
|
+
|
|
24
|
+
export type InferInitialStorageFn<TFactory extends AbstractCrdtDocFactory<any>> =
|
|
25
|
+
TFactory["_initialStorage"];
|
|
26
|
+
|
|
27
|
+
export type InferStorage<TFactory extends AbstractCrdtDocFactory<any>> = ReturnType<
|
|
28
|
+
InferInitialStorageFn<TFactory>
|
|
29
|
+
>;
|
|
30
|
+
|
|
31
|
+
export type InferBuilder<TFactory extends AbstractCrdtDocFactory<any>> = Parameters<
|
|
32
|
+
InferInitialStorageFn<TFactory>
|
|
33
|
+
>[0];
|
package/src/AbstractCrdtDoc.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { Maybe } from "@pluv/types";
|
|
2
|
-
import type { CrdtType, InferCrdtJson } from "./types";
|
|
3
|
-
|
|
4
|
-
export interface DocApplyEncodedStateParams {
|
|
5
|
-
origin?: string;
|
|
6
|
-
update?: Maybe<string | Uint8Array>;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface DocBatchApplyEncodedStateParams {
|
|
10
|
-
origin?: string;
|
|
11
|
-
updates?: Maybe<readonly Maybe<string | Uint8Array>[]>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface DocSubscribeCallbackParams<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
15
|
-
doc: AbstractCrdtDoc<TStorage>;
|
|
16
|
-
local: boolean;
|
|
17
|
-
origin?: string | null;
|
|
18
|
-
update: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export abstract class AbstractCrdtDoc<TStorage extends Record<string, CrdtType<any, any>>> {
|
|
22
|
-
public abstract applyEncodedState(params: DocApplyEncodedStateParams): this;
|
|
23
|
-
public abstract batchApplyEncodedState(params: DocBatchApplyEncodedStateParams): this;
|
|
24
|
-
public abstract canRedo(): boolean;
|
|
25
|
-
public abstract canUndo(): boolean;
|
|
26
|
-
public abstract destroy(): void;
|
|
27
|
-
public abstract get(key?: undefined): TStorage;
|
|
28
|
-
public abstract get<TKey extends keyof TStorage>(key: TKey): TStorage[TKey];
|
|
29
|
-
public abstract getEncodedState(): string;
|
|
30
|
-
public abstract isEmpty(): boolean;
|
|
31
|
-
public abstract rebuildStorage(reference: TStorage): this;
|
|
32
|
-
public abstract redo(): this;
|
|
33
|
-
public abstract subscribe(
|
|
34
|
-
listener: (params: DocSubscribeCallbackParams<TStorage>) => void,
|
|
35
|
-
): () => void;
|
|
36
|
-
public abstract toJson(): InferCrdtJson<TStorage>;
|
|
37
|
-
public abstract toJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]>;
|
|
38
|
-
public abstract track(): this;
|
|
39
|
-
public abstract transact(fn: () => void, origin?: string): this;
|
|
40
|
-
public abstract undo(): this;
|
|
41
|
-
}
|