diff --git a/.eslintignore b/.eslintignore index f7d53a1659..02ff75a73d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,4 @@ -tournaments/lib/ +server/tournaments/lib/ logs/ dev-tools/globals.js node_modules/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d6c73fdd78..4cf2bd5cf7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -89,7 +89,7 @@ Some even older code returns `T | false`. This is a very old PHP convention that ### `false | null | undefined` -The simulator (code in `sim/`, `data/`, and `mods/`) will often have functions with return signatures of the form `T | false | null | undefined`, especially in event handlers. These aren't optionals, they're different sentinel values. +The simulator (code in `sim/` and `data/`) will often have functions with return signatures of the form `T | false | null | undefined`, especially in event handlers. These aren't optionals, they're different sentinel values. Specifically: diff --git a/mods/gen1/README.md b/data/mods/gen1/README.md similarity index 100% rename from mods/gen1/README.md rename to data/mods/gen1/README.md diff --git a/mods/gen1/formats-data.js b/data/mods/gen1/formats-data.js similarity index 100% rename from mods/gen1/formats-data.js rename to data/mods/gen1/formats-data.js diff --git a/mods/gen1/moves.js b/data/mods/gen1/moves.js similarity index 100% rename from mods/gen1/moves.js rename to data/mods/gen1/moves.js diff --git a/mods/gen1/pokedex.js b/data/mods/gen1/pokedex.js similarity index 100% rename from mods/gen1/pokedex.js rename to data/mods/gen1/pokedex.js diff --git a/mods/gen1/random-teams.js b/data/mods/gen1/random-teams.js similarity index 100% rename from mods/gen1/random-teams.js rename to data/mods/gen1/random-teams.js diff --git a/mods/gen1/rulesets.js b/data/mods/gen1/rulesets.js similarity index 100% rename from mods/gen1/rulesets.js rename to data/mods/gen1/rulesets.js diff --git a/mods/gen1/scripts.js b/data/mods/gen1/scripts.js similarity index 100% rename from mods/gen1/scripts.js rename to data/mods/gen1/scripts.js diff --git a/mods/gen1/statuses.js b/data/mods/gen1/statuses.js similarity index 100% rename from mods/gen1/statuses.js rename to data/mods/gen1/statuses.js diff --git a/mods/gen1/typechart.js b/data/mods/gen1/typechart.js similarity index 100% rename from mods/gen1/typechart.js rename to data/mods/gen1/typechart.js diff --git a/mods/gen2/README.md b/data/mods/gen2/README.md similarity index 100% rename from mods/gen2/README.md rename to data/mods/gen2/README.md diff --git a/mods/gen2/formats-data.js b/data/mods/gen2/formats-data.js similarity index 100% rename from mods/gen2/formats-data.js rename to data/mods/gen2/formats-data.js diff --git a/mods/gen2/items.js b/data/mods/gen2/items.js similarity index 100% rename from mods/gen2/items.js rename to data/mods/gen2/items.js diff --git a/mods/gen2/learnsets.js b/data/mods/gen2/learnsets.js similarity index 100% rename from mods/gen2/learnsets.js rename to data/mods/gen2/learnsets.js diff --git a/mods/gen2/moves.js b/data/mods/gen2/moves.js similarity index 100% rename from mods/gen2/moves.js rename to data/mods/gen2/moves.js diff --git a/mods/gen2/random-teams.js b/data/mods/gen2/random-teams.js similarity index 100% rename from mods/gen2/random-teams.js rename to data/mods/gen2/random-teams.js diff --git a/mods/gen2/rulesets.js b/data/mods/gen2/rulesets.js similarity index 100% rename from mods/gen2/rulesets.js rename to data/mods/gen2/rulesets.js diff --git a/mods/gen2/scripts.js b/data/mods/gen2/scripts.js similarity index 100% rename from mods/gen2/scripts.js rename to data/mods/gen2/scripts.js diff --git a/mods/gen2/statuses.js b/data/mods/gen2/statuses.js similarity index 100% rename from mods/gen2/statuses.js rename to data/mods/gen2/statuses.js diff --git a/mods/gen2/typechart.js b/data/mods/gen2/typechart.js similarity index 100% rename from mods/gen2/typechart.js rename to data/mods/gen2/typechart.js diff --git a/mods/gen3/abilities.js b/data/mods/gen3/abilities.js similarity index 100% rename from mods/gen3/abilities.js rename to data/mods/gen3/abilities.js diff --git a/mods/gen3/formats-data.js b/data/mods/gen3/formats-data.js similarity index 100% rename from mods/gen3/formats-data.js rename to data/mods/gen3/formats-data.js diff --git a/mods/gen3/items.js b/data/mods/gen3/items.js similarity index 100% rename from mods/gen3/items.js rename to data/mods/gen3/items.js diff --git a/mods/gen3/moves.js b/data/mods/gen3/moves.js similarity index 100% rename from mods/gen3/moves.js rename to data/mods/gen3/moves.js diff --git a/mods/gen3/random-teams.js b/data/mods/gen3/random-teams.js similarity index 99% rename from mods/gen3/random-teams.js rename to data/mods/gen3/random-teams.js index f885a3a220..bcbd056eca 100644 --- a/mods/gen3/random-teams.js +++ b/data/mods/gen3/random-teams.js @@ -17,7 +17,7 @@ class RandomGen3Teams extends RandomGen4Teams { template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../lib/crashlogger')(err, 'The gen 3 randbat set generator'); + require('../../../lib/crashlogger')(err, 'The gen 3 randbat set generator'); } if (template.battleOnly) species = template.baseSpecies; diff --git a/mods/gen3/rulesets.js b/data/mods/gen3/rulesets.js similarity index 100% rename from mods/gen3/rulesets.js rename to data/mods/gen3/rulesets.js diff --git a/mods/gen3/scripts.js b/data/mods/gen3/scripts.js similarity index 100% rename from mods/gen3/scripts.js rename to data/mods/gen3/scripts.js diff --git a/mods/gen3/statuses.js b/data/mods/gen3/statuses.js similarity index 100% rename from mods/gen3/statuses.js rename to data/mods/gen3/statuses.js diff --git a/mods/gen4/abilities.js b/data/mods/gen4/abilities.js similarity index 100% rename from mods/gen4/abilities.js rename to data/mods/gen4/abilities.js diff --git a/mods/gen4/formats-data.js b/data/mods/gen4/formats-data.js similarity index 100% rename from mods/gen4/formats-data.js rename to data/mods/gen4/formats-data.js diff --git a/mods/gen4/items.js b/data/mods/gen4/items.js similarity index 100% rename from mods/gen4/items.js rename to data/mods/gen4/items.js diff --git a/mods/gen4/moves.js b/data/mods/gen4/moves.js similarity index 100% rename from mods/gen4/moves.js rename to data/mods/gen4/moves.js diff --git a/mods/gen4/pokedex.js b/data/mods/gen4/pokedex.js similarity index 100% rename from mods/gen4/pokedex.js rename to data/mods/gen4/pokedex.js diff --git a/mods/gen4/random-teams.js b/data/mods/gen4/random-teams.js similarity index 99% rename from mods/gen4/random-teams.js rename to data/mods/gen4/random-teams.js index 03e6472e84..e15d6abc87 100644 --- a/mods/gen4/random-teams.js +++ b/data/mods/gen4/random-teams.js @@ -18,7 +18,7 @@ class RandomGen4Teams extends RandomGen5Teams { template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../lib/crashlogger')(err, 'The gen 4 randbat set generator'); + require('../../../lib/crashlogger')(err, 'The gen 4 randbat set generator'); } if (template.battleOnly) species = template.baseSpecies; diff --git a/mods/gen4/rulesets.js b/data/mods/gen4/rulesets.js similarity index 100% rename from mods/gen4/rulesets.js rename to data/mods/gen4/rulesets.js diff --git a/mods/gen4/scripts.js b/data/mods/gen4/scripts.js similarity index 100% rename from mods/gen4/scripts.js rename to data/mods/gen4/scripts.js diff --git a/mods/gen4/statuses.js b/data/mods/gen4/statuses.js similarity index 100% rename from mods/gen4/statuses.js rename to data/mods/gen4/statuses.js diff --git a/mods/gen5/abilities.js b/data/mods/gen5/abilities.js similarity index 100% rename from mods/gen5/abilities.js rename to data/mods/gen5/abilities.js diff --git a/mods/gen5/formats-data.js b/data/mods/gen5/formats-data.js similarity index 100% rename from mods/gen5/formats-data.js rename to data/mods/gen5/formats-data.js diff --git a/mods/gen5/items.js b/data/mods/gen5/items.js similarity index 100% rename from mods/gen5/items.js rename to data/mods/gen5/items.js diff --git a/mods/gen5/moves.js b/data/mods/gen5/moves.js similarity index 100% rename from mods/gen5/moves.js rename to data/mods/gen5/moves.js diff --git a/mods/gen5/pokedex.js b/data/mods/gen5/pokedex.js similarity index 100% rename from mods/gen5/pokedex.js rename to data/mods/gen5/pokedex.js diff --git a/mods/gen5/random-teams.js b/data/mods/gen5/random-teams.js similarity index 99% rename from mods/gen5/random-teams.js rename to data/mods/gen5/random-teams.js index 25610085ba..eb3851d7f3 100644 --- a/mods/gen5/random-teams.js +++ b/data/mods/gen5/random-teams.js @@ -19,7 +19,7 @@ class RandomGen5Teams extends RandomGen6Teams { template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../lib/crashlogger')(err, 'The gen 5 randbat set generator'); + require('../../../lib/crashlogger')(err, 'The gen 5 randbat set generator'); } if (template.battleOnly) { diff --git a/mods/gen5/scripts.js b/data/mods/gen5/scripts.js similarity index 100% rename from mods/gen5/scripts.js rename to data/mods/gen5/scripts.js diff --git a/mods/gen5/statuses.js b/data/mods/gen5/statuses.js similarity index 100% rename from mods/gen5/statuses.js rename to data/mods/gen5/statuses.js diff --git a/mods/gen5/typechart.js b/data/mods/gen5/typechart.js similarity index 100% rename from mods/gen5/typechart.js rename to data/mods/gen5/typechart.js diff --git a/mods/gen6/abilities.js b/data/mods/gen6/abilities.js similarity index 100% rename from mods/gen6/abilities.js rename to data/mods/gen6/abilities.js diff --git a/mods/gen6/factory-sets.json b/data/mods/gen6/factory-sets.json similarity index 100% rename from mods/gen6/factory-sets.json rename to data/mods/gen6/factory-sets.json diff --git a/mods/gen6/formats-data.js b/data/mods/gen6/formats-data.js similarity index 100% rename from mods/gen6/formats-data.js rename to data/mods/gen6/formats-data.js diff --git a/mods/gen6/items.js b/data/mods/gen6/items.js similarity index 100% rename from mods/gen6/items.js rename to data/mods/gen6/items.js diff --git a/mods/gen6/moves.js b/data/mods/gen6/moves.js similarity index 100% rename from mods/gen6/moves.js rename to data/mods/gen6/moves.js diff --git a/mods/gen6/pokedex.js b/data/mods/gen6/pokedex.js similarity index 100% rename from mods/gen6/pokedex.js rename to data/mods/gen6/pokedex.js diff --git a/mods/gen6/random-teams.js b/data/mods/gen6/random-teams.js similarity index 99% rename from mods/gen6/random-teams.js rename to data/mods/gen6/random-teams.js index 36ba7dc028..9efad2db9d 100644 --- a/mods/gen6/random-teams.js +++ b/data/mods/gen6/random-teams.js @@ -1,6 +1,6 @@ 'use strict'; -const RandomTeams = require('../../data/random-teams'); +const RandomTeams = require('../../random-teams'); class RandomGen6Teams extends RandomTeams { /** @@ -30,7 +30,7 @@ class RandomGen6Teams extends RandomTeams { template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../lib/crashlogger')(err, 'The gen 6 randbat set generator'); + require('../../../lib/crashlogger')(err, 'The gen 6 randbat set generator'); } if (template.battleOnly) { @@ -1047,7 +1047,7 @@ class RandomGen6Teams extends RandomTeams { let pokemonPool = Object.keys(this.randomFactorySets[chosenTier]); - /**@type {import('./../../data/random-teams').TeamData} */ + /**@type {import('../../random-teams').TeamData} */ let teamData = {typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, has: {}, forceResult: forceResult, weaknesses: {}, resistances: {}}; let requiredMoveFamilies = ['hazardSet', 'hazardClear']; /**@type {{[k: string]: string}} */ diff --git a/mods/gen6/scripts.js b/data/mods/gen6/scripts.js similarity index 100% rename from mods/gen6/scripts.js rename to data/mods/gen6/scripts.js diff --git a/mods/gen6/statuses.js b/data/mods/gen6/statuses.js similarity index 100% rename from mods/gen6/statuses.js rename to data/mods/gen6/statuses.js diff --git a/mods/gen6/typechart.js b/data/mods/gen6/typechart.js similarity index 100% rename from mods/gen6/typechart.js rename to data/mods/gen6/typechart.js diff --git a/mods/gennext/README.md b/data/mods/gennext/README.md similarity index 99% rename from mods/gennext/README.md rename to data/mods/gennext/README.md index 3038feef4c..114b2a7018 100644 --- a/mods/gennext/README.md +++ b/data/mods/gennext/README.md @@ -39,7 +39,7 @@ Recent changes A changelog for NEXT is available here: -https://github.com/Zarel/Pokemon-Showdown/commits/master/mods/gennext +https://github.com/Zarel/Pokemon-Showdown/commits/master/data/mods/gennext Changes ------------------------------------------------------------------------ diff --git a/mods/gennext/abilities.js b/data/mods/gennext/abilities.js similarity index 100% rename from mods/gennext/abilities.js rename to data/mods/gennext/abilities.js diff --git a/mods/gennext/formats-data.js b/data/mods/gennext/formats-data.js similarity index 100% rename from mods/gennext/formats-data.js rename to data/mods/gennext/formats-data.js diff --git a/mods/gennext/items.js b/data/mods/gennext/items.js similarity index 100% rename from mods/gennext/items.js rename to data/mods/gennext/items.js diff --git a/mods/gennext/moves.js b/data/mods/gennext/moves.js similarity index 100% rename from mods/gennext/moves.js rename to data/mods/gennext/moves.js diff --git a/mods/gennext/pokedex.js b/data/mods/gennext/pokedex.js similarity index 100% rename from mods/gennext/pokedex.js rename to data/mods/gennext/pokedex.js diff --git a/mods/gennext/scripts.js b/data/mods/gennext/scripts.js similarity index 100% rename from mods/gennext/scripts.js rename to data/mods/gennext/scripts.js diff --git a/mods/gennext/statuses.js b/data/mods/gennext/statuses.js similarity index 100% rename from mods/gennext/statuses.js rename to data/mods/gennext/statuses.js diff --git a/mods/letsgo/formats-data.js b/data/mods/letsgo/formats-data.js similarity index 100% rename from mods/letsgo/formats-data.js rename to data/mods/letsgo/formats-data.js diff --git a/mods/letsgo/learnsets.js b/data/mods/letsgo/learnsets.js similarity index 100% rename from mods/letsgo/learnsets.js rename to data/mods/letsgo/learnsets.js diff --git a/mods/letsgo/moves.js b/data/mods/letsgo/moves.js similarity index 100% rename from mods/letsgo/moves.js rename to data/mods/letsgo/moves.js diff --git a/mods/letsgo/pokedex.js b/data/mods/letsgo/pokedex.js similarity index 100% rename from mods/letsgo/pokedex.js rename to data/mods/letsgo/pokedex.js diff --git a/mods/letsgo/random-teams.js b/data/mods/letsgo/random-teams.js similarity index 98% rename from mods/letsgo/random-teams.js rename to data/mods/letsgo/random-teams.js index f40809210d..df91ccfb2a 100644 --- a/mods/letsgo/random-teams.js +++ b/data/mods/letsgo/random-teams.js @@ -1,6 +1,6 @@ 'use strict'; -const RandomTeams = require('../../data/random-teams'); +const RandomTeams = require('../../random-teams'); class RandomLetsGoTeams extends RandomTeams { /** @@ -17,7 +17,7 @@ class RandomLetsGoTeams extends RandomTeams { template = this.getTemplate('bulbasaur'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../lib/crashlogger')(err, 'The Let\'s Go randbat set generator'); + require('../../../lib/crashlogger')(err, 'The Let\'s Go randbat set generator'); } if (template.battleOnly) { diff --git a/mods/letsgo/rulesets.js b/data/mods/letsgo/rulesets.js similarity index 100% rename from mods/letsgo/rulesets.js rename to data/mods/letsgo/rulesets.js diff --git a/mods/letsgo/scripts.js b/data/mods/letsgo/scripts.js similarity index 100% rename from mods/letsgo/scripts.js rename to data/mods/letsgo/scripts.js diff --git a/mods/mixandmega/items.js b/data/mods/mixandmega/items.js similarity index 100% rename from mods/mixandmega/items.js rename to data/mods/mixandmega/items.js diff --git a/mods/mixandmega/scripts.js b/data/mods/mixandmega/scripts.js similarity index 100% rename from mods/mixandmega/scripts.js rename to data/mods/mixandmega/scripts.js diff --git a/mods/pic/moves.js b/data/mods/pic/moves.js similarity index 100% rename from mods/pic/moves.js rename to data/mods/pic/moves.js diff --git a/mods/pic/scripts.js b/data/mods/pic/scripts.js similarity index 100% rename from mods/pic/scripts.js rename to data/mods/pic/scripts.js diff --git a/mods/pokebilities/abilities.js b/data/mods/pokebilities/abilities.js similarity index 100% rename from mods/pokebilities/abilities.js rename to data/mods/pokebilities/abilities.js diff --git a/mods/pokebilities/scripts.js b/data/mods/pokebilities/scripts.js similarity index 100% rename from mods/pokebilities/scripts.js rename to data/mods/pokebilities/scripts.js diff --git a/mods/ssb/abilities.js b/data/mods/ssb/abilities.js similarity index 100% rename from mods/ssb/abilities.js rename to data/mods/ssb/abilities.js diff --git a/mods/ssb/items.js b/data/mods/ssb/items.js similarity index 100% rename from mods/ssb/items.js rename to data/mods/ssb/items.js diff --git a/mods/ssb/moves.js b/data/mods/ssb/moves.js similarity index 99% rename from mods/ssb/moves.js rename to data/mods/ssb/moves.js index d617556de7..45ad5286c9 100644 --- a/mods/ssb/moves.js +++ b/data/mods/ssb/moves.js @@ -2,7 +2,7 @@ // Used for bumbadadabum and Snaquaza's move const RandomStaffBrosTeams = require('./random-teams'); -const Pokemon = require('../../sim/pokemon'); +const Pokemon = require('../../../sim/pokemon'); /** @type {{[k: string]: ModdedMoveData}} */ let BattleMovedex = { diff --git a/mods/ssb/pokedex.js b/data/mods/ssb/pokedex.js similarity index 100% rename from mods/ssb/pokedex.js rename to data/mods/ssb/pokedex.js diff --git a/mods/ssb/random-teams.js b/data/mods/ssb/random-teams.js similarity index 99% rename from mods/ssb/random-teams.js rename to data/mods/ssb/random-teams.js index 6f88c4145b..497e8e5c82 100644 --- a/mods/ssb/random-teams.js +++ b/data/mods/ssb/random-teams.js @@ -16,7 +16,7 @@ * @property {boolean=} shiny */ -const RandomTeams = require('../../data/random-teams'); +const RandomTeams = require('../../random-teams'); class RandomStaffBrosTeams extends RandomTeams { randomStaffBrosTeam() { diff --git a/mods/ssb/scripts.js b/data/mods/ssb/scripts.js similarity index 100% rename from mods/ssb/scripts.js rename to data/mods/ssb/scripts.js diff --git a/mods/ssb/statuses.js b/data/mods/ssb/statuses.js similarity index 100% rename from mods/ssb/statuses.js rename to data/mods/ssb/statuses.js diff --git a/mods/stadium/README.md b/data/mods/stadium/README.md similarity index 100% rename from mods/stadium/README.md rename to data/mods/stadium/README.md diff --git a/mods/stadium/moves.js b/data/mods/stadium/moves.js similarity index 100% rename from mods/stadium/moves.js rename to data/mods/stadium/moves.js diff --git a/mods/stadium/rulesets.js b/data/mods/stadium/rulesets.js similarity index 100% rename from mods/stadium/rulesets.js rename to data/mods/stadium/rulesets.js diff --git a/mods/stadium/scripts.js b/data/mods/stadium/scripts.js similarity index 100% rename from mods/stadium/scripts.js rename to data/mods/stadium/scripts.js diff --git a/mods/stadium/statuses.js b/data/mods/stadium/statuses.js similarity index 100% rename from mods/stadium/statuses.js rename to data/mods/stadium/statuses.js diff --git a/mods/vgc17/formats-data.js b/data/mods/vgc17/formats-data.js similarity index 100% rename from mods/vgc17/formats-data.js rename to data/mods/vgc17/formats-data.js diff --git a/mods/vgc17/items.js b/data/mods/vgc17/items.js similarity index 100% rename from mods/vgc17/items.js rename to data/mods/vgc17/items.js diff --git a/mods/vgc17/learnsets.js b/data/mods/vgc17/learnsets.js similarity index 100% rename from mods/vgc17/learnsets.js rename to data/mods/vgc17/learnsets.js diff --git a/mods/vgc17/rulesets.js b/data/mods/vgc17/rulesets.js similarity index 100% rename from mods/vgc17/rulesets.js rename to data/mods/vgc17/rulesets.js diff --git a/dev-tools/global.d.ts b/dev-tools/global.d.ts index 7162b08661..f9a5155bd3 100644 --- a/dev-tools/global.d.ts +++ b/dev-tools/global.d.ts @@ -1,3 +1,5 @@ +import child_process = require('child_process'); + import BattleType = require('./../sim/battle'); import BattleStreamType = require('./../sim/battle-stream'); import DataType = require('./../sim/dex-data'); @@ -7,15 +9,16 @@ import PokemonType = require('./../sim/pokemon'); import PRNGType = require('./../sim/prng'); import SideType = require('./../sim/side'); import TeamValidatorType = require('./../sim/team-validator'); -import RoomsType = require('./../rooms'); -import RoomlogsType = require('./../roomlogs'); -import LadderStoreType = require('./../ladders-remote'); -import LaddersType = require('./../ladders'); -import UsersType = require('./../users'); -import PunishmentsType = require('./../punishments'); + +import RoomsType = require('./../server/rooms'); +import RoomlogsType = require('./../server/roomlogs'); +import LadderStoreType = require('./../server/ladders-remote'); +import LaddersType = require('./../server/ladders'); +import UsersType = require('./../server/users'); +import PunishmentsType = require('./../server/punishments'); +import ChatType = require('./../server/chat'); + import StreamsType = require('./../lib/streams'); -import child_process = require('child_process'); -import ChatType = require('./../chat'); declare global { // modules diff --git a/dev-tools/globals.ts b/dev-tools/globals.ts index 02b212a6ca..38ada40878 100644 --- a/dev-tools/globals.ts +++ b/dev-tools/globals.ts @@ -3,10 +3,11 @@ type ModdedDex = typeof import('./../sim/dex') type Pokemon = import('./../sim/pokemon') type Side = import('./../sim/side') type Validator = ReturnType -type PageTable = import('./../chat').PageTable -type ChatCommands = import('./../chat').ChatCommands -type ChatFilter = import('./../chat').ChatFilter -type NameFilter = import('./../chat').NameFilter + +type PageTable = import('./../server/chat').PageTable +type ChatCommands = import('./../server/chat').ChatCommands +type ChatFilter = import('./../server/chat').ChatFilter +type NameFilter = import('./../server/chat').NameFilter interface AnyObject {[k: string]: any} type DexTable = {[key: string]: T} diff --git a/package.json b/package.json index 9a1d1d465d..c1e45d9b77 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "node": ">=7.7.0" }, "scripts": { - "start": "node pokemon-showdown", + "start": "node pokemon-showdown start", "test": "eslint --cache . && tsc && mocha", "tsc": "tsc", "lint": "eslint --cache ." diff --git a/pokemon-showdown b/pokemon-showdown index 716526e9d7..e1eb2ce58a 100755 --- a/pokemon-showdown +++ b/pokemon-showdown @@ -54,18 +54,14 @@ try { } if (!process.argv[2] || /^[0-9]+$/.test(process.argv[2])) { - // Start the server. We manually load app.js so it can be configured to run as - // the main module, rather than this file being considered the main module. - // This ensures any dependencies that were just installed can be found when - // running on Windows and avoids any other potential side effects of the main - // module not being app.js like it is assumed to be. + // Start the server. // // The port the server should host on can be passed using the second argument // when launching with this file the same way app.js normally allows, e.g. to // host on port 9000: // $ ./pokemon-showdown 9000 - require('module')._load('./app', module, true); + require('module')._load('./server', module, true); } else switch (process.argv[2]) { case 'help': case 'h': @@ -73,7 +69,7 @@ if (!process.argv[2] || /^[0-9]+$/.test(process.argv[2])) { case '-h': case '--help': case '-?': - console.log('pokemon-showdown [PORT]'); + console.log('pokemon-showdown start [PORT]'); console.log(''); console.log(' Starts a PS server on the specified port'); console.log(' (Defaults to the port setting in config/config.js)'); @@ -110,6 +106,12 @@ if (!process.argv[2] || /^[0-9]+$/.test(process.argv[2])) { console.log(''); console.log(' Displays this reference'); break; + case 'start': + { + process.argv[2] = process.argv[3]; + require('module')._load('./server', module, true); + break; + } case 'generate-team': { var Dex = require('./sim/dex'); diff --git a/chat-commands.js b/server/chat-commands.js similarity index 99% rename from chat-commands.js rename to server/chat-commands.js index aec6ed6a50..1265ebabb8 100644 --- a/chat-commands.js +++ b/server/chat-commands.js @@ -18,7 +18,7 @@ /* eslint no-else-return: "error" */ const crypto = require('crypto'); -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); const MAX_REASON_LENGTH = 300; const MUTE_LENGTH = 7 * 60 * 1000; @@ -2988,7 +2988,7 @@ const commands = { Chat.destroy(); - const processManagers = require('./lib/process-manager').processManagers; + const processManagers = require('../lib/process-manager').processManagers; for (let manager of processManagers.slice()) { if (manager.filename.startsWith(FS('chat-plugins').path)) { manager.destroy(); diff --git a/chat-formatter.js b/server/chat-formatter.js similarity index 100% rename from chat-formatter.js rename to server/chat-formatter.js diff --git a/chat-plugins/COMMANDS.md b/server/chat-plugins/COMMANDS.md similarity index 100% rename from chat-plugins/COMMANDS.md rename to server/chat-plugins/COMMANDS.md diff --git a/chat-plugins/calculator.js b/server/chat-plugins/calculator.js similarity index 100% rename from chat-plugins/calculator.js rename to server/chat-plugins/calculator.js diff --git a/chat-plugins/chat-monitor.js b/server/chat-plugins/chat-monitor.js similarity index 99% rename from chat-plugins/chat-monitor.js rename to server/chat-plugins/chat-monitor.js index 43ff9be8a8..dbe69de2c5 100644 --- a/chat-plugins/chat-monitor.js +++ b/server/chat-plugins/chat-monitor.js @@ -1,6 +1,6 @@ 'use strict'; -const FS = require('../lib/fs'); +const FS = require('../../lib/fs'); const MONITOR_FILE = 'config/chat-plugins/chat-monitor.tsv'; const WRITE_THROTTLE_TIME = 5 * 60 * 1000; diff --git a/chat-plugins/daily-spotlight.js b/server/chat-plugins/daily-spotlight.js similarity index 99% rename from chat-plugins/daily-spotlight.js rename to server/chat-plugins/daily-spotlight.js index 6c4ef4dd2e..b66f5db2c1 100644 --- a/chat-plugins/daily-spotlight.js +++ b/server/chat-plugins/daily-spotlight.js @@ -1,6 +1,6 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const DAY = 24 * 60 * 60 * 1000; const SPOTLIGHT_FILE = 'config/chat-plugins/spotlights.json'; diff --git a/chat-plugins/datasearch.js b/server/chat-plugins/datasearch.js similarity index 99% rename from chat-plugins/datasearch.js rename to server/chat-plugins/datasearch.js index 1b8f55fee1..f105698910 100644 --- a/chat-plugins/datasearch.js +++ b/server/chat-plugins/datasearch.js @@ -1554,7 +1554,7 @@ function runSearch(query) { * Process manager *********************************************************/ -const QueryProcessManager = require('./../lib/process-manager').QueryProcessManager; +const QueryProcessManager = require('../../lib/process-manager').QueryProcessManager; const PM = new QueryProcessManager(module, async query => { try { @@ -1573,27 +1573,27 @@ const PM = new QueryProcessManager(module, async query => { return null; } } catch (err) { - require('./../lib/crashlogger')(err, 'A search query', query); + require('../../lib/crashlogger')(err, 'A search query', query); } return {error: "Sorry! Our search engine crashed on your query. We've been automatically notified and will fix this crash."}; }); if (!PM.isParentProcess) { // This is a child process! - global.Config = require('../config/config'); + global.Config = require('../../config/config'); if (Config.crashguard) { process.on('uncaughtException', err => { - require('../lib/crashlogger')(err, 'A dexsearch process'); + require('../../lib/crashlogger')(err, 'A dexsearch process'); }); } - global.Dex = require('../sim/dex'); + global.Dex = require('../../sim/dex'); global.toId = Dex.getId; Dex.includeData(); - global.TeamValidator = require('../sim/team-validator'); + global.TeamValidator = require('../../sim/team-validator'); - require('../lib/repl').start('dexsearch', cmd => eval(cmd)); + require('../../lib/repl').start('dexsearch', cmd => eval(cmd)); } else { PM.spawn(MAX_PROCESSES); } diff --git a/chat-plugins/hangman.js b/server/chat-plugins/hangman.js similarity index 100% rename from chat-plugins/hangman.js rename to server/chat-plugins/hangman.js diff --git a/chat-plugins/helptickets.js b/server/chat-plugins/helptickets.js similarity index 99% rename from chat-plugins/helptickets.js rename to server/chat-plugins/helptickets.js index 0929365c04..677def5c96 100644 --- a/chat-plugins/helptickets.js +++ b/server/chat-plugins/helptickets.js @@ -1,6 +1,6 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const TICKET_FILE = 'config/tickets.json'; const TICKET_CACHE_TIME = 24 * 60 * 60 * 1000; // 24 hours const TICKET_BAN_DURATION = 48 * 60 * 60 * 1000; // 48 hours diff --git a/chat-plugins/info.js b/server/chat-plugins/info.js similarity index 99% rename from chat-plugins/info.js rename to server/chat-plugins/info.js index 9c225979d1..80ac80382e 100644 --- a/chat-plugins/info.js +++ b/server/chat-plugins/info.js @@ -1690,7 +1690,7 @@ const commands = { if (!this.runBroadcast()) return; this.sendReplyBox( "NEXT (also called Gen-NEXT) is a mod that makes changes to the game:
" + - `- README: overview of NEXT
` + + `- README: overview of NEXT
` + "Example replays:
" + `- Zergo vs Mr Weegle Snarf
` + `- NickMP vs Khalogie` diff --git a/chat-plugins/jeopardy.js b/server/chat-plugins/jeopardy.js similarity index 100% rename from chat-plugins/jeopardy.js rename to server/chat-plugins/jeopardy.js diff --git a/chat-plugins/mafia-data.js b/server/chat-plugins/mafia-data.js similarity index 100% rename from chat-plugins/mafia-data.js rename to server/chat-plugins/mafia-data.js diff --git a/chat-plugins/mafia.js b/server/chat-plugins/mafia.js similarity index 99% rename from chat-plugins/mafia.js rename to server/chat-plugins/mafia.js index 5e27fe1d2f..5cae4bdac6 100644 --- a/chat-plugins/mafia.js +++ b/server/chat-plugins/mafia.js @@ -48,7 +48,7 @@ * @property {Object} picks */ -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const LOGS_FILE = 'config/chat-plugins/mafia-logs.json'; const BANS_FILE = 'config/chat-plugins/mafia-bans.json'; const MafiaData = require('./mafia-data.js'); diff --git a/chat-plugins/modlog.js b/server/chat-plugins/modlog.js similarity index 97% rename from chat-plugins/modlog.js rename to server/chat-plugins/modlog.js index 4a61f4b772..77f3528e02 100644 --- a/chat-plugins/modlog.js +++ b/server/chat-plugins/modlog.js @@ -15,9 +15,9 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const path = require('path'); -const Dashycode = require('../lib/dashycode'); +const Dashycode = require('../../lib/dashycode'); const execFileSync = require('child_process').execFileSync; const MAX_PROCESSES = 1; @@ -529,7 +529,7 @@ exports.commands = { * Process manager *********************************************************/ -const QueryProcessManager = require('./../lib/process-manager').QueryProcessManager; +const QueryProcessManager = require('../../lib/process-manager').QueryProcessManager; const PM = new QueryProcessManager(module, async data => { switch (data.cmd) { @@ -538,7 +538,7 @@ const PM = new QueryProcessManager(module, async data => { try { return await runModlog(roomidList, searchString, exactSearch, maxLines); } catch (err) { - require('../lib/crashlogger')(err, 'A modlog query', { + require('../../lib/crashlogger')(err, 'A modlog query', { roomidList, searchString, exactSearch, @@ -551,7 +551,7 @@ const PM = new QueryProcessManager(module, async data => { try { return await runBattleSearch(userid, turnLimit, month, tierid, date); } catch (err) { - require('../lib/crashlogger')(err, 'A battle search query', { + require('../../lib/crashlogger')(err, 'A battle search query', { userid, turnLimit, month, @@ -566,16 +566,16 @@ const PM = new QueryProcessManager(module, async data => { if (!PM.isParentProcess) { // This is a child process! - global.Config = require('../config/config'); + global.Config = require('../../config/config'); process.on('uncaughtException', err => { if (Config.crashguard) { - require('../lib/crashlogger')(err, 'A modlog child process'); + require('../../lib/crashlogger')(err, 'A modlog child process'); } }); - global.Dex = require('../sim/dex'); + global.Dex = require('../../sim/dex'); global.toId = Dex.getId; - require('../lib/repl').start('modlog', cmd => eval(cmd)); + require('../../lib/repl').start('modlog', cmd => eval(cmd)); } else { PM.spawn(MAX_PROCESSES); } diff --git a/chat-plugins/othermetas.js b/server/chat-plugins/othermetas.js similarity index 100% rename from chat-plugins/othermetas.js rename to server/chat-plugins/othermetas.js diff --git a/chat-plugins/poll.js b/server/chat-plugins/poll.js similarity index 100% rename from chat-plugins/poll.js rename to server/chat-plugins/poll.js diff --git a/chat-plugins/room-events.js b/server/chat-plugins/room-events.js similarity index 100% rename from chat-plugins/room-events.js rename to server/chat-plugins/room-events.js diff --git a/chat-plugins/room-faqs.js b/server/chat-plugins/room-faqs.js similarity index 100% rename from chat-plugins/room-faqs.js rename to server/chat-plugins/room-faqs.js diff --git a/chat-plugins/roomsettings.js b/server/chat-plugins/roomsettings.js similarity index 100% rename from chat-plugins/roomsettings.js rename to server/chat-plugins/roomsettings.js diff --git a/chat-plugins/scavenger-games.js b/server/chat-plugins/scavenger-games.js similarity index 100% rename from chat-plugins/scavenger-games.js rename to server/chat-plugins/scavenger-games.js diff --git a/chat-plugins/scavengers.js b/server/chat-plugins/scavengers.js similarity index 100% rename from chat-plugins/scavengers.js rename to server/chat-plugins/scavengers.js diff --git a/chat-plugins/tcgtabletop.js b/server/chat-plugins/tcgtabletop.js similarity index 100% rename from chat-plugins/tcgtabletop.js rename to server/chat-plugins/tcgtabletop.js diff --git a/chat-plugins/thecafe.js b/server/chat-plugins/thecafe.js similarity index 99% rename from chat-plugins/thecafe.js rename to server/chat-plugins/thecafe.js index 3e04d15dd5..7f57ac9c72 100644 --- a/chat-plugins/thecafe.js +++ b/server/chat-plugins/thecafe.js @@ -1,6 +1,6 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const DISHES_FILE = 'config/chat-plugins/thecafe-foodfight.json'; const FOODFIGHT_COOLDOWN = 5 * 60 * 1000; diff --git a/chat-plugins/thing-of-the-day.js b/server/chat-plugins/thing-of-the-day.js similarity index 99% rename from chat-plugins/thing-of-the-day.js rename to server/chat-plugins/thing-of-the-day.js index c091f1fd97..1b2eb805c6 100644 --- a/chat-plugins/thing-of-the-day.js +++ b/server/chat-plugins/thing-of-the-day.js @@ -1,6 +1,6 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const MINUTE = 60 * 1000; const ROOMIDS = ['thestudio', 'jubilifetvfilms', 'youtube', 'thelibrary', 'prowrestling']; diff --git a/chat-plugins/trivia.js b/server/chat-plugins/trivia.js similarity index 99% rename from chat-plugins/trivia.js rename to server/chat-plugins/trivia.js index 511142c0b4..f5d14f1b2f 100644 --- a/chat-plugins/trivia.js +++ b/server/chat-plugins/trivia.js @@ -5,7 +5,7 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); const MAIN_CATEGORIES = { ae: 'Arts and Entertainment', diff --git a/chat-plugins/uno.js b/server/chat-plugins/uno.js similarity index 100% rename from chat-plugins/uno.js rename to server/chat-plugins/uno.js diff --git a/chat-plugins/wifi.js b/server/chat-plugins/wifi.js similarity index 99% rename from chat-plugins/wifi.js rename to server/chat-plugins/wifi.js index 4534979c76..1fe58b2cc6 100644 --- a/chat-plugins/wifi.js +++ b/server/chat-plugins/wifi.js @@ -6,7 +6,7 @@ 'use strict'; -const FS = require('./../lib/fs'); +const FS = require('../../lib/fs'); Punishments.roomPunishmentTypes.set('GIVEAWAYBAN', 'banned from giveaways'); diff --git a/chat.js b/server/chat.js similarity index 99% rename from chat.js rename to server/chat.js index 2aad92a6f6..c7867f1103 100644 --- a/chat.js +++ b/server/chat.js @@ -53,7 +53,7 @@ const MAX_PARSE_RECURSION = 10; const VALID_COMMAND_TOKENS = '/!'; const BROADCAST_TOKEN = '!'; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); /** @type {(url: string) => Promise<{width: number, height: number}>} */ // @ts-ignore ignoring until there is a ts typedef available for this module. @@ -1291,7 +1291,7 @@ Chat.loadPlugins = function () { // Install plug-in commands and chat filters // info always goes first so other plugins can shadow it - let files = FS('chat-plugins/').readdirSync(); + let files = FS('server/chat-plugins/').readdirSync(); files = files.filter(file => file !== 'info.js'); files.unshift('info.js'); diff --git a/dnsbl.js b/server/dnsbl.js similarity index 99% rename from dnsbl.js rename to server/dnsbl.js index b9e445a1a3..7fca780123 100644 --- a/dnsbl.js +++ b/server/dnsbl.js @@ -19,7 +19,7 @@ const BLOCKLISTS = ['sbl.spamhaus.org', 'rbl.efnetrbl.org']; const dns = require('dns'); -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); let Dnsbl = module.exports; diff --git a/app.js b/server/index.js similarity index 91% rename from app.js rename to server/index.js index 28595ba635..43664d538a 100644 --- a/app.js +++ b/server/index.js @@ -60,7 +60,7 @@ try { throw new Error("Dependencies are unmet; run node pokemon-showdown before launching Pokemon Showdown again."); } -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); /********************************************************* * Load configuration @@ -68,26 +68,26 @@ const FS = require('./lib/fs'); try { // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored - require.resolve('./config/config'); + require.resolve('../config/config'); } catch (err) { if (err.code !== 'MODULE_NOT_FOUND') throw err; // should never happen throw new Error('config.js does not exist; run node pokemon-showdown to set up the default config file before launching Pokemon Showdown again.'); } // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored -global.Config = require('./config/config'); +global.Config = require('../config/config'); global.Monitor = require('./monitor'); if (Config.watchconfig) { - let configPath = require.resolve('./config/config'); + let configPath = require.resolve('../config/config'); FS(configPath).onModify(() => { try { delete require.cache[configPath]; - global.Config = require('./config/config'); + global.Config = require('../config/config'); if (global.Users) Users.cacheGroupData(); - Monitor.notice('Reloaded config/config.js'); + Monitor.notice('Reloaded ../config/config.js'); } catch (e) { - Monitor.adminlog("Error reloading config/config.js: " + e.stack); + Monitor.adminlog("Error reloading ../config/config.js: " + e.stack); } }); } @@ -96,7 +96,7 @@ if (Config.watchconfig) { * Set up most of our globals *********************************************************/ -global.Dex = require('./sim/dex'); +global.Dex = require('../sim/dex'); global.toId = Dex.getId; global.LoginServer = require('./loginserver'); @@ -159,4 +159,4 @@ TeamValidatorAsync.PM.spawn(); * Start up the REPL server *********************************************************/ -require('./lib/repl').start('app', cmd => eval(cmd)); +require('../lib/repl').start('app', cmd => eval(cmd)); diff --git a/ladders-local.js b/server/ladders-local.js similarity index 99% rename from ladders-local.js rename to server/ladders-local.js index ffdab1c8ef..0f24840472 100644 --- a/ladders-local.js +++ b/server/ladders-local.js @@ -15,7 +15,7 @@ 'use strict'; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); // ladderCaches = {formatid: ladder OR Promise(ladder)} // Use Ladders(formatid).ladder to guarantee a Promise(ladder). diff --git a/ladders-remote.js b/server/ladders-remote.js similarity index 100% rename from ladders-remote.js rename to server/ladders-remote.js diff --git a/ladders.js b/server/ladders.js similarity index 100% rename from ladders.js rename to server/ladders.js diff --git a/loginserver.js b/server/loginserver.js similarity index 98% rename from loginserver.js rename to server/loginserver.js index 211ca67d43..c8396497cc 100644 --- a/loginserver.js +++ b/server/loginserver.js @@ -15,8 +15,8 @@ const LOGIN_SERVER_BATCH_TIME = 1000; const http = Config.loginserver.startsWith('http:') ? require("http") : require("https"); const url = require('url'); -const FS = require('./lib/fs'); -const Streams = require('./lib/streams'); +const FS = require('../lib/fs'); +const Streams = require('../lib/streams'); /** * A custom error type used when requests to the login server take too long. diff --git a/monitor.js b/server/monitor.js similarity index 99% rename from monitor.js rename to server/monitor.js index 744675ef64..f485300e27 100644 --- a/monitor.js +++ b/server/monitor.js @@ -8,7 +8,7 @@ */ 'use strict'; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); const MONITOR_CLEAN_TIMEOUT = 2 * 60 * 60 * 1000; @@ -54,7 +54,7 @@ if (('Config' in global) && Config.loglevel = 2; } -let crashlogger = require('./lib/crashlogger'); +let crashlogger = require('../lib/crashlogger'); const Monitor = module.exports = { /********************************************************* diff --git a/punishments.js b/server/punishments.js similarity index 99% rename from punishments.js rename to server/punishments.js index eeb4e5a823..288b75c6fc 100644 --- a/punishments.js +++ b/server/punishments.js @@ -15,7 +15,7 @@ let Punishments = module.exports; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); const PUNISHMENT_FILE = 'config/punishments.tsv'; const ROOM_PUNISHMENT_FILE = 'config/room-punishments.tsv'; diff --git a/room-battle.js b/server/room-battle.js similarity index 99% rename from room-battle.js rename to server/room-battle.js index 95389f4cb2..61ff1a1388 100644 --- a/room-battle.js +++ b/server/room-battle.js @@ -13,7 +13,7 @@ 'use strict'; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); /** 5 seconds */ const TICK_TIME = 5; @@ -1022,17 +1022,17 @@ exports.RoomBattle = Battle; * Process manager *********************************************************/ -const StreamProcessManager = require('./lib/process-manager').StreamProcessManager; +const StreamProcessManager = require('../lib/process-manager').StreamProcessManager; const PM = new StreamProcessManager(module, () => { - const BattleStream = require('./sim/battle-stream').BattleStream; + const BattleStream = require('../sim/battle-stream').BattleStream; return new BattleStream(); }); if (!PM.isParentProcess) { // This is a child process! // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored - global.Config = require('./config/config'); + global.Config = require('../config/config'); global.Chat = require('./chat'); // @ts-ignore ??? global.Monitor = { @@ -1066,7 +1066,7 @@ if (!PM.isParentProcess) { }); } - require('./lib/repl').start(`sim-${process.pid}`, cmd => eval(cmd)); + require('../lib/repl').start(`sim-${process.pid}`, cmd => eval(cmd)); } else { PM.spawn(global.Config ? Config.simulatorprocesses : 1); } diff --git a/room-game.js b/server/room-game.js similarity index 100% rename from room-game.js rename to server/room-game.js diff --git a/roomlogs.js b/server/roomlogs.js similarity index 99% rename from roomlogs.js rename to server/roomlogs.js index e05ec97b45..24487d4bbf 100644 --- a/roomlogs.js +++ b/server/roomlogs.js @@ -9,7 +9,7 @@ 'use strict'; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); /** * Most rooms have three logs: diff --git a/rooms.js b/server/rooms.js similarity index 99% rename from rooms.js rename to server/rooms.js index 50fa5ebeda..f5bf6884eb 100644 --- a/rooms.js +++ b/server/rooms.js @@ -22,7 +22,7 @@ const LAST_BATTLE_WRITE_THROTTLE = 10; /** @type {null} */ const RETRY_AFTER_LOGIN = null; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); const Roomlogs = require('./roomlogs'); /********************************************************* @@ -483,7 +483,7 @@ class GlobalRoom extends BasicRoom { // Prevent there from being two possible hidden classes an instance // of GlobalRoom can have. // @ts-ignore - this.ladderIpLog = new (require('./lib/streams')).WriteStream({write() {}}); + this.ladderIpLog = new (require('../lib/streams')).WriteStream({write() {}}); } let lastBattle; diff --git a/sockets.js b/server/sockets.js similarity index 94% rename from sockets.js rename to server/sockets.js index ebabcd7cb0..3d448bae9e 100644 --- a/sockets.js +++ b/server/sockets.js @@ -17,7 +17,7 @@ const MINUTES = 60 * 1000; const cluster = require('cluster'); const fs = require('fs'); -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); if (cluster.isMaster) { cluster.setupMaster({ @@ -77,7 +77,7 @@ if (cluster.isMaster) { workers.delete(worker.id); } else if (code > 0) { // Worker was killed abnormally, likely because of a crash. - require('./lib/crashlogger')(new Error(`Worker ${worker.id} abruptly died with code ${code} and signal ${signal}`), "The main process"); + require('../lib/crashlogger')(new Error(`Worker ${worker.id} abruptly died with code ${code} and signal ${signal}`), "The main process"); // Don't delete the worker so it can be inspected if need be. } @@ -254,7 +254,7 @@ if (cluster.isMaster) { } else { // is worker // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored - global.Config = require('./config/config'); + global.Config = require('../config/config'); if (process.env.PSPORT) Config.port = +process.env.PSPORT; if (process.env.PSBINDADDR) Config.bindaddress = process.env.PSBINDADDR; @@ -290,7 +290,7 @@ if (cluster.isMaster) { if (Config.crashguard) { // graceful crash process.on('uncaughtException', err => { - require('./lib/crashlogger')(err, `Socket process ${cluster.worker.id} (${process.pid})`); + require('../lib/crashlogger')(err, `Socket process ${cluster.worker.id} (${process.pid})`); }); } @@ -305,7 +305,7 @@ if (cluster.isMaster) { try { key = fs.readFileSync(key); } catch (e) { - require('./lib/crashlogger')(new Error(`Failed to read the configured SSL private key PEM file:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); + require('../lib/crashlogger')(new Error(`Failed to read the configured SSL private key PEM file:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); } } catch (e) { console.warn('SSL private key config values will not support HTTPS server option values in the future. Please set it to use the absolute path of its PEM file.'); @@ -319,7 +319,7 @@ if (cluster.isMaster) { try { cert = fs.readFileSync(cert); } catch (e) { - require('./lib/crashlogger')(new Error(`Failed to read the configured SSL certificate PEM file:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); + require('../lib/crashlogger')(new Error(`Failed to read the configured SSL certificate PEM file:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); } } catch (e) { console.warn('SSL certificate config values will not support HTTPS server option values in the future. Please set it to use the absolute path of its PEM file.'); @@ -331,7 +331,7 @@ if (cluster.isMaster) { // In case there are additional SSL config settings besides the key and cert... appssl = require('https').createServer(Object.assign({}, Config.ssl.options, {key, cert})); } catch (e) { - require('./lib/crashlogger')(`The SSL settings are misconfigured:\n${e.stack}`, `Socket process ${cluster.worker.id} (${process.pid})`); + require('../lib/crashlogger')(`The SSL settings are misconfigured:\n${e.stack}`, `Socket process ${cluster.worker.id} (${process.pid})`); } } } @@ -413,7 +413,7 @@ if (cluster.isMaster) { // @ts-ignore options.faye_server_options = {extensions: [deflate]}; } catch (e) { - require('./lib/crashlogger')(new Error("Dependency permessage-deflate is not installed or is otherwise unaccessable. No message compression will take place until server restart."), "Sockets"); + require('../lib/crashlogger')(new Error("Dependency permessage-deflate is not installed or is otherwise unaccessable. No message compression will take place until server restart."), "Sockets"); } } @@ -716,5 +716,5 @@ if (cluster.isMaster) { console.log(`Test your server at http://${Config.bindaddress === '0.0.0.0' ? 'localhost' : Config.bindaddress}:${Config.port}`); - require('./lib/repl').start(`sockets-${cluster.worker.id}-${process.pid}`, cmd => eval(cmd)); + require('../lib/repl').start(`sockets-${cluster.worker.id}-${process.pid}`, cmd => eval(cmd)); } diff --git a/static/404.html b/server/static/404.html similarity index 100% rename from static/404.html rename to server/static/404.html diff --git a/static/index.html b/server/static/index.html similarity index 100% rename from static/index.html rename to server/static/index.html diff --git a/team-validator-async.js b/server/team-validator-async.js similarity index 87% rename from team-validator-async.js rename to server/team-validator-async.js index dcab7b8068..e6c9252216 100644 --- a/team-validator-async.js +++ b/server/team-validator-async.js @@ -32,7 +32,7 @@ class ValidatorAsync { * Process manager *********************************************************/ -const QueryProcessManager = require('./lib/process-manager').QueryProcessManager; +const QueryProcessManager = require('../lib/process-manager').QueryProcessManager; /**@type {QueryProcessManager} */ // @ts-ignore @@ -44,7 +44,7 @@ const PM = new QueryProcessManager(module, async message => { try { problems = TeamValidator(formatid).validateTeam(parsedTeam, removeNicknames); } catch (err) { - require('./lib/crashlogger')(err, 'A team validation', { + require('../lib/crashlogger')(err, 'A team validation', { formatid: formatid, team: team, }); @@ -63,8 +63,8 @@ const PM = new QueryProcessManager(module, async message => { if (!PM.isParentProcess) { // This is a child process! // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored - global.Config = require('./config/config'); - global.TeamValidator = require('./sim/team-validator'); + global.Config = require('../config/config'); + global.TeamValidator = require('../sim/team-validator'); // @ts-ignore ??? global.Monitor = { /** @@ -88,11 +88,11 @@ if (!PM.isParentProcess) { }); } - global.Dex = require('./sim/dex').includeData(); + global.Dex = require('../sim/dex').includeData(); global.toId = Dex.getId; global.Chat = require('./chat'); - require('./lib/repl').start(`team-validator-${process.pid}`, cmd => eval(cmd)); + require('../lib/repl').start(`team-validator-${process.pid}`, cmd => eval(cmd)); } else { PM.spawn(global.Config ? Config.validatorprocesses : 1); } diff --git a/tournaments/generator-elimination.js b/server/tournaments/generator-elimination.js similarity index 100% rename from tournaments/generator-elimination.js rename to server/tournaments/generator-elimination.js diff --git a/tournaments/generator-round-robin.js b/server/tournaments/generator-round-robin.js similarity index 100% rename from tournaments/generator-round-robin.js rename to server/tournaments/generator-round-robin.js diff --git a/tournaments/index.js b/server/tournaments/index.js similarity index 100% rename from tournaments/index.js rename to server/tournaments/index.js diff --git a/tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js b/server/tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js similarity index 100% rename from tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js rename to server/tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js diff --git a/users.js b/server/users.js similarity index 99% rename from users.js rename to server/users.js index 8d3f09643b..f9a554ad05 100644 --- a/users.js +++ b/server/users.js @@ -38,7 +38,7 @@ const PERMALOCK_CACHE_TIME = 30 * 24 * 60 * 60 * 1000; const DEFAULT_TRAINER_SPRITES = [1, 2, 101, 102, 169, 170, 265, 266]; -const FS = require('./lib/fs'); +const FS = require('../lib/fs'); /********************************************************* * Utility functions diff --git a/verifier.js b/server/verifier.js similarity index 87% rename from verifier.js rename to server/verifier.js index f01600bcf9..d325e6dbef 100644 --- a/verifier.js +++ b/server/verifier.js @@ -20,7 +20,7 @@ const crypto = require('crypto'); * Process manager *********************************************************/ -const QueryProcessManager = require('./lib/process-manager').QueryProcessManager; +const QueryProcessManager = require('../lib/process-manager').QueryProcessManager; /**@type {QueryProcessManager} */ // @ts-ignore @@ -38,8 +38,8 @@ const PM = new QueryProcessManager(module, async ({data, signature}) => { if (!PM.isParentProcess) { // This is a child process! // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored - global.Config = require('./config/config'); - require('./lib/repl').start('verifier', /** @param {string} cmd */ cmd => eval(cmd)); + global.Config = require('../config/config'); + require('../lib/repl').start('verifier', /** @param {string} cmd */ cmd => eval(cmd)); } else { PM.spawn(global.Config ? Config.verifierprocesses : 1); } diff --git a/sim/dex.js b/sim/dex.js index 0d39bb194c..47ffd71e5a 100644 --- a/sim/dex.js +++ b/sim/dex.js @@ -36,7 +36,7 @@ const path = require('path'); const Data = require('./dex-data'); const DATA_DIR = path.resolve(__dirname, '../data'); -const MODS_DIR = path.resolve(__dirname, '../mods'); +const MODS_DIR = path.resolve(__dirname, '../data/mods'); const FORMATS = path.resolve(__dirname, '../config/formats'); /** @type {{[mod: string]: ModdedDex}} */ diff --git a/test/application/ladders-matchmaker.js b/test/application/ladders-matchmaker.js index 854c68f5d3..6652a064c6 100644 --- a/test/application/ladders-matchmaker.js +++ b/test/application/ladders-matchmaker.js @@ -2,7 +2,7 @@ const assert = require('assert'); -global.Ladders = require('../../ladders'); +global.Ladders = require('../../server/ladders'); const {Connection, User} = require('../../dev-tools/users-utils'); describe('Matchmaker', function () { diff --git a/test/chat-plugins/trivia.js b/test/chat-plugins/trivia.js index 9b403ba541..b2a387bc44 100644 --- a/test/chat-plugins/trivia.js +++ b/test/chat-plugins/trivia.js @@ -34,7 +34,7 @@ describe('Trivia', function () { // it makes reference to global.Config in the modules outermost scope, // which makes the module fail to be loaded. Within the scope of thess // unit test blocks however, Config is defined. - const trivia = require('../../chat-plugins/trivia'); + const trivia = require('../../server/chat-plugins/trivia'); Trivia = trivia.Trivia; FirstModeTrivia = trivia.FirstModeTrivia; TimerModeTrivia = trivia.TimerModeTrivia; diff --git a/test/main.js b/test/main.js index 19547c45a9..493295f118 100644 --- a/test/main.js +++ b/test/main.js @@ -42,7 +42,7 @@ before('initialization', function () { require('../lib/repl').start = noop; // Start the server. - require('../app'); + require('../server'); LoginServer.disabled = true; diff --git a/tsconfig.json b/tsconfig.json index 2c9697497b..0b60219db8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ }, "types": ["node"], "exclude": [ - "./mods/gen1/pokedex.js" + "./data/mods/gen1/pokedex.js" ], "include": [ "./config/formats.js", @@ -21,37 +21,37 @@ "./dev-tools/node.d.ts", "./sim/*.js", "./lib/*.js", - "./dnsbl.js", - "./ladders-local.js", - "./ladders-remote.js", - "./ladders.js", - "./mods/*/*", - "./monitor.js", - "./loginserver.js", - "./rooms.js", - "./roomlogs.js", - "./chat-formatter.js", - "./room-game.js", - "./room-battle.js", - "./process-manager.js", - "./team-validator-async.js", - "./verifier.js", - "./chat.js", - "./users.js", - "./chat-plugins/chat-monitor.js", - "./chat-plugins/daily-spotlight.js", - "./chat-plugins/hangman.js", - "./chat-plugins/helptickets.js", - "./chat-plugins/mafia.js", - "./chat-plugins/mafia-data.js", - "./chat-plugins/othermetas.js", - "./chat-plugins/poll.js", - "./chat-plugins/room-faqs.js", - "./chat-plugins/thecafe.js", - "./chat-plugins/thing-of-the-day.js", - "./chat-plugins/uno.js", - "./chat-plugins/wifi.js", - "./punishments.js", - "./tournaments/generator-round-robin.js" + "./server/dnsbl.js", + "./server/ladders-local.js", + "./server/ladders-remote.js", + "./server/ladders.js", + "./data/mods/*/*", + "./server/monitor.js", + "./server/loginserver.js", + "./server/rooms.js", + "./server/roomlogs.js", + "./server/chat-formatter.js", + "./server/room-game.js", + "./server/room-battle.js", + "./server/process-manager.js", + "./server/team-validator-async.js", + "./server/verifier.js", + "./server/chat.js", + "./server/users.js", + "./server/chat-plugins/chat-monitor.js", + "./server/chat-plugins/daily-spotlight.js", + "./server/chat-plugins/hangman.js", + "./server/chat-plugins/helptickets.js", + "./server/chat-plugins/mafia.js", + "./server/chat-plugins/mafia-data.js", + "./server/chat-plugins/othermetas.js", + "./server/chat-plugins/poll.js", + "./server/chat-plugins/room-faqs.js", + "./server/chat-plugins/thecafe.js", + "./server/chat-plugins/thing-of-the-day.js", + "./server/chat-plugins/uno.js", + "./server/chat-plugins/wifi.js", + "./server/punishments.js", + "./server/tournaments/generator-round-robin.js" ] }