@replicast/react 1.0.0-rc.7 → 1.0.0-rc.9

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.
@@ -1,8 +1,11 @@
1
1
  import type { App, StoreConstructors, StoreInstances, ConnectOptions } from '@replicast/core';
2
2
  import type { WsClient } from '@replicast/core';
3
3
  import type { ConnectionState } from './connection-store.js';
4
+ import type { UseEntities } from './use-entities.js';
4
5
  type ConnectReactRPC<TStores extends StoreConstructors> = {
5
6
  useConnection: () => ConnectionState;
7
+ /** Reactive view of the entities this client can currently see, e.g. `rpc.useEntities(Ship)`. */
8
+ useEntities: UseEntities;
6
9
  } & {
7
10
  [K in keyof TStores as `use${Capitalize<string & K>}`]: () => InstanceType<TStores[K]>;
8
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"connect-react.d.ts","sourceRoot":"","sources":["../src/connect-react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,KAAK,eAAe,CAAC,OAAO,SAAS,iBAAiB,IAAI;IACxD,aAAa,EAAE,MAAM,eAAe,CAAA;CACrC,GAAG;KACD,CAAC,IAAI,MAAM,OAAO,IAAI,MAAM,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACvF,CAAA;AAED,KAAK,kBAAkB,CAAC,OAAO,SAAS,iBAAiB,EAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI;IACpG,MAAM,EAAE,QAAQ,CAAA;IAChB,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,EAAE,QAAQ,CAAA;CAClB,CAAA;AAED,wBAAgB,YAAY,CAC1B,OAAO,SAAS,iBAAiB,EACjC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAEvC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC3B,OAAO,EAAE,cAAc,GACtB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAWvC"}
1
+ {"version":3,"file":"connect-react.d.ts","sourceRoot":"","sources":["../src/connect-react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,KAAK,eAAe,CAAC,OAAO,SAAS,iBAAiB,IAAI;IACxD,aAAa,EAAE,MAAM,eAAe,CAAA;IACpC,iGAAiG;IACjG,WAAW,EAAE,WAAW,CAAA;CACzB,GAAG;KACD,CAAC,IAAI,MAAM,OAAO,IAAI,MAAM,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACvF,CAAA;AAED,KAAK,kBAAkB,CAAC,OAAO,SAAS,iBAAiB,EAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI;IACpG,MAAM,EAAE,QAAQ,CAAA;IAChB,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,EAAE,QAAQ,CAAA;CAClB,CAAA;AAED,wBAAgB,YAAY,CAC1B,OAAO,SAAS,iBAAiB,EACjC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAEvC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC3B,OAAO,EAAE,cAAc,GACtB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAWvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect-react.js","sourceRoot":"","sources":["../src/connect-react.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAgBvC,MAAM,UAAU,YAAY,CAI1B,GAA2B,EAC3B,OAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI;QACJ,QAAQ,EAAE,QAAkB;KAC7B,CAAC,CAAC,CAAA;IACH,0FAA0F;IAC1F,wFAAwF;IACxF,6EAA6E;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAwC,CAAA;IAC5F,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"connect-react.js","sourceRoot":"","sources":["../src/connect-react.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAmBvC,MAAM,UAAU,YAAY,CAI1B,GAA2B,EAC3B,OAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI;QACJ,QAAQ,EAAE,QAAkB;KAC7B,CAAC,CAAC,CAAA;IACH,0FAA0F;IAC1F,wFAAwF;IACxF,6EAA6E;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAwC,CAAA;IAC5F,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACzC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { initRPC } from './init-rpc.js';
2
2
  export type { ConnectionState, ConnectionStatus, ConnectionQuality } from './connection-store.js';
3
3
  export { connectReact } from './connect-react.js';
4
+ export { createUseEntities } from './use-entities.js';
5
+ export type { EntityRegistryLike, UseEntities } from './use-entities.js';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { initRPC } from './init-rpc.js';
2
2
  export { connectReact } from './connect-react.js';
3
+ export { createUseEntities } from './use-entities.js';
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -1,3 +1,4 @@
1
+ import type { EntityRegistryLike, UseEntities } from './use-entities.js';
1
2
  interface StoreEntry {
2
3
  instance: object;
3
4
  name: string;
@@ -9,12 +10,15 @@ interface InitRPCOptions {
9
10
  quality: any;
10
11
  onStatusChange?: (status: any) => void;
11
12
  onLatencyChange?: (latency: number, quality: any) => void;
13
+ /** Present on every WsClient; absent on hand-rolled stubs. */
14
+ entities?: EntityRegistryLike;
12
15
  };
13
16
  stores: StoreEntry[];
14
17
  }
15
18
  type UseStoreHook<T extends object> = () => T;
16
19
  type RPCResult<Stores extends StoreEntry[]> = {
17
20
  useConnection: () => import('./connection-store.js').ConnectionState;
21
+ useEntities: UseEntities;
18
22
  } & {
19
23
  [K in Stores[number] as `use${K['name']}`]: UseStoreHook<K['instance'] & object>;
20
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"init-rpc.d.ts","sourceRoot":"","sources":["../src/init-rpc.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,cAAc;IACtB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,OAAO,EAAE,GAAG,CAAA;QACZ,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;QACtC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;KAC1D,CAAA;IACD,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAA;AAE7C,KAAK,SAAS,CAAC,MAAM,SAAS,UAAU,EAAE,IAAI;IAC5C,aAAa,EAAE,MAAM,OAAO,uBAAuB,EAAE,eAAe,CAAA;CACrE,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;CACjF,CAAA;AAED,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,UAAU,EAAE,EACvD,OAAO,EAAE;IAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D,SAAS,CAAC,MAAM,CAAC,CAyDnB"}
1
+ {"version":3,"file":"init-rpc.d.ts","sourceRoot":"","sources":["../src/init-rpc.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAExE,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,cAAc;IACtB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,OAAO,EAAE,GAAG,CAAA;QACZ,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;QACtC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;QACzD,8DAA8D;QAC9D,QAAQ,CAAC,EAAE,kBAAkB,CAAA;KAC9B,CAAA;IACD,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAA;AAE7C,KAAK,SAAS,CAAC,MAAM,SAAS,UAAU,EAAE,IAAI;IAC5C,aAAa,EAAE,MAAM,OAAO,uBAAuB,EAAE,eAAe,CAAA;IACpE,WAAW,EAAE,WAAW,CAAA;CACzB,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;CACjF,CAAA;AAED,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,UAAU,EAAE,EACvD,OAAO,EAAE;IAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D,SAAS,CAAC,MAAM,CAAC,CA0DnB"}
package/dist/init-rpc.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { create } from 'zustand';
2
2
  import { createConnectionStore } from './connection-store.js';
3
3
  import { createUseConnection } from './use-connection.js';
4
+ import { createUseEntities } from './use-entities.js';
4
5
  export function initRPC(options) {
5
6
  const { client, stores } = options;
6
7
  // Set up connection Zustand store
@@ -47,6 +48,7 @@ export function initRPC(options) {
47
48
  }
48
49
  return {
49
50
  useConnection: createUseConnection(connectionStore),
51
+ useEntities: createUseEntities(client.entities),
50
52
  ...storeHooks,
51
53
  };
52
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init-rpc.js","sourceRoot":"","sources":["../src/init-rpc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-rpc.js","sourceRoot":"","sources":["../src/init-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** The slice of `client.entities` this hook needs. Structural so it is easy to stub in tests. */
2
+ export interface EntityRegistryLike {
3
+ subscribe(listener: () => void): () => void;
4
+ byType<T extends object>(Type: new () => T): T[];
5
+ }
6
+ export type UseEntities = <T extends object>(Type: new () => T) => T[];
7
+ /**
8
+ * Builds the `useEntities(Ship)` hook for one client's entity registry. The registry returns a
9
+ * referentially stable array per type until something changes, so React re-renders only on real
10
+ * enter / update / leave transitions.
11
+ */
12
+ export declare function createUseEntities(registry?: EntityRegistryLike): UseEntities;
13
+ //# sourceMappingURL=use-entities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-entities.d.ts","sourceRoot":"","sources":["../src/use-entities.ts"],"names":[],"mappings":"AAEA,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAA;CACjD;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;AAYtE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,kBAAkC,GAAG,WAAW,CAM3F"}
@@ -0,0 +1,23 @@
1
+ import { useCallback, useSyncExternalStore } from 'react';
2
+ /**
3
+ * An empty stand-in for clients created without any entity types. The snapshot must be the same
4
+ * array every call, or useSyncExternalStore re-renders forever.
5
+ */
6
+ const noEntities = [];
7
+ const emptyRegistry = {
8
+ subscribe: () => () => { },
9
+ byType: () => noEntities,
10
+ };
11
+ /**
12
+ * Builds the `useEntities(Ship)` hook for one client's entity registry. The registry returns a
13
+ * referentially stable array per type until something changes, so React re-renders only on real
14
+ * enter / update / leave transitions.
15
+ */
16
+ export function createUseEntities(registry = emptyRegistry) {
17
+ return function useEntities(Type) {
18
+ const subscribe = useCallback((onChange) => registry.subscribe(onChange), []);
19
+ const getSnapshot = useCallback(() => registry.byType(Type), [Type]);
20
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
21
+ };
22
+ }
23
+ //# sourceMappingURL=use-entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-entities.js","sourceRoot":"","sources":["../src/use-entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAUzD;;;GAGG;AACH,MAAM,UAAU,GAAY,EAAE,CAAA;AAC9B,MAAM,aAAa,GAAuB;IACxC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC;IACzB,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU;CACzB,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAA+B,aAAa;IAC5E,OAAO,SAAS,WAAW,CAAmB,IAAiB;QAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,QAAoB,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;QACzF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACpE,OAAO,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;IAClE,CAAC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@replicast/react",
3
- "version": "1.0.0-rc.7",
3
+ "version": "1.0.0-rc.9",
4
4
  "description": "React hooks for replicast — initRPC, useConnection, and reactive per-store hooks",
5
5
  "license": "MIT",
6
6
  "type": "module",