@holo-js/flux-react 0.3.16 → 0.3.18
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/dist/index.d.ts +5 -22
- package/dist/index.mjs +3 -17
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
import { FluxClient, FluxConnectionStatus, FluxListenerControls } from '@holo-js/flux';
|
|
2
|
-
import { GeneratedBroadcastManifest, BroadcastPayloadFor
|
|
1
|
+
import { FluxClient, FluxConnectionStatus, FluxListenerControls, FluxManifestTypes } from '@holo-js/flux';
|
|
2
|
+
import { GeneratedBroadcastManifest, BroadcastPayloadFor } from '@holo-js/broadcast';
|
|
3
3
|
|
|
4
|
-
type
|
|
5
|
-
type
|
|
6
|
-
type
|
|
7
|
-
pattern: TPattern;
|
|
8
|
-
}>;
|
|
9
|
-
type ManifestPresenceMember<TManifest extends GeneratedBroadcastManifest, TPattern extends string> = Extract<ManifestChannelEntryByPattern<TManifest, TPattern>, {
|
|
10
|
-
member: unknown;
|
|
11
|
-
}> extends {
|
|
12
|
-
member: infer TMember;
|
|
13
|
-
} ? TMember : BroadcastJsonObject;
|
|
14
|
-
type ManifestEventNamesForPattern<TManifest extends GeneratedBroadcastManifest, TPattern extends string> = TManifest['events'][number] extends infer TEvent ? TEvent extends {
|
|
15
|
-
readonly name: infer TName;
|
|
16
|
-
readonly channels: readonly {
|
|
17
|
-
readonly pattern: infer TEventPattern;
|
|
18
|
-
}[];
|
|
19
|
-
} ? TPattern extends TEventPattern & string ? TName & string : never : never : never;
|
|
20
|
-
type ManifestSubscriptionEventName<TManifest extends GeneratedBroadcastManifest, TChannel extends string> = string extends ManifestEventName<TManifest> ? string : TChannel extends ManifestChannelPattern<TManifest> ? ManifestEventNamesForPattern<TManifest, TChannel> : never;
|
|
21
|
-
type ManifestHookChannel<TManifest extends GeneratedBroadcastManifest> = string extends ManifestChannelPattern<TManifest> ? string : ManifestChannelPattern<TManifest>;
|
|
22
|
-
type ManifestHookEvent<TManifest extends GeneratedBroadcastManifest, TChannel extends string, TEvent extends string> = TEvent & ManifestSubscriptionEventName<TManifest, TChannel>;
|
|
23
|
-
type ManifestHookPresenceMember<TMember, TManifest extends GeneratedBroadcastManifest, TChannel extends string> = unknown extends TMember ? string extends ManifestChannelPattern<TManifest> ? BroadcastJsonObject : ManifestPresenceMember<TManifest, TChannel> : TMember;
|
|
4
|
+
type ManifestHookChannel<TManifest extends GeneratedBroadcastManifest> = FluxManifestTypes<TManifest>['channelPattern'];
|
|
5
|
+
type ManifestHookEvent<TManifest extends GeneratedBroadcastManifest, TChannel extends string, TEvent extends string> = TEvent & FluxManifestTypes<TManifest, TChannel>['adapterEvent'];
|
|
6
|
+
type ManifestHookPresenceMember<TMember, TManifest extends GeneratedBroadcastManifest, TChannel extends string> = FluxManifestTypes<TManifest, TChannel, TMember>['adapterPresenceMember'];
|
|
24
7
|
interface FluxHookOptions<TManifest extends GeneratedBroadcastManifest = GeneratedBroadcastManifest> {
|
|
25
8
|
readonly client?: FluxClient<TManifest>;
|
|
26
9
|
readonly onUnmount?: (cleanup: () => void) => void;
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import { useEffect, useMemo, useReducer, useRef, useSyncExternalStore } from "react";
|
|
3
|
-
import { getFluxClient } from "@holo-js/flux";
|
|
3
|
+
import { fluxInternals, getFluxClient } from "@holo-js/flux";
|
|
4
4
|
function resolveClient(options) {
|
|
5
5
|
return options.client ?? getFluxClient();
|
|
6
6
|
}
|
|
@@ -23,20 +23,6 @@ function useLatestRef(value) {
|
|
|
23
23
|
function serializeEventDependency(events) {
|
|
24
24
|
return Array.isArray(events) ? events.map(String).join("\0") : String(events);
|
|
25
25
|
}
|
|
26
|
-
function memberKey(member) {
|
|
27
|
-
return JSON.stringify(member) ?? String(member);
|
|
28
|
-
}
|
|
29
|
-
function appendPresenceMember(members, member) {
|
|
30
|
-
return Object.freeze([...members, member]);
|
|
31
|
-
}
|
|
32
|
-
function removePresenceMember(members, member) {
|
|
33
|
-
const key = memberKey(member);
|
|
34
|
-
const index = members.findIndex((candidate) => Object.is(candidate, member) || memberKey(candidate) === key);
|
|
35
|
-
if (index < 0) {
|
|
36
|
-
return members;
|
|
37
|
-
}
|
|
38
|
-
return Object.freeze(members.filter((_, candidateIndex) => candidateIndex !== index));
|
|
39
|
-
}
|
|
40
26
|
function useControls(createSubscription, onUnmount, dependencies = []) {
|
|
41
27
|
const controlsRef = useRef(createNoopControls());
|
|
42
28
|
const onUnmountRef = useLatestRef(onUnmount);
|
|
@@ -155,11 +141,11 @@ function useFluxPresence(channel, callbacks = {}, options = {}) {
|
|
|
155
141
|
}
|
|
156
142
|
}).joining((member) => {
|
|
157
143
|
if (active) {
|
|
158
|
-
updateMembers(appendPresenceMember(membersRef.current, member));
|
|
144
|
+
updateMembers(fluxInternals.appendPresenceMember(membersRef.current, member));
|
|
159
145
|
}
|
|
160
146
|
}).leaving((member) => {
|
|
161
147
|
if (active) {
|
|
162
|
-
updateMembers(removePresenceMember(membersRef.current, member));
|
|
148
|
+
updateMembers(fluxInternals.removePresenceMember(membersRef.current, member));
|
|
163
149
|
}
|
|
164
150
|
}).listen();
|
|
165
151
|
onUnmountRef.current?.(cleanup);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holo-js/flux-react",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "Holo-JS Framework - React and Next hook skeletons for Flux",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"test": "vitest --run"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@holo-js/broadcast": "^0.3.
|
|
27
|
-
"@holo-js/flux": "^0.3.
|
|
26
|
+
"@holo-js/broadcast": "^0.3.18",
|
|
27
|
+
"@holo-js/flux": "^0.3.18"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"react": "^19.2.6"
|