@react-remote-state/client 1.1.5 → 1.1.8

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.mts CHANGED
@@ -1,17 +1,12 @@
1
1
  import { Game } from '@react-remote-state/types';
2
2
 
3
- declare function getPlayer<GameCustom, PlayerCustom>(playerId?: string, game?: Game<GameCustom, PlayerCustom>): {
4
- id: string;
5
- host: boolean;
6
- connected: boolean;
7
- custom: PlayerCustom | undefined;
8
- } | undefined;
9
- declare function isHost<GameCustom, PlayerCustom>(playerId?: string, game?: Game<GameCustom, PlayerCustom>): boolean | undefined;
10
- type Reducer<GameCustom, PlayerCustom, Action> = (game: Game<GameCustom, PlayerCustom>, action: Action, playerId: string) => Game<GameCustom, PlayerCustom>;
11
- declare function useRemoteReducer<GameCustom, PlayerCustom, Action>(uri: string, reducer: Reducer<GameCustom, PlayerCustom, Action>, gameId?: string | null, storage?: Storage): [
12
- Game<GameCustom, PlayerCustom> | undefined,
13
- string | undefined,
14
- (action: Action) => void
3
+ type Reducer<GameCustom, PlayerCustom, Action> = (game: Game<GameCustom, PlayerCustom>, action: Action, playerId: string) => Game<GameCustom, PlayerCustom>;
4
+
5
+ declare function useRemoteReducer<GameCustom, PlayerCustom, Action>(uri: string, reducer: Reducer<GameCustom, PlayerCustom, Action>, gameId?: string | null, acceptPlayer?: (game: Game<GameCustom, PlayerCustom>) => boolean, storage?: Storage): [
6
+ game: Game<GameCustom, PlayerCustom> | undefined,
7
+ localPlayerId: string | undefined,
8
+ dispatch: (action: Action) => void,
9
+ declined: boolean
15
10
  ];
16
11
 
17
- export { getPlayer, isHost, useRemoteReducer };
12
+ export { useRemoteReducer };
package/dist/index.d.ts CHANGED
@@ -1,17 +1,12 @@
1
1
  import { Game } from '@react-remote-state/types';
2
2
 
3
- declare function getPlayer<GameCustom, PlayerCustom>(playerId?: string, game?: Game<GameCustom, PlayerCustom>): {
4
- id: string;
5
- host: boolean;
6
- connected: boolean;
7
- custom: PlayerCustom | undefined;
8
- } | undefined;
9
- declare function isHost<GameCustom, PlayerCustom>(playerId?: string, game?: Game<GameCustom, PlayerCustom>): boolean | undefined;
10
- type Reducer<GameCustom, PlayerCustom, Action> = (game: Game<GameCustom, PlayerCustom>, action: Action, playerId: string) => Game<GameCustom, PlayerCustom>;
11
- declare function useRemoteReducer<GameCustom, PlayerCustom, Action>(uri: string, reducer: Reducer<GameCustom, PlayerCustom, Action>, gameId?: string | null, storage?: Storage): [
12
- Game<GameCustom, PlayerCustom> | undefined,
13
- string | undefined,
14
- (action: Action) => void
3
+ type Reducer<GameCustom, PlayerCustom, Action> = (game: Game<GameCustom, PlayerCustom>, action: Action, playerId: string) => Game<GameCustom, PlayerCustom>;
4
+
5
+ declare function useRemoteReducer<GameCustom, PlayerCustom, Action>(uri: string, reducer: Reducer<GameCustom, PlayerCustom, Action>, gameId?: string | null, acceptPlayer?: (game: Game<GameCustom, PlayerCustom>) => boolean, storage?: Storage): [
6
+ game: Game<GameCustom, PlayerCustom> | undefined,
7
+ localPlayerId: string | undefined,
8
+ dispatch: (action: Action) => void,
9
+ declined: boolean
15
10
  ];
16
11
 
17
- export { getPlayer, isHost, useRemoteReducer };
12
+ export { useRemoteReducer };
package/dist/index.js CHANGED
@@ -1829,7 +1829,7 @@ var require_lodash = __commonJS({
1829
1829
  return defineProperty(func, "toString", {
1830
1830
  "configurable": true,
1831
1831
  "enumerable": false,
1832
- "value": constant(string),
1832
+ "value": constant2(string),
1833
1833
  "writable": true
1834
1834
  });
1835
1835
  };
@@ -4380,7 +4380,7 @@ var require_lodash = __commonJS({
4380
4380
  value = nativeObjectToString.call(value);
4381
4381
  }
4382
4382
  result2[value] = key;
4383
- }, constant(identity));
4383
+ }, constant2(identity));
4384
4384
  var invertBy = createInverter(function(result2, value, key) {
4385
4385
  if (value != null && typeof value.toString != "function") {
4386
4386
  value = nativeObjectToString.call(value);
@@ -4873,7 +4873,7 @@ var require_lodash = __commonJS({
4873
4873
  function conforms(source) {
4874
4874
  return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
4875
4875
  }
4876
- function constant(value) {
4876
+ function constant2(value) {
4877
4877
  return function() {
4878
4878
  return value;
4879
4879
  };
@@ -5055,7 +5055,7 @@ var require_lodash = __commonJS({
5055
5055
  lodash.concat = concat;
5056
5056
  lodash.cond = cond;
5057
5057
  lodash.conforms = conforms;
5058
- lodash.constant = constant;
5058
+ lodash.constant = constant2;
5059
5059
  lodash.countBy = countBy;
5060
5060
  lodash.create = create;
5061
5061
  lodash.curry = curry;
@@ -5531,11 +5531,13 @@ var require_lodash = __commonJS({
5531
5531
  // src/index.ts
5532
5532
  var src_exports = {};
5533
5533
  __export(src_exports, {
5534
- getPlayer: () => getPlayer,
5535
- isHost: () => isHost,
5536
5534
  useRemoteReducer: () => useRemoteReducer
5537
5535
  });
5538
5536
  module.exports = __toCommonJS(src_exports);
5537
+ var import_react2 = require("react");
5538
+ var import_lodash2 = __toESM(require_lodash());
5539
+
5540
+ // src/hooks.ts
5539
5541
  var import_react = require("react");
5540
5542
 
5541
5543
  // src/socket.ts
@@ -5545,8 +5547,10 @@ var mod = {
5545
5547
  };
5546
5548
  var socket_default = mod;
5547
5549
 
5548
- // src/index.ts
5550
+ // src/hooks.ts
5549
5551
  var import_lodash = __toESM(require_lodash());
5552
+
5553
+ // src/player.ts
5550
5554
  function getPlayer(playerId, game) {
5551
5555
  if (!game || !playerId) {
5552
5556
  return void 0;
@@ -5557,89 +5561,77 @@ function isHost(playerId, game) {
5557
5561
  let player = getPlayer(playerId, game);
5558
5562
  return player == null ? void 0 : player.host;
5559
5563
  }
5560
- function wrapReducer(reducer) {
5561
- return (game, internalAction) => {
5562
- switch (internalAction.type) {
5563
- case 1 /* Update */:
5564
- return internalAction.game;
5565
- case 0 /* Reduce */:
5566
- if (!!game) {
5567
- internalAction.client.emit("update", {
5568
- game: reducer(game, internalAction.action, internalAction.playerId)
5569
- });
5570
- }
5571
- return game;
5572
- }
5573
- };
5574
- }
5575
- function useRemoteReducer(uri, reducer, gameId, storage = sessionStorage) {
5576
- let [meta, setMeta] = (0, import_react.useState)({
5577
- isHostReady: false,
5578
- isGuestReady: false
5579
- });
5580
- let [game, internalDispatch] = (0, import_react.useReducer)(wrapReducer(reducer), void 0);
5581
- let dispatch = (action) => {
5582
- if (!!meta.client && !!game) {
5583
- meta.client.emit("notify", { gameId: game.id, action });
5584
- }
5585
- };
5564
+
5565
+ // src/hooks.ts
5566
+ function useClientInitialization(meta, setMeta, uri) {
5586
5567
  (0, import_react.useEffect)(() => {
5587
5568
  if (!meta.client) {
5588
5569
  setMeta(__spreadProps(__spreadValues({}, meta), {
5589
5570
  client: socket_default.connect(uri, { transports: ["websocket"] })
5590
5571
  }));
5591
5572
  }
5592
- if (!!meta.client) {
5593
- if (!meta.isGuestReady) {
5594
- meta.client.on("error", console.error);
5595
- meta.client.on("connect", () => {
5596
- var _a, _b, _c;
5597
- if (gameId == void 0 && !game) {
5598
- (_a = meta.client) == null ? void 0 : _a.emit("create");
5599
- } else if (!!gameId) {
5600
- let playerCache = (0, import_lodash.flow)(
5601
- () => !!gameId ? storage.getItem(gameId) : null,
5602
- (cache) => !!cache ? JSON.parse(cache) : null
5603
- )();
5604
- if (!!playerCache) {
5605
- let rejoin = {
5606
- playerId: playerCache.playerId,
5607
- socketId: playerCache.socketId,
5608
- gameId
5609
- };
5610
- (_b = meta.client) == null ? void 0 : _b.emit("rejoin", rejoin);
5611
- } else {
5612
- (_c = meta.client) == null ? void 0 : _c.emit("join", { gameId });
5613
- }
5614
- }
5615
- });
5616
- meta.client.on("assign", (assign) => {
5617
- var _a, _b;
5618
- setMeta(__spreadProps(__spreadValues({}, meta), { localPlayerId: assign.playerId }));
5619
- if (!!((_a = meta == null ? void 0 : meta.client) == null ? void 0 : _a.id)) {
5620
- let playerCache = {
5621
- playerId: assign.playerId,
5622
- socketId: (_b = meta.client) == null ? void 0 : _b.id
5573
+ }, [meta.client]);
5574
+ }
5575
+ function useGuestInitialization(meta, setMeta, storage, internalDispatch, gameId, game) {
5576
+ (0, import_react.useEffect)(() => {
5577
+ if (!!meta.client && !meta.isGuestReady) {
5578
+ meta.client.on("error", console.error);
5579
+ meta.client.on("connect", () => {
5580
+ var _a, _b, _c;
5581
+ if (gameId == void 0 && !game) {
5582
+ (_a = meta.client) == null ? void 0 : _a.emit("create");
5583
+ } else if (!!gameId) {
5584
+ let playerCache = (0, import_lodash.flow)(
5585
+ () => !!gameId ? storage.getItem(gameId) : null,
5586
+ (cache) => !!cache ? JSON.parse(cache) : null
5587
+ )();
5588
+ if (!!playerCache) {
5589
+ let rejoin = {
5590
+ playerId: playerCache.playerId,
5591
+ socketId: playerCache.socketId,
5592
+ gameId
5623
5593
  };
5624
- storage.setItem(assign.gameId, JSON.stringify(playerCache));
5594
+ (_b = meta.client) == null ? void 0 : _b.emit("rejoin", rejoin);
5595
+ } else {
5596
+ (_c = meta.client) == null ? void 0 : _c.emit("join", { gameId });
5625
5597
  }
5626
- });
5627
- meta.client.on(
5628
- "update",
5629
- (update) => internalDispatch({
5630
- type: 1 /* Update */,
5631
- game: update.game
5632
- })
5633
- );
5634
- setMeta(__spreadProps(__spreadValues({}, meta), { isGuestReady: true }));
5635
- }
5598
+ }
5599
+ });
5600
+ meta.client.on("assign", (assign) => {
5601
+ var _a, _b;
5602
+ setMeta(__spreadProps(__spreadValues({}, meta), { localPlayerId: assign.playerId }));
5603
+ if (!!((_a = meta == null ? void 0 : meta.client) == null ? void 0 : _a.id)) {
5604
+ let playerCache = {
5605
+ playerId: assign.playerId,
5606
+ socketId: (_b = meta.client) == null ? void 0 : _b.id
5607
+ };
5608
+ storage.setItem(assign.gameId, JSON.stringify(playerCache));
5609
+ }
5610
+ });
5611
+ meta.client.on(
5612
+ "update",
5613
+ (update) => internalDispatch({
5614
+ type: 1 /* Update */,
5615
+ game: update.game
5616
+ })
5617
+ );
5618
+ meta.client.on("decline", () => setMeta(__spreadProps(__spreadValues({}, meta), { declined: true })));
5619
+ setMeta(__spreadProps(__spreadValues({}, meta), { isGuestReady: true }));
5620
+ }
5621
+ }, [meta.client, meta.isGuestReady]);
5622
+ }
5623
+ function useHostInitialization(meta, setMeta, internalDispatch, game) {
5624
+ (0, import_react.useEffect)(() => {
5625
+ if (!!meta.client) {
5636
5626
  if (isHost(meta.localPlayerId, game) && !meta.isHostReady) {
5637
5627
  meta.client.on("join", (join) => {
5638
- var _a;
5639
- (_a = meta.client) == null ? void 0 : _a.emit("accept", {
5640
- gameId: game == null ? void 0 : game.id,
5641
- playerId: join.playerId
5642
- });
5628
+ if (!!meta.client) {
5629
+ internalDispatch({
5630
+ type: 2 /* Accept */,
5631
+ playerId: join.playerId,
5632
+ client: meta.client
5633
+ });
5634
+ }
5643
5635
  });
5644
5636
  meta.client.on("notify", (notify) => {
5645
5637
  if (!!game && !!meta.client) {
@@ -5655,12 +5647,71 @@ function useRemoteReducer(uri, reducer, gameId, storage = sessionStorage) {
5655
5647
  }
5656
5648
  }
5657
5649
  });
5658
- return [game, meta.localPlayerId, dispatch];
5650
+ }
5651
+
5652
+ // src/reducer.ts
5653
+ function createInternalReducer(reducer, acceptPlayer) {
5654
+ return (game, internalAction) => {
5655
+ var _a;
5656
+ switch (internalAction.type) {
5657
+ case 1 /* Update */:
5658
+ return internalAction.game;
5659
+ case 0 /* Reduce */:
5660
+ if (!!game) {
5661
+ internalAction.client.emit("update", {
5662
+ game: reducer(game, internalAction.action, internalAction.playerId)
5663
+ });
5664
+ }
5665
+ return game;
5666
+ case 2 /* Accept */:
5667
+ if (!!game) {
5668
+ (_a = internalAction.client) == null ? void 0 : _a.emit(
5669
+ acceptPlayer(game) ? "accept" : "decline",
5670
+ {
5671
+ gameId: game.id,
5672
+ playerId: internalAction.playerId
5673
+ }
5674
+ );
5675
+ }
5676
+ return game;
5677
+ }
5678
+ };
5679
+ }
5680
+
5681
+ // src/index.ts
5682
+ function useRemoteReducer(uri, reducer, gameId, acceptPlayer = (0, import_lodash2.constant)(
5683
+ true
5684
+ ), storage = sessionStorage) {
5685
+ let [meta, setMeta] = (0, import_react2.useState)({
5686
+ isHostReady: false,
5687
+ isGuestReady: false,
5688
+ declined: false
5689
+ });
5690
+ let [game, internalDispatch] = (0, import_react2.useReducer)(
5691
+ createInternalReducer(reducer, acceptPlayer),
5692
+ void 0
5693
+ );
5694
+ let dispatch = (action) => {
5695
+ if (!!meta.client && !!game) {
5696
+ meta.client.emit("notify", { gameId: game.id, action });
5697
+ }
5698
+ };
5699
+ useClientInitialization(meta, setMeta, uri);
5700
+ useGuestInitialization(
5701
+ meta,
5702
+ setMeta,
5703
+ storage,
5704
+ internalDispatch,
5705
+ gameId,
5706
+ game
5707
+ );
5708
+ if (!gameId) {
5709
+ useHostInitialization(meta, setMeta, internalDispatch, game);
5710
+ }
5711
+ return [game, meta.localPlayerId, dispatch, meta.declined];
5659
5712
  }
5660
5713
  // Annotate the CommonJS export names for ESM import in node:
5661
5714
  0 && (module.exports = {
5662
- getPlayer,
5663
- isHost,
5664
5715
  useRemoteReducer
5665
5716
  });
5666
5717
  /*! Bundled license information: