trucoshi 0.0.17 → 0.0.19

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,3 +1,3 @@
1
1
  import { IPlayer } from "../types";
2
- export type IPublicPlayer = Pick<IPlayer, "id" | "disabled" | "ready" | "hand" | "usedHand" | "teamIdx" | "session">;
2
+ export type IPublicPlayer = Pick<IPlayer, "id" | "disabled" | "ready" | "hand" | "usedHand" | "prevHand" | "teamIdx" | "session">;
3
3
  export declare function Player(id: string, teamIdx: number): IPlayer;
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.Player = void 0;
4
13
  function Player(id, teamIdx) {
@@ -9,6 +18,7 @@ function Player(id, teamIdx) {
9
18
  hand: [],
10
19
  commands: [],
11
20
  usedHand: [],
21
+ prevHand: [],
12
22
  disabled: false,
13
23
  ready: false,
14
24
  setSession: function (session) {
@@ -24,6 +34,7 @@ function Player(id, teamIdx) {
24
34
  player.ready = ready;
25
35
  },
26
36
  setHand: function (hand) {
37
+ player.prevHand = __spreadArray([], player.usedHand, true);
27
38
  player.hand = hand;
28
39
  player.usedHand = [];
29
40
  return hand;
@@ -17,7 +17,7 @@ function Team(players) {
17
17
  },
18
18
  disable: function (player) {
19
19
  var _a;
20
- (_a = team._players.get(player.id)) === null || _a === void 0 ? void 0 : _a.disable();
20
+ (_a = team._players.get(player.session)) === null || _a === void 0 ? void 0 : _a.disable();
21
21
  return team.isTeamDisabled();
22
22
  },
23
23
  addPoints: function (matchPoint, points) {
@@ -36,7 +36,7 @@ function Team(players) {
36
36
  return team.points;
37
37
  },
38
38
  };
39
- players.forEach(function (player) { return team._players.set(player.id, player); });
39
+ players.forEach(function (player) { return team._players.set(player.session, player); });
40
40
  return team;
41
41
  }
42
42
  exports.Team = Team;
@@ -41,9 +41,10 @@ export declare const CARDS: {
41
41
  "4b": number;
42
42
  "4c": number;
43
43
  };
44
- export declare const COLORS: string[];
45
44
  export declare const TEAM_SIZE_VALUES: number[];
46
45
  export declare enum GAME_ERROR {
46
+ MATCH_ALREADY_STARTED = "MATCH_ALREADY_STARTED",
47
+ LOBBY_IS_FULL = "LOBBY_IS_FULL",
47
48
  UNEXPECTED_TEAM_SIZE = "UNEXPECTED_TEAM_SIZE",
48
49
  TEAM_NOT_READY = "TEAM_NOT_READY",
49
50
  TEAM_IS_FULL = "TEAM_IS_FULL"
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.EnvidoCalculator = exports.GAME_ERROR = exports.TEAM_SIZE_VALUES = exports.COLORS = exports.CARDS = void 0;
4
+ exports.EnvidoCalculator = exports.GAME_ERROR = exports.TEAM_SIZE_VALUES = exports.CARDS = void 0;
5
5
  var types_1 = require("./types");
6
6
  var utils_1 = require("./utils");
7
7
  exports.CARDS = {
@@ -46,19 +46,11 @@ exports.CARDS = {
46
46
  "4b": 0,
47
47
  "4c": 0,
48
48
  };
49
- exports.COLORS = [
50
- "#9b111",
51
- "#17c6c6",
52
- "#8c1d1d",
53
- "#9f9b9b",
54
- "#a5a5a5",
55
- "#f5a623",
56
- "#f44336",
57
- "#c2185b",
58
- ];
59
49
  exports.TEAM_SIZE_VALUES = [1, 2, 3];
60
50
  var GAME_ERROR;
61
51
  (function (GAME_ERROR) {
52
+ GAME_ERROR["MATCH_ALREADY_STARTED"] = "MATCH_ALREADY_STARTED";
53
+ GAME_ERROR["LOBBY_IS_FULL"] = "LOBBY_IS_FULL";
62
54
  GAME_ERROR["UNEXPECTED_TEAM_SIZE"] = "UNEXPECTED_TEAM_SIZE";
63
55
  GAME_ERROR["TEAM_NOT_READY"] = "TEAM_NOT_READY";
64
56
  GAME_ERROR["TEAM_IS_FULL"] = "TEAM_IS_FULL";
@@ -8,6 +8,7 @@ export interface IGameLoop {
8
8
  _onWinner: IWinnerCallback;
9
9
  teams: Array<ITeam>;
10
10
  hands: Array<IHand>;
11
+ winner: ITeam | null;
11
12
  onTurn: (callback: ITurnCallback) => IGameLoop;
12
13
  onWinner: (callback: IWinnerCallback) => IGameLoop;
13
14
  onTruco: (callback: ITrucoCallback) => IGameLoop;
package/dist/lib/index.js CHANGED
@@ -49,6 +49,7 @@ var GameLoop = function (match) {
49
49
  _onTurn: function () { return Promise.resolve(); },
50
50
  _onWinner: function () { return Promise.resolve(); },
51
51
  teams: [],
52
+ winner: null,
52
53
  hands: [],
53
54
  onTruco: function (callback) {
54
55
  gameloop._onTruco = callback;
@@ -89,7 +90,9 @@ var GameLoop = function (match) {
89
90
  _a.sent();
90
91
  return [3 /*break*/, 1];
91
92
  case 5: return [3 /*break*/, 1];
92
- case 6: return [4 /*yield*/, gameloop._onWinner(match.winner, match.teams)];
93
+ case 6:
94
+ gameloop.winner = match.winner;
95
+ return [4 /*yield*/, gameloop._onWinner(match.winner, match.teams)];
93
96
  case 7:
94
97
  _a.sent();
95
98
  return [2 /*return*/];
@@ -103,66 +106,104 @@ var GameLoop = function (match) {
103
106
  function Lobby(teamSize) {
104
107
  var lobby = {
105
108
  lastTeamIdx: 1,
106
- _players: new Map(),
109
+ _players: [],
107
110
  get players() {
108
- return Array.from(lobby._players.values());
111
+ return lobby._players.filter(function (player) { return Boolean(player && player.id); });
109
112
  },
110
113
  teams: [],
111
114
  table: null,
112
115
  maxPlayers: teamSize ? teamSize * 2 : 6,
113
116
  full: false,
114
117
  ready: false,
118
+ started: false,
115
119
  gameLoop: undefined,
116
120
  calculateReady: function () {
117
- lobby.ready = lobby.players.reduce(function (prev, curr) { return prev && curr.ready; }, true);
121
+ var allPlayersReady = lobby.players.reduce(function (prev, curr) { return Boolean(prev && curr && curr.ready); }, true);
122
+ var teamsSameSize = lobby.players.filter(function (player) { return player.teamIdx === 0; }).length ===
123
+ lobby.players.filter(function (player) { return player.teamIdx === 1; }).length;
124
+ var allTeamsComplete = lobby.players.length % 2 === 0;
125
+ lobby.ready = allPlayersReady && allTeamsComplete && teamsSameSize;
118
126
  return lobby.ready;
119
127
  },
120
128
  calculateFull: function () {
121
- lobby.full = lobby._players.size >= lobby.maxPlayers;
129
+ lobby.full = lobby.players.length >= lobby.maxPlayers;
122
130
  return lobby.full;
123
131
  },
124
132
  addPlayer: function (id, session, teamIdx) {
133
+ var exists = lobby.players.find(function (player) { return player.session === session; });
134
+ if (exists) {
135
+ if (exists.teamIdx === teamIdx) {
136
+ return exists;
137
+ }
138
+ console.log({ session: session, ex: exists.session });
139
+ lobby.removePlayer(exists.session);
140
+ }
141
+ if (lobby.started) {
142
+ throw new Error(constants_1.GAME_ERROR.MATCH_ALREADY_STARTED);
143
+ }
144
+ if (lobby.full) {
145
+ throw new Error(constants_1.GAME_ERROR.LOBBY_IS_FULL);
146
+ }
125
147
  var maxSize = teamSize ? teamSize : 3;
126
- if (lobby.full || lobby.players.filter(function (p) { return p.teamIdx === teamIdx; }).length > maxSize) {
148
+ if (lobby.full ||
149
+ lobby.players.filter(function (player) { return player.teamIdx === teamIdx; }).length > maxSize) {
127
150
  throw new Error(constants_1.GAME_ERROR.TEAM_IS_FULL);
128
151
  }
129
152
  var player = (0, Player_1.Player)(id, teamIdx !== undefined ? teamIdx : Number(!lobby.lastTeamIdx));
130
153
  player.setSession(session);
131
154
  lobby.lastTeamIdx = Number(!lobby.lastTeamIdx);
132
- lobby._players.set(id, player);
155
+ for (var i = 0; i < lobby._players.length; i++) {
156
+ if (!lobby._players[i].id) {
157
+ if (player.teamIdx === 0 && i % 2 === 0) {
158
+ lobby._players[i] = player;
159
+ break;
160
+ }
161
+ if (player.teamIdx === 1 && i % 2 !== 0) {
162
+ lobby._players[i] = player;
163
+ break;
164
+ }
165
+ }
166
+ }
133
167
  lobby.calculateFull();
134
168
  lobby.calculateReady();
135
169
  return player;
136
170
  },
137
- removePlayer: function (id) {
138
- lobby._players.delete(id);
139
- lobby.calculateFull();
140
- lobby.calculateReady();
171
+ removePlayer: function (session) {
172
+ var idx = lobby._players.findIndex(function (player) { return player && player.session === session; });
173
+ if (idx !== -1) {
174
+ lobby._players[idx] = {};
175
+ lobby.calculateFull();
176
+ lobby.calculateReady();
177
+ }
141
178
  return lobby;
142
179
  },
143
180
  startMatch: function (matchPoint) {
144
181
  if (matchPoint === void 0) { matchPoint = 9; }
145
182
  lobby.calculateReady();
146
- var teamSize = lobby._players.size / 2;
147
- if (!constants_1.TEAM_SIZE_VALUES.includes(teamSize)) {
183
+ var actualTeamSize = lobby.players.length / 2;
184
+ if (!constants_1.TEAM_SIZE_VALUES.includes(actualTeamSize)) {
148
185
  throw new Error(constants_1.GAME_ERROR.UNEXPECTED_TEAM_SIZE);
149
186
  }
150
187
  if (!lobby.ready) {
151
188
  throw new Error(constants_1.GAME_ERROR.TEAM_NOT_READY);
152
189
  }
153
190
  lobby.teams = [
154
- (0, Team_1.Team)(lobby.players.filter(function (p) { return p.teamIdx === 0; })),
155
- (0, Team_1.Team)(lobby.players.filter(function (p) { return p.teamIdx === 1; })),
191
+ (0, Team_1.Team)(lobby.players.filter(function (player) { return player.teamIdx === 0; })),
192
+ (0, Team_1.Team)(lobby.players.filter(function (player) { return player.teamIdx === 1; })),
156
193
  ];
157
- if (lobby.teams[0].players.length !== teamSize ||
158
- lobby.teams[1].players.length !== teamSize) {
194
+ if (lobby.teams[0].players.length !== actualTeamSize ||
195
+ lobby.teams[1].players.length !== actualTeamSize) {
159
196
  throw new Error(constants_1.GAME_ERROR.UNEXPECTED_TEAM_SIZE);
160
197
  }
161
198
  lobby.table = (0, Table_1.Table)(lobby.players, lobby.teams);
162
199
  lobby.gameLoop = GameLoop((0, Match_1.Match)(lobby.table, lobby.teams, matchPoint));
200
+ lobby.started = true;
163
201
  return lobby.gameLoop;
164
202
  },
165
203
  };
204
+ for (var i = 0; i < lobby.maxPlayers; i++) {
205
+ lobby._players.push({});
206
+ }
166
207
  return lobby;
167
208
  }
168
209
  exports.Lobby = Lobby;
@@ -20,6 +20,7 @@ export interface IPlayer {
20
20
  hand: Array<ICard>;
21
21
  commands: Array<ECommand>;
22
22
  usedHand: Array<ICard>;
23
+ prevHand: Array<ICard>;
23
24
  disabled: boolean;
24
25
  ready: boolean;
25
26
  setSession(session: string): void;
@@ -151,20 +152,24 @@ export interface IHand {
151
152
  export interface IPrivateLobby {
152
153
  gameLoop?: IGameLoop;
153
154
  lastTeamIdx: 0 | 1;
154
- _players: Map<string, IPlayer>;
155
+ _players: Array<IPlayer | {
156
+ id?: undefined;
157
+ session?: undefined;
158
+ }>;
155
159
  get players(): Array<IPlayer>;
156
160
  teams: Array<ITeam>;
157
161
  maxPlayers: number;
158
162
  table: ITable | null;
159
- ready: boolean;
160
163
  full: boolean;
164
+ ready: boolean;
165
+ started: boolean;
161
166
  addPlayer(id: string, session: string, teamIdx?: 0 | 1): IPlayer;
162
167
  removePlayer(id: string): ILobby;
163
168
  calculateReady(): boolean;
164
169
  calculateFull(): boolean;
165
170
  startMatch(matchPoint?: 9 | 12 | 15): IGameLoop;
166
171
  }
167
- export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "teams" | "players" | "gameLoop" | "table"> {
172
+ export interface ILobby extends Pick<IPrivateLobby, "addPlayer" | "removePlayer" | "startMatch" | "ready" | "full" | "started" | "teams" | "players" | "gameLoop" | "table" | "calculateReady"> {
168
173
  }
169
174
  export interface ITable {
170
175
  forehandIdx: number;
@@ -1,26 +1,29 @@
1
1
  import { IPublicPlayer } from "../../lib/classes/Player";
2
2
  import { IPublicTeam } from "../../lib/classes/Team";
3
- import { ILobby, IPlayedCard } from "../../lib/types";
3
+ import { ILobby, IPlayedCard, ITeam } from "../../lib/types";
4
4
  export interface IPublicMatch {
5
+ winner: ITeam | null;
5
6
  matchSessionId: string;
6
7
  teams: Array<IPublicTeam>;
7
8
  players: Array<IPublicPlayer>;
9
+ me: IPublicPlayer;
8
10
  rounds: IPlayedCard[][];
11
+ prevRounds: IPlayedCard[][] | null;
9
12
  state: EMatchTableState;
10
13
  }
11
14
  export interface IMatchTable {
12
15
  matchSessionId: string;
13
16
  currentPlayer: IPublicPlayer | null;
14
17
  lobby: ILobby;
15
- state: EMatchTableState;
16
- setState(state: EMatchTableState): void;
18
+ state(): EMatchTableState;
17
19
  setCurrentPlayer(player: IPublicPlayer): void;
18
20
  isSessionPlaying(session: string): IPublicPlayer | null;
19
21
  getPublicMatch(session?: string): IPublicMatch;
20
22
  }
21
23
  export declare enum EMatchTableState {
22
24
  UNREADY = 0,
23
- STARTED = 1,
24
- FINISHED = 2
25
+ READY = 1,
26
+ STARTED = 2,
27
+ FINISHED = 3
25
28
  }
26
29
  export declare function MatchTable(matchSessionId: string, teamSize?: 1 | 2 | 3): IMatchTable;
@@ -16,41 +16,66 @@ var lib_1 = require("../../lib");
16
16
  var EMatchTableState;
17
17
  (function (EMatchTableState) {
18
18
  EMatchTableState[EMatchTableState["UNREADY"] = 0] = "UNREADY";
19
- EMatchTableState[EMatchTableState["STARTED"] = 1] = "STARTED";
20
- EMatchTableState[EMatchTableState["FINISHED"] = 2] = "FINISHED";
19
+ EMatchTableState[EMatchTableState["READY"] = 1] = "READY";
20
+ EMatchTableState[EMatchTableState["STARTED"] = 2] = "STARTED";
21
+ EMatchTableState[EMatchTableState["FINISHED"] = 3] = "FINISHED";
21
22
  })(EMatchTableState = exports.EMatchTableState || (exports.EMatchTableState = {}));
22
23
  function MatchTable(matchSessionId, teamSize) {
23
24
  var matchTable = {
24
25
  matchSessionId: matchSessionId,
25
26
  currentPlayer: null,
26
27
  lobby: (0, lib_1.Lobby)(teamSize),
27
- state: EMatchTableState.UNREADY,
28
- setState: function (state) {
29
- matchTable.state = state;
28
+ state: function () {
29
+ var _a;
30
+ matchTable.lobby.calculateReady();
31
+ if ((_a = matchTable.lobby.gameLoop) === null || _a === void 0 ? void 0 : _a.winner) {
32
+ return EMatchTableState.FINISHED;
33
+ }
34
+ if (matchTable.lobby.started) {
35
+ return EMatchTableState.STARTED;
36
+ }
37
+ if (matchTable.lobby.ready) {
38
+ return EMatchTableState.READY;
39
+ }
40
+ return EMatchTableState.UNREADY;
30
41
  },
31
42
  setCurrentPlayer: function (player) {
32
43
  matchTable.currentPlayer = player;
33
44
  },
34
45
  isSessionPlaying: function (session) {
35
46
  var lobby = matchTable.lobby;
36
- var search = lobby.players.find(function (player) { return player.session === session; });
47
+ var search = lobby.players.find(function (player) { return player && player.session === session; });
37
48
  return search || null;
38
49
  },
39
50
  getPublicMatch: function (userSession) {
40
- var _a, _b, _c;
51
+ var _a, _b, _c, _d, _e, _f;
41
52
  var lobby = matchTable.lobby;
42
- var lastHand = (((_a = lobby.gameLoop) === null || _a === void 0 ? void 0 : _a.hands.length) || 1) - 1;
43
- var rounds = (_c = (_b = lobby.gameLoop) === null || _b === void 0 ? void 0 : _b.hands[lastHand]) === null || _c === void 0 ? void 0 : _c.rounds.map(function (round) { return round.cards; });
53
+ var winner = ((_a = lobby.gameLoop) === null || _a === void 0 ? void 0 : _a.winner) || null;
54
+ var lastHandIdx = (((_b = lobby.gameLoop) === null || _b === void 0 ? void 0 : _b.hands.length) || 1) - 1;
55
+ var rounds = ((_d = (_c = lobby.gameLoop) === null || _c === void 0 ? void 0 : _c.hands[lastHandIdx]) === null || _d === void 0 ? void 0 : _d.rounds.map(function (round) { return round.cards; })) || [];
56
+ var prevHandIdx = lastHandIdx - 1;
57
+ var prevRounds = prevHandIdx !== -1 && rounds[0].length === 0
58
+ ? (_f = (_e = lobby.gameLoop) === null || _e === void 0 ? void 0 : _e.hands[prevHandIdx]) === null || _f === void 0 ? void 0 : _f.rounds.map(function (round) { return round.cards; })
59
+ : null;
60
+ var players = lobby.players.filter(function (player) { return Boolean(player); });
61
+ var currentPlayerIdx = players.findIndex(function (player) { return player && player.session === userSession; });
62
+ var me = players[currentPlayerIdx];
63
+ var cut = players.slice(currentPlayerIdx, players.length);
64
+ var end = players.slice(0, currentPlayerIdx);
65
+ var publicPlayers = cut.concat(end).map(function (player) {
66
+ return (player === null || player === void 0 ? void 0 : player.session) === userSession
67
+ ? player
68
+ : __assign(__assign({}, player), { session: undefined, hand: player === null || player === void 0 ? void 0 : player.hand.map(function () { return "xx"; }) });
69
+ });
44
70
  return {
71
+ me: me,
72
+ winner: winner,
45
73
  matchSessionId: matchTable.matchSessionId,
46
- state: matchTable.state,
74
+ state: matchTable.state(),
47
75
  teams: [],
48
- players: lobby.players.map(function (player) {
49
- return player.session === userSession
50
- ? player
51
- : __assign(__assign({}, player), { hand: player.hand.map(function () { return "xx"; }) });
52
- }),
76
+ players: publicPlayers,
53
77
  rounds: rounds || [[]],
78
+ prevRounds: prevRounds || null,
54
79
  };
55
80
  },
56
81
  };
@@ -53,11 +53,12 @@ var socket_io_1 = require("socket.io");
53
53
  var MatchTable_1 = require("./classes/MatchTable");
54
54
  var User_1 = require("./classes/User");
55
55
  var types_1 = require("./types");
56
- var PORT = 4001;
56
+ var PORT = process.env.NODE_PORT || 4001;
57
+ var ORIGIN = process.env.NODE_ORIGIN || "http://localhost:3000";
57
58
  var httpServer = (0, http_1.createServer)();
58
59
  var io = new socket_io_1.Server(httpServer, {
59
60
  cors: {
60
- origin: "http://localhost:3000",
61
+ origin: ORIGIN,
61
62
  methods: ["GET", "POST"],
62
63
  },
63
64
  });
@@ -143,7 +144,7 @@ io.on("connection", function (_socket) {
143
144
  });
144
145
  }
145
146
  var table = (0, MatchTable_1.MatchTable)(socket.session);
146
- table.lobby.addPlayer(user.id, socket.session);
147
+ table.lobby.addPlayer(user.id, socket.session, 0);
147
148
  socket.join(socket.session);
148
149
  addSocketToUser(socket.session, socket.id, table);
149
150
  tables.set(socket.session, table);
@@ -202,7 +203,6 @@ io.on("connection", function (_socket) {
202
203
  try {
203
204
  table_1 = getTable(tableId);
204
205
  if (table_1 && !table_1.lobby.gameLoop) {
205
- table_1.setState(MatchTable_1.EMatchTableState.STARTED);
206
206
  table_1.lobby
207
207
  .startMatch()
208
208
  .onTurn(function (play) {
@@ -277,15 +277,21 @@ io.on("connection", function (_socket) {
277
277
  /**
278
278
  * Join Match
279
279
  */
280
- socket.on(types_1.EClientEvent.JOIN_MATCH, function (matchSessionId, callback) {
280
+ socket.on(types_1.EClientEvent.JOIN_MATCH, function (matchSessionId, teamIdx, callback) {
281
281
  if (!socket.session) {
282
282
  return callback({ success: false });
283
283
  }
284
284
  var user = getUser(socket.session);
285
285
  var table = tables.get(matchSessionId);
286
- if (table && table.state === MatchTable_1.EMatchTableState.UNREADY) {
286
+ if (table) {
287
+ try {
288
+ table.lobby.addPlayer(user.id || "satoshi", socket.session, teamIdx);
289
+ }
290
+ catch (e) {
291
+ console.error(e);
292
+ return callback({ success: false });
293
+ }
287
294
  socket.join(matchSessionId);
288
- table.lobby.addPlayer(user.id || "satoshi", socket.session);
289
295
  addSocketToUser(socket.session, socket.id, table);
290
296
  emitMatchUpdate(table);
291
297
  return callback({ success: true, match: table.getPublicMatch(socket.session) });
@@ -348,7 +354,7 @@ io.on("connection", function (_socket) {
348
354
  socket.on(types_1.EClientEvent.SET_PLAYER_READY, function (matchSessionId, ready) {
349
355
  try {
350
356
  var table = getTable(matchSessionId);
351
- var player = table.lobby.players.find(function (player) { return player.session === socket.session; });
357
+ var player = table.lobby.players.find(function (player) { return player && player.session === socket.session; });
352
358
  if (player) {
353
359
  player.setReady(ready);
354
360
  emitMatchUpdate(table);
package/package.json CHANGED
@@ -1,28 +1,29 @@
1
- {
2
- "name": "trucoshi",
3
- "version": "0.0.17",
4
- "main": "build/lib/trucoshi.js",
5
- "license": "GPL-3.0",
6
- "scripts": {
7
- "prepublishOnly": "yarn build",
8
- "dev": "nodemon",
9
- "test:autoplay": "yarn run ts-node src/test/autoplay",
10
- "test:play": "yarn run ts-node src/test/play",
11
- "test:legacy": "yarn run ts-node src/test/legacy",
12
- "build": "yarn run rimraf ./dist && yarn run tsc --project ."
13
- },
14
- "devDependencies": {
15
- "@types/node": "^18.11.18",
16
- "nodemon": "^2.0.20"
17
- },
18
- "files": [
19
- "dist"
20
- ],
21
- "dependencies": {
22
- "rimraf": "^4.1.1",
23
- "socket.io": "^4.5.4",
24
- "ts-node": "^10.9.1",
25
- "tsc": "^2.0.4",
26
- "typescript": "^4.9.4"
27
- }
28
- }
1
+ {
2
+ "name": "trucoshi",
3
+ "version": "0.0.19",
4
+ "main": "build/lib/trucoshi.js",
5
+ "license": "GPL-3.0",
6
+ "scripts": {
7
+ "start": "node ./dist/server/index.js",
8
+ "prepublishOnly": "yarn build",
9
+ "dev": "nodemon",
10
+ "test:autoplay": "yarn run ts-node src/test/autoplay",
11
+ "test:play": "yarn run ts-node src/test/play",
12
+ "test:legacy": "yarn run ts-node src/test/legacy",
13
+ "build": "yarn run rimraf ./dist && yarn run tsc --project ."
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^18.11.18",
17
+ "nodemon": "^2.0.20"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "dependencies": {
23
+ "rimraf": "^4.1.1",
24
+ "socket.io": "^4.5.4",
25
+ "ts-node": "^10.9.1",
26
+ "tsc": "^2.0.4",
27
+ "typescript": "^4.9.4"
28
+ }
29
+ }