@couch-kit/core 0.10.2 → 0.10.3
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/CHANGELOG.md +6 -0
- package/dist/index.cjs +7 -2
- package/dist/index.js +7 -2
- package/lib/reducer.d.ts.map +1 -1
- package/lib/types.d.ts +3 -1
- package/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/reducer.ts +10 -2
- package/src/types.ts +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @couch-kit/core
|
|
2
2
|
|
|
3
|
+
## 0.10.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#227](https://github.com/faluciano/react-native-couch-kit/pull/227) [`8ef31ad`](https://github.com/faluciano/react-native-couch-kit/commit/8ef31adc53dc7342f1d81f8ba2e4acb6c8c1433e) Thanks [@faluciano](https://github.com/faluciano)! - A player who rejoins under a new name or avatar is renamed. `__PLAYER_RECONNECTED__` now carries the rejoining JOIN's `name` and `avatar`, and the reducer applies them. Before, a reconnect kept the old name, so "change name" in a controller did nothing. Recordings without them replay as before.
|
|
8
|
+
|
|
3
9
|
## 0.10.2
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -195,7 +195,7 @@ function createGameReducer(reducer, options) {
|
|
|
195
195
|
};
|
|
196
196
|
}
|
|
197
197
|
case InternalActionTypes.PLAYER_RECONNECTED: {
|
|
198
|
-
const { playerId } = action.payload;
|
|
198
|
+
const { playerId, name, avatar } = action.payload;
|
|
199
199
|
const player = state.players[playerId];
|
|
200
200
|
if (!player)
|
|
201
201
|
return state;
|
|
@@ -203,7 +203,12 @@ function createGameReducer(reducer, options) {
|
|
|
203
203
|
...state,
|
|
204
204
|
players: {
|
|
205
205
|
...state.players,
|
|
206
|
-
[playerId]: {
|
|
206
|
+
[playerId]: {
|
|
207
|
+
...player,
|
|
208
|
+
connected: true,
|
|
209
|
+
...name !== undefined ? { name } : {},
|
|
210
|
+
...avatar !== undefined ? { avatar } : {}
|
|
211
|
+
}
|
|
207
212
|
}
|
|
208
213
|
};
|
|
209
214
|
}
|
package/dist/index.js
CHANGED
|
@@ -124,7 +124,7 @@ function createGameReducer(reducer, options) {
|
|
|
124
124
|
};
|
|
125
125
|
}
|
|
126
126
|
case InternalActionTypes.PLAYER_RECONNECTED: {
|
|
127
|
-
const { playerId } = action.payload;
|
|
127
|
+
const { playerId, name, avatar } = action.payload;
|
|
128
128
|
const player = state.players[playerId];
|
|
129
129
|
if (!player)
|
|
130
130
|
return state;
|
|
@@ -132,7 +132,12 @@ function createGameReducer(reducer, options) {
|
|
|
132
132
|
...state,
|
|
133
133
|
players: {
|
|
134
134
|
...state.players,
|
|
135
|
-
[playerId]: {
|
|
135
|
+
[playerId]: {
|
|
136
|
+
...player,
|
|
137
|
+
connected: true,
|
|
138
|
+
...name !== undefined ? { name } : {},
|
|
139
|
+
...avatar !== undefined ? { avatar } : {}
|
|
140
|
+
}
|
|
136
141
|
}
|
|
137
142
|
};
|
|
138
143
|
}
|
package/lib/reducer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,uCAAuC;AACvC,MAAM,WAAW,wBAAwB,CACvC,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,OAAO;IAEjB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,EACvE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GACvC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,uCAAuC;AACvC,MAAM,WAAW,wBAAwB,CACvC,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,OAAO;IAEjB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,EACvE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GACvC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAwFvC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export interface IAction {
|
|
|
40
40
|
* - `__HYDRATE__` -- Replaces state wholesale (server-to-client sync).
|
|
41
41
|
* - `__PLAYER_JOINED__` -- Adds a player to `state.players`.
|
|
42
42
|
* - `__PLAYER_LEFT__` -- Marks a player as disconnected (`connected: false`).
|
|
43
|
-
* - `__PLAYER_RECONNECTED__` -- Restores a returning player (`connected: true`), preserving existing data.
|
|
43
|
+
* - `__PLAYER_RECONNECTED__` -- Restores a returning player (`connected: true`), preserving existing data. A `name` or `avatar` in the payload replaces the stored one, so a player who rejoins under a new name is renamed.
|
|
44
44
|
* - `__PLAYER_REMOVED__` -- Permanently removes a timed-out disconnected player from `state.players`.
|
|
45
45
|
*/
|
|
46
46
|
export type InternalAction<S extends IGameState = IGameState> = {
|
|
@@ -62,6 +62,8 @@ export type InternalAction<S extends IGameState = IGameState> = {
|
|
|
62
62
|
type: "__PLAYER_RECONNECTED__";
|
|
63
63
|
payload: {
|
|
64
64
|
playerId: string;
|
|
65
|
+
name?: string;
|
|
66
|
+
avatar?: string;
|
|
65
67
|
};
|
|
66
68
|
} | {
|
|
67
69
|
type: "__PLAYER_REMOVED__";
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IACxD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1D;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IACxD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1D;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,GACD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAElE,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB;aAC9B,OAAO,EAAE,aAAa;aACtB,aAAa,EAAE,mBAAmB;aAClC,WAAW,EAAE,iBAAiB;aAC9B,kBAAkB,EAAE,wBAAwB;aAC5C,cAAc,EAAE,oBAAoB;CAC5B,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,IAAI,CACjE,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,KACN,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/reducer.ts
CHANGED
|
@@ -87,16 +87,24 @@ export function createGameReducer<S extends IGameState, A extends IAction>(
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
case InternalActionTypes.PLAYER_RECONNECTED: {
|
|
90
|
-
const { playerId } = (
|
|
90
|
+
const { playerId, name, avatar } = (
|
|
91
91
|
action as InternalAction<S> & { type: "__PLAYER_RECONNECTED__" }
|
|
92
92
|
).payload;
|
|
93
93
|
const player = state.players[playerId];
|
|
94
94
|
if (!player) return state;
|
|
95
|
+
// Name and avatar come from the rejoining JOIN, so a player who changed
|
|
96
|
+
// their name and rejoined is renamed. Absent (older recordings), the
|
|
97
|
+
// stored values stand.
|
|
95
98
|
return {
|
|
96
99
|
...state,
|
|
97
100
|
players: {
|
|
98
101
|
...state.players,
|
|
99
|
-
[playerId]: {
|
|
102
|
+
[playerId]: {
|
|
103
|
+
...player,
|
|
104
|
+
connected: true,
|
|
105
|
+
...(name !== undefined ? { name } : {}),
|
|
106
|
+
...(avatar !== undefined ? { avatar } : {}),
|
|
107
|
+
},
|
|
100
108
|
},
|
|
101
109
|
};
|
|
102
110
|
}
|
package/src/types.ts
CHANGED
|
@@ -43,7 +43,7 @@ export interface IAction {
|
|
|
43
43
|
* - `__HYDRATE__` -- Replaces state wholesale (server-to-client sync).
|
|
44
44
|
* - `__PLAYER_JOINED__` -- Adds a player to `state.players`.
|
|
45
45
|
* - `__PLAYER_LEFT__` -- Marks a player as disconnected (`connected: false`).
|
|
46
|
-
* - `__PLAYER_RECONNECTED__` -- Restores a returning player (`connected: true`), preserving existing data.
|
|
46
|
+
* - `__PLAYER_RECONNECTED__` -- Restores a returning player (`connected: true`), preserving existing data. A `name` or `avatar` in the payload replaces the stored one, so a player who rejoins under a new name is renamed.
|
|
47
47
|
* - `__PLAYER_REMOVED__` -- Permanently removes a timed-out disconnected player from `state.players`.
|
|
48
48
|
*/
|
|
49
49
|
export type InternalAction<S extends IGameState = IGameState> =
|
|
@@ -53,7 +53,10 @@ export type InternalAction<S extends IGameState = IGameState> =
|
|
|
53
53
|
payload: { id: string; name: string; avatar?: string };
|
|
54
54
|
}
|
|
55
55
|
| { type: "__PLAYER_LEFT__"; payload: { playerId: string } }
|
|
56
|
-
| {
|
|
56
|
+
| {
|
|
57
|
+
type: "__PLAYER_RECONNECTED__";
|
|
58
|
+
payload: { playerId: string; name?: string; avatar?: string };
|
|
59
|
+
}
|
|
57
60
|
| { type: "__PLAYER_REMOVED__"; payload: { playerId: string } };
|
|
58
61
|
|
|
59
62
|
/** Well-known internal action type strings. */
|