@pluv/react 3.2.2 → 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.
- package/.turbo/turbo-build.log +16 -16
- package/CHANGELOG.md +20 -0
- package/dist/index.d.mts +48 -49
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +408 -554
- package/dist/index.mjs.map +1 -0
- package/package.json +20 -16
- package/src/createBundle.tsx +9 -8
- package/src/internal/hooks/useNoSsr.ts +1 -0
- package/src/internal/hooks/useSyncExternalStoreWithSelector.ts +1 -0
- package/tsdown.config.ts +15 -0
- package/dist/index.d.ts +0 -72
- package/dist/index.js +0 -596
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
|
|
2
|
-
> @pluv/react@
|
|
3
|
-
>
|
|
2
|
+
> @pluv/react@4.0.0 build /home/runner/work/pluv/pluv/packages/react
|
|
3
|
+
> tsdown
|
|
4
4
|
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
|
|
18
|
-
[
|
|
5
|
+
[34mℹ[39m tsdown [2mv0.20.0-beta.4[22m powered by rolldown [2mv1.0.0-beta.60[22m
|
|
6
|
+
[34mℹ[39m config file: [4m/home/runner/work/pluv/pluv/packages/react/tsdown.config.ts[24m
|
|
7
|
+
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
8
|
+
[34mℹ[39m target: [34mesnext[39m
|
|
9
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
10
|
+
[34mℹ[39m Build start
|
|
11
|
+
[34mℹ[39m [2mdist/[22m[1mindex.mjs[22m [2m13.72 kB[22m [2m│ gzip: 3.20 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22mindex.mjs.map [2m35.93 kB[22m [2m│ gzip: 7.89 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22mindex.d.mts.map [2m 3.93 kB[22m [2m│ gzip: 1.05 kB[22m
|
|
14
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.mts[22m[39m [2m 6.17 kB[22m [2m│ gzip: 1.56 kB[22m
|
|
15
|
+
[34mℹ[39m 4 files, total: 59.75 kB
|
|
16
|
+
[33m[PLUGIN_TIMINGS] Warning:[0m Your build spent significant time in plugin `rolldown-plugin-dts:generate`. See https://rolldown.rs/options/checks#plugintimings for more details.
|
|
17
|
+
|
|
18
|
+
[32m✔[39m Build complete in [32m4179ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @pluv/react
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- df5c39c: Update all packages to be ESM only.
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- 037074e: Migrated build process from tsup to tsdown.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 2eb5def: Bumped dependencies.
|
|
16
|
+
- Updated dependencies [2eb5def]
|
|
17
|
+
- Updated dependencies [df5c39c]
|
|
18
|
+
- Updated dependencies [037074e]
|
|
19
|
+
- @pluv/client@4.0.0
|
|
20
|
+
- @pluv/types@4.0.0
|
|
21
|
+
- @pluv/crdt@4.0.0
|
|
22
|
+
|
|
3
23
|
## 3.2.2
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,72 +1,71 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { MergeEvents, MockedRoomEvents, PluvClient, PluvRoomAddon, PluvRoomDebug, PluvRouter, PluvRouterEventConfig, UserInfo, WebSocketConnection } from "@pluv/client";
|
|
2
|
+
import { Dispatch, FC, ReactNode } from "react";
|
|
3
|
+
import { AbstractCrdtDocFactory, InferCrdtJson, InferDoc, InferInitialStorageFn, InferStorage } from "@pluv/crdt";
|
|
4
|
+
import { CrdtDocLike, IOEventMessage, IOLike, Id, InferIOCrdtKind, InferIOInput, InferIOOutput, JsonObject, MaybePromise, RoomLike, UpdateMyPresenceAction } from "@pluv/types";
|
|
5
5
|
|
|
6
|
+
//#region src/types.d.ts
|
|
6
7
|
interface PluvProviderProps {
|
|
7
|
-
|
|
8
|
+
children?: ReactNode;
|
|
8
9
|
}
|
|
9
10
|
type BaseRoomProviderProps<TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>> = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
initialStorage?: keyof InferStorage<TCrdt> extends never ? never : InferInitialStorageFn<TCrdt>;
|
|
13
|
+
room: string;
|
|
13
14
|
} & (keyof TPresence extends never ? {
|
|
14
|
-
|
|
15
|
+
initialPresence?: never;
|
|
15
16
|
} : {
|
|
16
|
-
|
|
17
|
+
initialPresence: TPresence;
|
|
17
18
|
});
|
|
18
19
|
type MockedRoomProviderProps<TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> = BaseRoomProviderProps<TPresence, TCrdt> & {
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
type BroadcastProxy<TIO extends IOLike> = (<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>) => void) & {
|
|
22
|
-
[event in keyof InferIOInput<TIO>]: (input: Id<InferIOInput<TIO>[event]>) => void;
|
|
23
|
-
};
|
|
24
|
-
type EventProxy<TIO extends IOLike> = {
|
|
25
|
-
[event in keyof InferIOOutput<TIO>]: {
|
|
26
|
-
useEvent: (callback: (data: Id<IOEventMessage<TIO, event>>) => void) => void;
|
|
27
|
-
};
|
|
20
|
+
events?: MockedRoomEvents<MergeEvents<TEvents, TIO>>;
|
|
28
21
|
};
|
|
22
|
+
type BroadcastProxy<TIO extends IOLike> = (<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>) => void) & { [event in keyof InferIOInput<TIO>]: (input: Id<InferIOInput<TIO>[event]>) => void };
|
|
23
|
+
type EventProxy<TIO extends IOLike> = { [event in keyof InferIOOutput<TIO>]: {
|
|
24
|
+
useEvent: (callback: (data: Id<IOEventMessage<TIO, event>>) => void) => void;
|
|
25
|
+
} };
|
|
29
26
|
type MetadataGetter<TMetadata extends JsonObject> = TMetadata | (() => MaybePromise<TMetadata>);
|
|
30
27
|
type PluvRoomProviderProps<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>> = BaseRoomProviderProps<TPresence, TCrdt> & {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
connect?: boolean;
|
|
29
|
+
debug?: boolean | PluvRoomDebug<TIO>;
|
|
30
|
+
onAuthorizationFail?: (error: Error) => void;
|
|
34
31
|
} & (keyof TMetadata extends never ? {
|
|
35
|
-
|
|
32
|
+
metadata?: undefined;
|
|
36
33
|
} : {
|
|
37
|
-
|
|
34
|
+
metadata: MetadataGetter<TMetadata>;
|
|
38
35
|
});
|
|
39
36
|
interface SubscriptionHookOptions<T extends unknown> {
|
|
40
|
-
|
|
37
|
+
isEqual?: (a: T, b: T) => boolean;
|
|
41
38
|
}
|
|
42
39
|
interface CreateBundle<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
40
|
+
MockedRoomProvider: FC<MockedRoomProviderProps<TIO, TPresence, TCrdt>>;
|
|
41
|
+
PluvProvider: FC<PluvProviderProps>;
|
|
42
|
+
PluvRoomProvider: FC<PluvRoomProviderProps<TIO, TMetadata, TPresence, TCrdt>>;
|
|
43
|
+
event: EventProxy<MergeEvents<TEvents, TIO>>;
|
|
44
|
+
useBroadcast: () => BroadcastProxy<MergeEvents<TEvents, TIO>>;
|
|
45
|
+
useCanRedo: () => boolean;
|
|
46
|
+
useCanUndo: () => boolean;
|
|
47
|
+
useClient: () => PluvClient<TIO, TPresence, TCrdt, TMetadata>;
|
|
48
|
+
useConnection: <T extends unknown = WebSocketConnection>(selector?: (connection: WebSocketConnection) => T, options?: SubscriptionHookOptions<Id<T>>) => Id<T>;
|
|
49
|
+
useDoc: () => CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
|
|
50
|
+
useEvent: <TType extends keyof InferIOOutput<MergeEvents<TEvents, TIO>>>(type: TType, callback: (data: Id<IOEventMessage<MergeEvents<TEvents, TIO>, TType>>) => void) => void;
|
|
51
|
+
useMyPresence: <T extends unknown = TPresence>(selector?: (myPresence: TPresence) => T, options?: SubscriptionHookOptions<Id<T> | null>) => [myPresence: Id<T>, updateMyPresence: Dispatch<UpdateMyPresenceAction<TPresence>>];
|
|
52
|
+
useMyself: <T extends unknown = UserInfo<TIO, TPresence>>(selector?: (myself: Id<UserInfo<TIO, TPresence>>) => T, options?: SubscriptionHookOptions<Id<T> | null>) => Id<T> | null;
|
|
53
|
+
useOther: <T extends unknown = UserInfo<TIO, TPresence>>(connectionId: string, selector?: (other: UserInfo<TIO, TPresence>) => T, options?: SubscriptionHookOptions<T | null>) => T | null;
|
|
54
|
+
useOthers: <T extends unknown = readonly UserInfo<TIO, TPresence>[]>(selector?: (other: readonly Id<UserInfo<TIO, TPresence>>[]) => T, options?: SubscriptionHookOptions<T>) => T;
|
|
55
|
+
useRedo: () => () => void;
|
|
56
|
+
useRoom: () => RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>, TEvents>;
|
|
57
|
+
useStorage: <TKey extends keyof InferStorage<TCrdt>, TData extends unknown = InferCrdtJson<InferStorage<TCrdt>[TKey]>>(key: TKey, selector?: (data: InferCrdtJson<InferStorage<TCrdt>[TKey]>) => TData, options?: SubscriptionHookOptions<TData | null>) => [data: TData | null, sharedType: InferStorage<TCrdt>[TKey] | null];
|
|
58
|
+
useTransact: () => (fn: (storage: InferStorage<TCrdt>) => void, origin?: string) => void;
|
|
59
|
+
useUndo: () => () => void;
|
|
63
60
|
}
|
|
64
61
|
type InferBundleRoom<TBundle extends CreateBundle<any, any, any, any, any>> = TBundle extends CreateBundle<infer IIO, any, infer IPresence, infer ICrdt, infer IEvents> ? RoomLike<IIO, InferDoc<ICrdt>, IPresence, InferStorage<ICrdt>, IEvents> : never;
|
|
65
|
-
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/createBundle.d.ts
|
|
66
64
|
type CreateBundleOptions<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject = {}, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> = {
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, TCrdt>[];
|
|
66
|
+
router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
|
|
69
67
|
};
|
|
70
68
|
declare const createBundle: <TIO extends IOLike<any, any, any>, TMetadata extends JsonObject = {}, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}>(client: PluvClient<TIO, TPresence, TCrdt, TMetadata>, options?: CreateBundleOptions<TIO, TMetadata, TPresence, TCrdt, TEvents>) => CreateBundle<TIO, TMetadata, TPresence, TCrdt, TEvents>;
|
|
71
|
-
|
|
69
|
+
//#endregion
|
|
72
70
|
export { type CreateBundle, type EventProxy, type InferBundleRoom, type PluvProviderProps, type PluvRoomProviderProps, type SubscriptionHookOptions, createBundle };
|
|
71
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/createBundle.tsx"],"mappings":"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"}
|