@react-remote-state/client 1.1.7 → 1.2.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/dist/index.d.mts +3 -9
- package/dist/index.d.ts +3 -9
- package/dist/index.js +115 -85
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +114 -82
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
import { Game } from '@react-remote-state/types';
|
2
2
|
|
3
|
-
|
4
|
-
|
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>;
|
3
|
+
type Reducer<GameCustom, PlayerCustom, Action> = (game: Game<GameCustom, PlayerCustom>, action: Action, playerId: string) => Game<GameCustom, PlayerCustom>;
|
4
|
+
|
11
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): [
|
12
6
|
game: Game<GameCustom, PlayerCustom> | undefined,
|
13
7
|
localPlayerId: string | undefined,
|
@@ -15,4 +9,4 @@ declare function useRemoteReducer<GameCustom, PlayerCustom, Action>(uri: string,
|
|
15
9
|
declined: boolean
|
16
10
|
];
|
17
11
|
|
18
|
-
export {
|
12
|
+
export { useRemoteReducer };
|
package/dist/index.d.ts
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
import { Game } from '@react-remote-state/types';
|
2
2
|
|
3
|
-
|
4
|
-
|
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>;
|
3
|
+
type Reducer<GameCustom, PlayerCustom, Action> = (game: Game<GameCustom, PlayerCustom>, action: Action, playerId: string) => Game<GameCustom, PlayerCustom>;
|
4
|
+
|
11
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): [
|
12
6
|
game: Game<GameCustom, PlayerCustom> | undefined,
|
13
7
|
localPlayerId: string | undefined,
|
@@ -15,4 +9,4 @@ declare function useRemoteReducer<GameCustom, PlayerCustom, Action>(uri: string,
|
|
15
9
|
declined: boolean
|
16
10
|
];
|
17
11
|
|
18
|
-
export {
|
12
|
+
export { useRemoteReducer };
|
package/dist/index.js
CHANGED
@@ -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/
|
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,7 +5561,96 @@ function isHost(playerId, game) {
|
|
5557
5561
|
let player = getPlayer(playerId, game);
|
5558
5562
|
return player == null ? void 0 : player.host;
|
5559
5563
|
}
|
5560
|
-
|
5564
|
+
|
5565
|
+
// src/hooks.ts
|
5566
|
+
function useClientInitialization(meta, setMeta, uri) {
|
5567
|
+
(0, import_react.useEffect)(() => {
|
5568
|
+
if (!meta.client) {
|
5569
|
+
setMeta(__spreadProps(__spreadValues({}, meta), {
|
5570
|
+
client: socket_default.connect(uri, { transports: ["websocket"] })
|
5571
|
+
}));
|
5572
|
+
}
|
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
|
5593
|
+
};
|
5594
|
+
(_b = meta.client) == null ? void 0 : _b.emit("rejoin", rejoin);
|
5595
|
+
} else {
|
5596
|
+
(_c = meta.client) == null ? void 0 : _c.emit("join", { gameId });
|
5597
|
+
}
|
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) {
|
5626
|
+
if (isHost(meta.localPlayerId, game) && !meta.isHostReady) {
|
5627
|
+
meta.client.on("join", (join) => {
|
5628
|
+
if (!!meta.client) {
|
5629
|
+
internalDispatch({
|
5630
|
+
type: 2 /* Accept */,
|
5631
|
+
playerId: join.playerId,
|
5632
|
+
client: meta.client
|
5633
|
+
});
|
5634
|
+
}
|
5635
|
+
});
|
5636
|
+
meta.client.on("notify", (notify) => {
|
5637
|
+
if (!!game && !!meta.client) {
|
5638
|
+
internalDispatch({
|
5639
|
+
type: 0 /* Reduce */,
|
5640
|
+
client: meta.client,
|
5641
|
+
playerId: notify.playerId,
|
5642
|
+
action: notify.action
|
5643
|
+
});
|
5644
|
+
}
|
5645
|
+
});
|
5646
|
+
setMeta(__spreadProps(__spreadValues({}, meta), { isHostReady: true }));
|
5647
|
+
}
|
5648
|
+
}
|
5649
|
+
});
|
5650
|
+
}
|
5651
|
+
|
5652
|
+
// src/reducer.ts
|
5653
|
+
function createInternalReducer(reducer, acceptPlayer) {
|
5561
5654
|
return (game, internalAction) => {
|
5562
5655
|
var _a;
|
5563
5656
|
switch (internalAction.type) {
|
@@ -5584,16 +5677,18 @@ function wrapReducer(reducer, acceptPlayer) {
|
|
5584
5677
|
}
|
5585
5678
|
};
|
5586
5679
|
}
|
5587
|
-
|
5680
|
+
|
5681
|
+
// src/index.ts
|
5682
|
+
function useRemoteReducer(uri, reducer, gameId, acceptPlayer = (0, import_lodash2.constant)(
|
5588
5683
|
true
|
5589
5684
|
), storage = sessionStorage) {
|
5590
|
-
let [meta, setMeta] = (0,
|
5685
|
+
let [meta, setMeta] = (0, import_react2.useState)({
|
5591
5686
|
isHostReady: false,
|
5592
5687
|
isGuestReady: false,
|
5593
5688
|
declined: false
|
5594
5689
|
});
|
5595
|
-
let [game, internalDispatch] = (0,
|
5596
|
-
|
5690
|
+
let [game, internalDispatch] = (0, import_react2.useReducer)(
|
5691
|
+
createInternalReducer(reducer, acceptPlayer),
|
5597
5692
|
void 0
|
5598
5693
|
);
|
5599
5694
|
let dispatch = (action) => {
|
@@ -5601,87 +5696,22 @@ function useRemoteReducer(uri, reducer, gameId, acceptPlayer = (0, import_lodash
|
|
5601
5696
|
meta.client.emit("notify", { gameId: game.id, action });
|
5602
5697
|
}
|
5603
5698
|
};
|
5604
|
-
(
|
5605
|
-
|
5606
|
-
|
5607
|
-
|
5608
|
-
|
5609
|
-
|
5610
|
-
|
5611
|
-
|
5612
|
-
|
5613
|
-
|
5614
|
-
|
5615
|
-
|
5616
|
-
(_a = meta.client) == null ? void 0 : _a.emit("create");
|
5617
|
-
} else if (!!gameId) {
|
5618
|
-
let playerCache = (0, import_lodash.flow)(
|
5619
|
-
() => !!gameId ? storage.getItem(gameId) : null,
|
5620
|
-
(cache) => !!cache ? JSON.parse(cache) : null
|
5621
|
-
)();
|
5622
|
-
if (!!playerCache) {
|
5623
|
-
let rejoin = {
|
5624
|
-
playerId: playerCache.playerId,
|
5625
|
-
socketId: playerCache.socketId,
|
5626
|
-
gameId
|
5627
|
-
};
|
5628
|
-
(_b = meta.client) == null ? void 0 : _b.emit("rejoin", rejoin);
|
5629
|
-
} else {
|
5630
|
-
(_c = meta.client) == null ? void 0 : _c.emit("join", { gameId });
|
5631
|
-
}
|
5632
|
-
}
|
5633
|
-
});
|
5634
|
-
meta.client.on("assign", (assign) => {
|
5635
|
-
var _a, _b;
|
5636
|
-
setMeta(__spreadProps(__spreadValues({}, meta), { localPlayerId: assign.playerId }));
|
5637
|
-
if (!!((_a = meta == null ? void 0 : meta.client) == null ? void 0 : _a.id)) {
|
5638
|
-
let playerCache = {
|
5639
|
-
playerId: assign.playerId,
|
5640
|
-
socketId: (_b = meta.client) == null ? void 0 : _b.id
|
5641
|
-
};
|
5642
|
-
storage.setItem(assign.gameId, JSON.stringify(playerCache));
|
5643
|
-
}
|
5644
|
-
});
|
5645
|
-
meta.client.on(
|
5646
|
-
"update",
|
5647
|
-
(update) => internalDispatch({
|
5648
|
-
type: 1 /* Update */,
|
5649
|
-
game: update.game
|
5650
|
-
})
|
5651
|
-
);
|
5652
|
-
meta.client.on("decline", () => setMeta(__spreadProps(__spreadValues({}, meta), { declined: true })));
|
5653
|
-
setMeta(__spreadProps(__spreadValues({}, meta), { isGuestReady: true }));
|
5654
|
-
}
|
5655
|
-
if (isHost(meta.localPlayerId, game) && !meta.isHostReady) {
|
5656
|
-
meta.client.on("join", (join) => {
|
5657
|
-
if (!!meta.client) {
|
5658
|
-
internalDispatch({
|
5659
|
-
type: 2 /* Accept */,
|
5660
|
-
playerId: join.playerId,
|
5661
|
-
client: meta.client
|
5662
|
-
});
|
5663
|
-
}
|
5664
|
-
});
|
5665
|
-
meta.client.on("notify", (notify) => {
|
5666
|
-
if (!!game && !!meta.client) {
|
5667
|
-
internalDispatch({
|
5668
|
-
type: 0 /* Reduce */,
|
5669
|
-
client: meta.client,
|
5670
|
-
playerId: notify.playerId,
|
5671
|
-
action: notify.action
|
5672
|
-
});
|
5673
|
-
}
|
5674
|
-
});
|
5675
|
-
setMeta(__spreadProps(__spreadValues({}, meta), { isHostReady: true }));
|
5676
|
-
}
|
5677
|
-
}
|
5678
|
-
});
|
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
|
+
}
|
5679
5711
|
return [game, meta.localPlayerId, dispatch, meta.declined];
|
5680
5712
|
}
|
5681
5713
|
// Annotate the CommonJS export names for ESM import in node:
|
5682
5714
|
0 && (module.exports = {
|
5683
|
-
getPlayer,
|
5684
|
-
isHost,
|
5685
5715
|
useRemoteReducer
|
5686
5716
|
});
|
5687
5717
|
/*! Bundled license information:
|