diff --git a/build-mod.js b/build-mod.js index c141307c..aef57612 100644 --- a/build-mod.js +++ b/build-mod.js @@ -45,7 +45,7 @@ async function build(args) { } if (args.clean) { - let splitter = /^(.*)_(\d+\.\d+\.\d+)(\.zip)?$/ + let splitter = /^(.*)_(\d+\.\d+\.\d+)(\.zip)?$/; for (let entry of await fs.readdir(args.outputDir)) { let match = splitter.exec(entry); if (match) { @@ -111,7 +111,7 @@ async function build(args) { } if (module === require.main) { - main().catch(err => { console.log(err) }); + main().catch(err => { console.log(err); }); } module.exports = { diff --git a/clusterctl.js b/clusterctl.js index 08a6a48b..27764075 100644 --- a/clusterctl.js +++ b/clusterctl.js @@ -431,7 +431,7 @@ commands.push(new Command({ let response = await link.messages.sendRcon.send(control, { instance_id: await resolveInstance(control, args.instance), command: args.command - }) + }); // Factorio includes a newline in it's response output. process.stdout.write(response.result); @@ -509,7 +509,7 @@ commands.push(new Command({ }); }], handler: async function(args, control) { - let role = await resolveRole(control, args.role) + let role = await resolveRole(control, args.role); await link.messages.deleteRole.send(control, { id: role.id }); }, })); @@ -647,7 +647,7 @@ class Control extends link.Link { } } - await this.connector.close(1001, "Control Quit") + await this.connector.close(1001, "Control Quit"); } } @@ -733,7 +733,7 @@ async function startControl() { command = commands.get(commandName); try { - await command.run(args, control) + await command.run(args, control); } catch (err) { if (err instanceof errors.CommandError) { @@ -761,7 +761,7 @@ module.exports = { _Control: Control, _commands: commands, -} +}; if (module === require.main) { diff --git a/lib/config/classes.js b/lib/config/classes.js index 6aa03f77..60e9edb6 100644 --- a/lib/config/classes.js +++ b/lib/config/classes.js @@ -73,7 +73,7 @@ class Config extends events.EventEmitter { super(); if (!this.constructor._finalized) { - throw new Error(`Cannot instantiate incomplete Config class ${this.constructor.name}`) + throw new Error(`Cannot instantiate incomplete Config class ${this.constructor.name}`); } this._groups = new Map(); @@ -177,7 +177,7 @@ class Config extends events.EventEmitter { */ group(name) { if (!this._initialized) { - throw new Error(`${this.constructor.name} instance is uninitialized`) + throw new Error(`${this.constructor.name} instance is uninitialized`); } let group = this._groups.get(name); if (!group) { @@ -263,7 +263,7 @@ class ConfigGroup { */ constructor(serializedGroup) { if (!this.constructor._finalized) { - throw new Error(`Cannot instantiate incomplete ConfigGroup class ${this.constructor.name}`) + throw new Error(`Cannot instantiate incomplete ConfigGroup class ${this.constructor.name}`); } this._fields = new Map(); @@ -287,7 +287,7 @@ class ConfigGroup { let value = null; if (typeof def.initial_value === "function") { - value = await def.initial_value() + value = await def.initial_value(); } else if (def.initial_value !== undefined) { value = def.initial_value; @@ -368,14 +368,14 @@ class ConfigGroup { try { value = JSON.parse(value); } catch (err) { - throw new InvalidValue(`Error parsing value for ${name}: ${err.message}`) + throw new InvalidValue(`Error parsing value for ${name}: ${err.message}`); } } } if (value === null) { if (!def.optional) { - throw new InvalidValue(`Field ${name} cannot be null`) + throw new InvalidValue(`Field ${name} cannot be null`); } } else { @@ -540,11 +540,11 @@ class ConfigGroup { */ static define(item) { if (this._finalized) { - throw new Error(`Cannot define field for ConfigGroup class ${this.name} after it has been finalized`) + throw new Error(`Cannot define field for ConfigGroup class ${this.name} after it has been finalized`); } if (basicType(this.groupName) !== "string") { - throw new Error(`Expected ConfigGroup class ${this.name} to have the groupName property set to a string`) + throw new Error(`Expected ConfigGroup class ${this.name} to have the groupName property set to a string`); } this._initSubclass(); @@ -556,7 +556,7 @@ class ConfigGroup { if (!itemKeys.includes(prop)) { throw new Error(`${prop} is required when defining an field`); } - }) + }); // Validate properties let validTypes = ["boolean", "string", "number", "object"]; @@ -618,7 +618,7 @@ class ConfigGroup { let computed = Object.assign({ optional: false, fullName: `${this.groupName}.${item.name}`, - }, item) + }, item); if (!computed.optional && computed.initial_value === undefined) { throw new Error(`Non-optional field ${item.name} needs an initial_value`); @@ -632,7 +632,7 @@ class ConfigGroup { */ static finalize() { if (basicType(this.groupName) !== "string") { - throw new Error(`Expected ConfigGroup class ${this.name} to have the groupName property set to a string`) + throw new Error(`Expected ConfigGroup class ${this.name} to have the groupName property set to a string`); } this._initSubclass(); @@ -672,4 +672,4 @@ module.exports = { Config, ConfigGroup, PluginConfigGroup, -} +}; diff --git a/lib/config/definitions.js b/lib/config/definitions.js index 212c6813..3bb70c46 100644 --- a/lib/config/definitions.js +++ b/lib/config/definitions.js @@ -15,7 +15,7 @@ const classes = require("./classes"); * @memberof module:lib/config */ class MasterGroup extends classes.ConfigGroup { } -MasterGroup.groupName = "master" +MasterGroup.groupName = "master"; MasterGroup.define({ name: "database_directory", title: "Database directory", @@ -189,7 +189,7 @@ SlaveConfig.registerGroup(SlaveGroup); * @memberof module:lib/config */ class InstanceGroup extends classes.ConfigGroup { } -InstanceGroup.groupName = "instance" +InstanceGroup.groupName = "instance"; InstanceGroup.define({ name: "name", type: "string", @@ -438,4 +438,4 @@ module.exports = { finalizeConfigs, configCommand, handleConfigCommand, -} +}; diff --git a/lib/config/index.js b/lib/config/index.js index f591436e..6433ce70 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -6,4 +6,4 @@ module.exports = { ...require("./classes"), ...require("./definitions"), -} +}; diff --git a/lib/database.js b/lib/database.js index 4862290b..76394c3a 100644 --- a/lib/database.js +++ b/lib/database.js @@ -232,7 +232,7 @@ class ItemDatabase { checkName(name); if (!this._items.has(name)) { - return 0 + return 0; } return this._items.get(name); @@ -287,4 +287,4 @@ module.exports = { loadJsonArrayAsMap, saveMapAsJsonArray, ItemDatabase, -} +}; diff --git a/lib/errors.js b/lib/errors.js index 2b9a6bdd..4e82043c 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -71,4 +71,4 @@ module.exports = { StartupError, EnvironmentError, PluginError, -} +}; diff --git a/lib/factorio/export.js b/lib/factorio/export.js index 4c2d08cb..d1c104ec 100644 --- a/lib/factorio/export.js +++ b/lib/factorio/export.js @@ -21,7 +21,7 @@ const buildMod = require("../../build-mod"); */ async function generateExportMod(server) { let dependencies = []; - let splitter = /^(.*)_(\d+\.\d+\.\d+)(\.zip)?$/ + let splitter = /^(.*)_(\d+\.\d+\.\d+)(\.zip)?$/; for (let entry of await fs.readdir(server.writePath("mods"))) { let match = splitter.exec(entry); if (match && match[1] !== "export") { diff --git a/lib/factorio/patch.js b/lib/factorio/patch.js index 9e960ed7..3aa0f6dd 100644 --- a/lib/factorio/patch.js +++ b/lib/factorio/patch.js @@ -188,7 +188,7 @@ function reorderDependencies(modules) { if (cycle.includes(module.name)) { cycle.push(module.name); - cycle.splice(0, cycle.indexOf(module.name)) + cycle.splice(0, cycle.indexOf(module.name)); throw new Error(`Module dependency loop detected: ${cycle.join(" -> ")}`); } @@ -251,7 +251,7 @@ async function patch(savePath, modules) { let moduleInfo = { "name": module.name, "files": [], - } + }; let dirs = [[module.path, ""]]; while (dirs.length) { @@ -294,4 +294,4 @@ module.exports = { _findRoot: findRoot, _generateLoader: generateLoader, _reorderDependencies: reorderDependencies, -} +}; diff --git a/lib/factorio/server.js b/lib/factorio/server.js index 8c523777..5984983e 100644 --- a/lib/factorio/server.js +++ b/lib/factorio/server.js @@ -140,7 +140,7 @@ function randomDynamicPort() { const start = 49152; const end = 65535 + 1; - return Math.floor(Math.random() * (end - start) + start) + return Math.floor(Math.random() * (end - start) + start); } /** @@ -206,7 +206,7 @@ class LineSplitter { */ constructor(callback) { this._callback = callback; - this._partial = null + this._partial = null; } /** @@ -278,12 +278,12 @@ function parseOutput(line, source) { let output = { source, received: Date.now(), - } + }; // There are three broad categories of output from Factorio, the first kind // starts with the seconds since the server started and has a format of // " 0.704 message" - const secRegex = /^ {0,3}(\d+\.\d+) (.*)$/ + const secRegex = /^ {0,3}(\d+\.\d+) (.*)$/; let secMatch = secRegex.exec(line); if (secMatch) { output.format = "seconds"; @@ -293,7 +293,7 @@ function parseOutput(line, source) { // A seconds output has two different kinds of formats: The first is a // log level and source location and has a format of // "Level File.cpp:123: message" - const secLogRegex = /^(\w+) (\w+\.cpp:\d+): (.*)$/ + const secLogRegex = /^(\w+) (\w+\.cpp:\d+): (.*)$/; let secLogMatch = secLogRegex.exec(secContent); if (secLogMatch) { output.type = "log"; @@ -310,7 +310,7 @@ function parseOutput(line, source) { // The second category of output starts with a date stamp of the format // "yyyy-mm-dd hh:mm:ss message" } else { - const dateRegex = /^(\d{4}-\d\d-\d\d \d\d:\d\d:\d\d) (.*)$/ + const dateRegex = /^(\d{4}-\d\d-\d\d \d\d:\d\d:\d\d) (.*)$/; let dateMatch = dateRegex.exec(line); if (dateMatch) { output.format = "date"; @@ -319,7 +319,7 @@ function parseOutput(line, source) { // A date output has two general formats. The first is an action // followed by a message and has a format of "[ACTION] message" - const dateActionRegex = /^\[(\w+)\] (.*)$/ + const dateActionRegex = /^\[(\w+)\] (.*)$/; let dateActionMatch = dateActionRegex.exec(dateContent); if (dateActionMatch) { output.type = "action"; @@ -523,14 +523,14 @@ class FactorioServer extends events.EventEmitter { this.on("_autosave", function(name) { this.emit("autosave-start", name); this._runningAutosave = name; - }) + }); this.on("_saved", function() { if (this._runningAutosave) { this.emit("autosave-finished", this._runningAutosave); this._runningAutosave = null; } - }) + }); } _check(expectedStates) { @@ -566,7 +566,7 @@ class FactorioServer extends events.EventEmitter { // Prevent malicious names if (/[\\/\0]/.test(fileName)) { - throw new Error(`Invalid IPC file name '${fileName}'`) + throw new Error(`Invalid IPC file name '${fileName}'`); } if (fileName.endsWith(".json")) { @@ -575,7 +575,7 @@ class FactorioServer extends events.EventEmitter { } else { let format = fileName.slice(fileName.lastIndexOf(".") + 1); - throw new Error(`Unknown IPC file format '${format}'`) + throw new Error(`Unknown IPC file format '${format}'`); } } else { @@ -703,7 +703,7 @@ class FactorioServer extends events.EventEmitter { } else { let msg; if (code !== null) { - msg = `Factorio server unexpectedly shut down with code ${code}` + msg = `Factorio server unexpectedly shut down with code ${code}`; } else { msg = `Factorio server was unexpectedly shut by down by signal ${signal}`; } @@ -865,7 +865,7 @@ class FactorioServer extends events.EventEmitter { * @returns {string} response from server. */ async sendRcon(message, expectEmpty) { - this._check(["running", "stopping"]) + this._check(["running", "stopping"]); if (!this._rconReady) { await events.once(this, "rcon-ready"); } diff --git a/lib/fileOps/fileOps.js b/lib/fileOps/fileOps.js index ed42b794..393f5f2c 100644 --- a/lib/fileOps/fileOps.js +++ b/lib/fileOps/fileOps.js @@ -33,4 +33,4 @@ async function getNewestFile(directory, filter = (name) => true) { module.exports = { getNewestFile, -} +}; diff --git a/lib/generateSSLcert.js b/lib/generateSSLcert.js index 4fbafd1b..5657f9ae 100644 --- a/lib/generateSSLcert.js +++ b/lib/generateSSLcert.js @@ -41,4 +41,4 @@ module.exports = async function({ await fs.outputFile(sslCertPath, forge.pki.certificateToPem(cert)); log("Generated certificate in: "+(Number(hrtime()-startNs) / 1e6)+" ms"); -} +}; diff --git a/lib/hash.js b/lib/hash.js index 46e1176e..78c296b7 100644 --- a/lib/hash.js +++ b/lib/hash.js @@ -14,8 +14,8 @@ const fs = require("fs"); */ function hashStream(stream) { return new Promise(function(resolve, reject) { - let hasher = crypto.createHash("sha1") - hasher.setEncoding("hex") + let hasher = crypto.createHash("sha1"); + hasher.setEncoding("hex"); hasher.on("finish", function() { resolve(hasher.read()); }); @@ -42,4 +42,4 @@ function hashFile(path) { module.exports = { hashStream, hashFile, -} +}; diff --git a/lib/helpers.js b/lib/helpers.js index afc1f9bf..6f924b3b 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -20,4 +20,4 @@ function basicType(value) { module.exports = { basicType, -} +}; diff --git a/lib/link/connectors.js b/lib/link/connectors.js index 757bae90..28156b88 100644 --- a/lib/link/connectors.js +++ b/lib/link/connectors.js @@ -226,7 +226,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { url.pathname += "api/socket"; // Open WebSocket to master - console.log(`SOCKET | connecting to ${url}`) + console.log(`SOCKET | connecting to ${url}`); this._socket = new WebSocket(url, { // For now we do not verify TLS certificates since the default setup is @@ -261,7 +261,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { } let delay = Math.random() * this._reconnectDelay; - console.log(`SOCKET | waiting ${delay.toLocaleString("en", { maximumFractionDigits: 2 })} seconds for reconnect`) + console.log(`SOCKET | waiting ${delay.toLocaleString("en", { maximumFractionDigits: 2 })} seconds for reconnect`); this._reconnectId = setTimeout(() => { this._reconnectId = null; this._doConnect(); diff --git a/lib/link/link.js b/lib/link/link.js index caea3ad7..6ef268d0 100644 --- a/lib/link/link.js +++ b/lib/link/link.js @@ -35,7 +35,7 @@ class Link { this.processMessage(payload); } catch (err) { if (err instanceof errors.InvalidMessage) { - console.error(`Invalid message on ${this.source}-${this.target} link: ${err.message}`) + console.error(`Invalid message on ${this.source}-${this.target} link: ${err.message}`); if (err.errors) { console.error(err.errors); } @@ -243,4 +243,4 @@ class Link { module.exports = { Link, -} +}; diff --git a/lib/link/messages.js b/lib/link/messages.js index 075b7362..683c41ed 100644 --- a/lib/link/messages.js +++ b/lib/link/messages.js @@ -226,7 +226,7 @@ class Request extends Message { } -let messages = {} +let messages = {}; // Connection requests let wsLinks = ["master-control", "control-master", "master-slave", "slave-master"]; @@ -396,7 +396,7 @@ messages.assignInstance = new Request({ "serialized_config": { type: "object" }, }, forwardTo: "instance", -}) +}); messages.startInstance = new Request({ type: "start_instance", @@ -705,7 +705,7 @@ class Event extends Message { handler = async (message, event) => { await link.broadcastEventToInstance(message, event); await originalHandler.call(link, message, event); - } + }; } } @@ -860,4 +860,4 @@ module.exports = { attachAllMessages, messages, -} +}; diff --git a/lib/luaTools.js b/lib/luaTools.js index 7566e03e..73e17e6c 100644 --- a/lib/luaTools.js +++ b/lib/luaTools.js @@ -19,4 +19,4 @@ function escapeString(content) { module.exports = { escapeString, -} +}; diff --git a/lib/manager/modManager.js b/lib/manager/modManager.js index 1f6750f2..2ce2dc20 100644 --- a/lib/manager/modManager.js +++ b/lib/manager/modManager.js @@ -63,14 +63,14 @@ async function listMods(config, instance) { date:mod.date, factorio_ver:mod.factorio_version, author:mod.author, - } + }; }))); }); // Had issues earlier due to bug in node-factorio-api, see https://github.com/Danacus/node-factorio-api/issues/2 // bug is resolved, thanks to @Danacus and @brotherpot factorioAPI.getModsFromSaves().then(list => { console.log("* Mods used in save:"); - console.log(asTable(list[0].mods)) + console.log(asTable(list[0].mods)); }); }).catch(reason => { console.log("Failed to authenticate to factorio.com! Please check your connection and the username+token used for authentication in config.json"); @@ -84,8 +84,8 @@ async function listMods(config, instance) { token: config.token, require_ownership: false }).then(() => { - console.log("\r\n") - console.log("* Mods shared by all instances:") + console.log("\r\n"); + console.log("* Mods shared by all instances:"); factorioAPI.getInstalledMods().then(mods => { console.log(asTable(mods)); resolve(); @@ -128,7 +128,7 @@ async function findMods(config, searchTerm) { latest_version: mod.latest_release.version, owner:mod.owner, //license: mod.license_name, - } + }; })); resolve(result); // console.log(result); @@ -202,7 +202,7 @@ async function addMod(config, term, instance) { require_ownership: false }).then(() => { factorioAPI.searchMods(term).then(body => { - console.log(body) + console.log(body); console.log("Im gonna download: "+body[0].name + " in version: " + body[0].latest_release.version); factorioAPI.downloadMod( {name: body[0].name, version: body[0].latest_release.version}).then(()=>{ console.log("Mod downloaded"); @@ -242,7 +242,7 @@ async function removeMod(config, term, instance, force = false) { fs.unlinkSync(path.join(modDirectory, modsMatchingFilter[i])); console.log("Deleted "+modsMatchingFilter[i]); } - } else console.log("Did not delete mods.") + } else console.log("Did not delete mods."); } resolve(); } else { @@ -264,7 +264,7 @@ function downloadFromGitURL(url) { let res = syncRequest("GET", url, {"headers":{"User-Agent":"factorioClusterio"}}); let downloadUrl = JSON.parse(res.getBody())[0].assets[0].browser_download_url; let name = JSON.parse(res.getBody())[0].assets[0].name; - console.log(JSON.parse(res.getBody())) + console.log(JSON.parse(res.getBody())); if (downloadUrl) { console.log(downloadUrl); let file = fs.createWriteStream("sharedMods/"+name); @@ -291,4 +291,4 @@ module.exports = { addMod, removeMod, downloadFromGitURL, -} +}; diff --git a/lib/npmPostinstall.js b/lib/npmPostinstall.js index 66c7f351..1105586a 100644 --- a/lib/npmPostinstall.js +++ b/lib/npmPostinstall.js @@ -76,7 +76,7 @@ let downloadList = [ url: "https://fonts.googleapis.com/css?family=Roboto", file: "static/external/css/Roboto.css", }, -] +]; // initiate folder creations and downloads function processMkdirRecursive(callback){ diff --git a/lib/objectOps.js b/lib/objectOps.js index 23053af3..59bf6cec 100644 --- a/lib/objectOps.js +++ b/lib/objectOps.js @@ -17,7 +17,7 @@ a == c; // false */ module.exports.deepclone = function(obj){ return JSON.parse(JSON.stringify(obj)); -} +}; /** Checks if a string is valid JSON using try/catch. If passed an object it will always return true. @param {string} string to verify @@ -31,7 +31,7 @@ objectOps.isJSON(JSON.stringify({"thingy":"that is an object"})); // true */ module.exports.isJSON = function(string){ let stringIsJson = false; - let x + let x; try { x = JSON.parse(string); } catch (e){ @@ -41,4 +41,4 @@ module.exports.isJSON = function(string){ stringIsJson = true; } return stringIsJson; -} +}; diff --git a/lib/prometheus.js b/lib/prometheus.js index a933ad35..ef1ab3b1 100644 --- a/lib/prometheus.js +++ b/lib/prometheus.js @@ -46,7 +46,7 @@ function escapeLabelValue(value) { } function labelsToKey(labels, metricLabels) { - let items = [] + let items = []; if (labels.length === 1 && typeof labels[0] === "object") { labels = labels[0]; for (let name of metricLabels) { @@ -170,7 +170,7 @@ class ValueCollector extends Collector { return candidate.get(name) === value; }); if (hasLabels) { - mapping.delete(key) + mapping.delete(key); } } } @@ -208,7 +208,7 @@ class CounterChild extends ValueCollectorChild { throw new Error("Expected value to be a positive number"); } - this._values.set(this._key, this._values.get(this._key) + value) + this._values.set(this._key, this._values.get(this._key) + value); } } @@ -224,19 +224,19 @@ class Counter extends ValueCollector { class GaugeChild extends ValueCollectorChild { inc(value = 1) { - this._values.set(this._key, this._values.get(this._key) + value) + this._values.set(this._key, this._values.get(this._key) + value); } dec(value = 1) { - this._values.set(this._key, this._values.get(this._key) - value) + this._values.set(this._key, this._values.get(this._key) - value); } set(value) { - this._values.set(this._key, value) + this._values.set(this._key, value); } setToCurrentTime() { - this._values.set(this._key, Date.now() / 1000) + this._values.set(this._key, Date.now() / 1000); } } @@ -323,7 +323,7 @@ async function* expositionLines(resultsIterator) { if (first) { first = false; } else { - yield "\n" + yield "\n"; } yield `# HELP ${result.metric.name} ${escapeHelp(result.metric.help)}\n`; @@ -395,7 +395,7 @@ function deserializeResult(serializedResult) { serializedResult.metric.labels, ), samples: new Map(serializedResult.samples), - } + }; } let defaultCollectors = {}; diff --git a/lib/users.js b/lib/users.js index 4cc855fb..cc33df30 100644 --- a/lib/users.js +++ b/lib/users.js @@ -53,7 +53,7 @@ function definePermission({ name, title, description, grantByDefault=false }) { } if (permissions.has(name)) { - throw new Error(`Permission '${name}' is already defined`) + throw new Error(`Permission '${name}' is already defined`); } permissions.set(name, new Permission(name, title, description, grantByDefault)); diff --git a/master.js b/master.js index c6388aab..7e8b4df0 100644 --- a/master.js +++ b/master.js @@ -126,11 +126,11 @@ const wsActiveSlavesGauge = new prometheus.Gauge( async function getMetrics(req, res, next) { endpointHitCounter.labels(req.route.path).inc(); - let results = [] + let results = []; let pluginResults = await plugin.invokeHook(masterPlugins, "onMetrics"); for (let metricIterator of pluginResults) { for await (let metric of metricIterator) { - results.push(metric) + results.push(metric); } } @@ -314,7 +314,7 @@ async function loadUsers(databaseDirectory, file) { */ function createUser(name) { if (db.users.has(name)) { - throw new Error(`User '${name}' already exists`) + throw new Error(`User '${name}' already exists`); } let defaultRoleId = masterConfig.get("master.default_role_id"); @@ -475,7 +475,7 @@ class BaseConnection extends link.Link { throw new errors.RequestError("Slave containing instance is not connected"); } if (request.plugin && !connection.plugins.has(request.plugin)) { - throw new errors.RequestError(`Slave containing instance does not have ${request.plugin} plugin`) + throw new errors.RequestError(`Slave containing instance does not have ${request.plugin} plugin`); } return await request.send(connection, message.data); @@ -529,7 +529,7 @@ class BaseConnection extends link.Link { let controlConnections = new Array(); class ControlConnection extends BaseConnection { constructor(registerData, connector, user) { - super("control", connector) + super("control", connector); this._agent = registerData.agent; this._version = registerData.version; @@ -617,7 +617,7 @@ class ControlConnection extends BaseConnection { let instanceConfig = new config.InstanceConfig(); await instanceConfig.load(message.data.serialized_config); - let instanceId = instanceConfig.get("instance.id") + let instanceId = instanceConfig.get("instance.id"); if (db.instances.has(instanceId)) { throw new errors.RequestError(`Instance with ID ${instanceId} already exists`); } @@ -644,7 +644,7 @@ class ControlConnection extends BaseConnection { return { serialized_config: instance.config.serialize(), - } + }; } async updateInstanceConfig(instance) { @@ -708,7 +708,7 @@ class ControlConnection extends BaseConnection { throw new errors.RequestError("Target slave is not connected to the master server"); } - instance.config.set("instance.assigned_slave", message.data.slave_id) + instance.config.set("instance.assigned_slave", message.data.slave_id); return await link.messages.assignInstance.send(connection, { instance_id: instance.config.get("instance.id"), @@ -836,7 +836,7 @@ class ControlConnection extends BaseConnection { } }; this.connector._socket.clusterio_ignore_dump = true; - debugEvents.on("message", this.ws_dumper) + debugEvents.on("message", this.ws_dumper); } } @@ -883,7 +883,7 @@ class SlaveConnection extends BaseConnection { let instance = db.instances.get(message.data.instance_id); let prev = instance.status; instance.status = "initialized"; - console.log(`Clusterio | Instance ${instance.config.get("instance.name")} Initialized`) + console.log(`Clusterio | Instance ${instance.config.get("instance.name")} Initialized`); await plugin.invokeHook(masterPlugins, "onInstanceStatusChanged", instance, prev); } @@ -891,7 +891,7 @@ class SlaveConnection extends BaseConnection { let instance = db.instances.get(message.data.instance_id); let prev = instance.status; instance.status = "running"; - console.log(`Clusterio | Instance ${instance.config.get("instance.name")} Started`) + console.log(`Clusterio | Instance ${instance.config.get("instance.name")} Started`); await plugin.invokeHook(masterPlugins, "onInstanceStatusChanged", instance, prev); } @@ -899,7 +899,7 @@ class SlaveConnection extends BaseConnection { let instance = db.instances.get(message.data.instance_id); let prev = instance.status; instance.status = "stopped"; - console.log(`Clusterio | Instance ${instance.config.get("instance.name")} Stopped`) + console.log(`Clusterio | Instance ${instance.config.get("instance.name")} Stopped`); await plugin.invokeHook(masterPlugins, "onInstanceStatusChanged", instance, prev); } @@ -919,7 +919,7 @@ class SlaveConnection extends BaseConnection { let instanceConfig = new config.InstanceConfig(); await instanceConfig.load(instance.serialized_config); - let masterInstance = db.instances.get(instanceConfig.get("instance.id")) + let masterInstance = db.instances.get(instanceConfig.get("instance.id")); if (masterInstance) { // Already have this instance, update state instead if (masterInstance.status !== instance.status) { @@ -1022,7 +1022,7 @@ class WebSocketServerConnector extends link.WebSocketBaseConnector { * Sends the ready message over the socket to initiate the session. */ ready(sessionToken) { - this._heartbeatInterval = masterConfig.get("master.heartbeat_interval") + this._heartbeatInterval = masterConfig.get("master.heartbeat_interval"); this._socket.send(JSON.stringify({ seq: null, type: "ready", @@ -1053,7 +1053,7 @@ class WebSocketServerConnector extends link.WebSocketBaseConnector { this._timeoutId = null; } - this._heartbeatInterval = masterConfig.get("master.heartbeat_interval") + this._heartbeatInterval = masterConfig.get("master.heartbeat_interval"); this._socket.send(JSON.stringify({ seq: null, type: "continue", @@ -1078,7 +1078,7 @@ class WebSocketServerConnector extends link.WebSocketBaseConnector { clearTimeout(this._timeoutId); } - this._timeoutId = setTimeout(() => { this._timedOut() }, timeout * 1000); + this._timeoutId = setTimeout(() => { this._timedOut(); }, timeout * 1000); this._timeout = timeout; } @@ -1117,7 +1117,7 @@ class WebSocketServerConnector extends link.WebSocketBaseConnector { } else { this._state = "handshake"; this.emit("drop"); - this._timeoutId = setTimeout(() => { this._timedOut() }, this._timeout * 1000); + this._timeoutId = setTimeout(() => { this._timedOut(); }, this._timeout * 1000); } this.stopHeartbeat(); @@ -1172,7 +1172,7 @@ class WebSocketServerConnector extends link.WebSocketBaseConnector { this.stopHeartbeat(); this._state = "closing"; this._socket.close(code, reason); - await events.once(this, "close") + await events.once(this, "close"); } } @@ -1283,7 +1283,7 @@ async function handleHandshake(message, socket, req, attachHandler) { } connector.continue(socket, data.last_seq); - return + return; } if (stopAcceptingNewSessions) { @@ -1386,7 +1386,7 @@ async function loadPlugins(pluginInfos) { plugins.set(pluginInfo.name, masterPlugin); } catch (err) { - throw new errors.PluginError(pluginInfo.name, err) + throw new errors.PluginError(pluginInfo.name, err); } console.log(`Clusterio | Loaded plugin ${pluginInfo.name} in ${Date.now() - pluginLoadStarted}ms`); @@ -1433,7 +1433,7 @@ function _setConfig(config) { * Returns the URL needed to connect to the master server. */ function getMasterUrl() { - let url = masterConfig.get("master.external_address") + let url = masterConfig.get("master.external_address"); if (!url) { if (masterConfig.get("master.https_port")) { url = `https://localhost:${masterConfig.get("master.https_port")}/`; @@ -1472,7 +1472,7 @@ async function startServer() { nargs: 1, default: "config-control.json", }); }) - .demandCommand(1, "You need to specify a command to run") + .demandCommand(1, "You need to specify a command to run"); }) .command("run", "Run master server") .demandCommand(1, "You need to specify a command to run") @@ -1481,7 +1481,7 @@ async function startServer() { ; console.log("Loading Plugin info"); - let pluginInfos = await plugin.loadPluginInfos("plugins") + let pluginInfos = await plugin.loadPluginInfos("plugins"); config.registerPluginConfigGroups(pluginInfos); config.finalizeConfigs(); @@ -1554,7 +1554,7 @@ async function startServer() { // If we get here the command was run - let secondSigint = false + let secondSigint = false; process.on("SIGINT", () => { if (secondSigint) { console.log("Caught second interrupt, terminating immediately"); @@ -1624,7 +1624,7 @@ async function startServer() { httpsServer = require("https").createServer({ key: privateKey, cert: certificate - }, app) + }, app); await listen(httpsServer, httpsPort); console.log("Listening for HTTPS on port %s...", httpsServer.address().port); } @@ -1641,7 +1641,7 @@ module.exports = { _ControlConnection: ControlConnection, _slaveConnections: slaveConnections, _SlaveConnection: SlaveConnection, -} +}; if (module === require.main) { console.warn(` diff --git a/plugins/global_chat/info.js b/plugins/global_chat/info.js index 0ae46d37..43c90707 100644 --- a/plugins/global_chat/info.js +++ b/plugins/global_chat/info.js @@ -20,4 +20,4 @@ module.exports = { }, }), }, -} +}; diff --git a/plugins/global_chat/instance.js b/plugins/global_chat/instance.js index cf6cfbee..a810fd6b 100644 --- a/plugins/global_chat/instance.js +++ b/plugins/global_chat/instance.js @@ -57,4 +57,4 @@ module.exports = { // For testing only _removeTags: removeTags, -} +}; diff --git a/plugins/global_chat/test/plugin.js b/plugins/global_chat/test/plugin.js index 0961c316..8e884277 100644 --- a/plugins/global_chat/test/plugin.js +++ b/plugins/global_chat/test/plugin.js @@ -62,6 +62,6 @@ describe("global_chat plugin", function() { } assert(count > 0, "no lines were tested"); }); - }) + }); }); }); diff --git a/plugins/research_sync/info.js b/plugins/research_sync/info.js index 2e184014..b4a06549 100644 --- a/plugins/research_sync/info.js +++ b/plugins/research_sync/info.js @@ -77,4 +77,4 @@ module.exports = { }, }), }, -} +}; diff --git a/plugins/research_sync/instance.js b/plugins/research_sync/instance.js index ffbeb3a0..8012c69d 100644 --- a/plugins/research_sync/instance.js +++ b/plugins/research_sync/instance.js @@ -5,8 +5,8 @@ const luaTools = require("lib/luaTools"); function unexpectedError(err) { - console.log("Unexpected error in research_sync") - console.log("---------------------------------") + console.log("Unexpected error in research_sync"); + console.log("---------------------------------"); console.log(err); } @@ -78,4 +78,4 @@ class InstancePlugin extends plugin.BaseInstancePlugin { module.exports = { InstancePlugin, -} +}; diff --git a/plugins/research_sync/master.js b/plugins/research_sync/master.js index fa114503..7ab97a6f 100644 --- a/plugins/research_sync/master.js +++ b/plugins/research_sync/master.js @@ -38,7 +38,7 @@ class MasterPlugin extends plugin.BaseMasterPlugin { } broadcastProgress() { - let techs = [] + let techs = []; for (let name of this.progressToBroadcast) { let tech = this.technologies.get(name); if (tech.progress) { @@ -58,7 +58,7 @@ class MasterPlugin extends plugin.BaseMasterPlugin { let tech = this.technologies.get(name); if (!tech) { tech = { level, progress: 0, researched: false }; - this.technologies.set(name, tech) + this.technologies.set(name, tech); // Ignore contribution to already researched technologies } else if (tech.level > level || tech.level === level && tech.researched) { @@ -96,7 +96,7 @@ class MasterPlugin extends plugin.BaseMasterPlugin { let tech = this.technologies.get(name); if (!tech || tech.level <= level) { this.progressToBroadcast.delete(name); - this.technologies.set(name, { level, progress: null, researched: true }) + this.technologies.set(name, { level, progress: null, researched: true }); } } @@ -151,10 +151,10 @@ class MasterPlugin extends plugin.BaseMasterPlugin { let technologies = []; for (let [name, tech] of this.technologies) { - technologies.push([ name, tech.level, tech.progress, tech.researched ]) + technologies.push([ name, tech.level, tech.progress, tech.researched ]); } - return { technologies } + return { technologies }; } } @@ -184,4 +184,4 @@ async function saveTechnologies(masterConfig, technologies) { module.exports = { MasterPlugin -} +}; diff --git a/plugins/statistics_exporter/info.js b/plugins/statistics_exporter/info.js index a1bf60da..b1f3de3b 100644 --- a/plugins/statistics_exporter/info.js +++ b/plugins/statistics_exporter/info.js @@ -6,4 +6,4 @@ module.exports = { description: "Exports statistics to Prometheus", version: "2.0.0-alpha", instanceEntrypoint: "instance", -} +}; diff --git a/plugins/statistics_exporter/instance.js b/plugins/statistics_exporter/instance.js index 9bc110da..3e3bb8e1 100644 --- a/plugins/statistics_exporter/instance.js +++ b/plugins/statistics_exporter/instance.js @@ -64,4 +64,4 @@ module.exports = { _instanceGameTicksTotal: instanceGameTicksTotal, _instanceForceFlowStatistics: instanceForceFlowStatistics, _instanceGameFlowStatistics: instanceGameFlowStatistics, -} +}; diff --git a/plugins/subspace_storage/dole.js b/plugins/subspace_storage/dole.js index 723c701f..a792301c 100644 --- a/plugins/subspace_storage/dole.js +++ b/plugins/subspace_storage/dole.js @@ -1,4 +1,4 @@ -const doleNN = require("./dole_nn_base") +const doleNN = require("./dole_nn_base"); const prometheus = require("lib/prometheus"); @@ -32,13 +32,13 @@ class neuralDole { items }){ // Set some storage variables for the dole divider - this.items = items - this.itemsLastTick = new Map(items._items) - this.dole = {} - this.carry = {} - this.lastRequest = {} - this.stats=[] - this.debt= {} + this.items = items; + this.itemsLastTick = new Map(items._items); + this.dole = {}; + this.carry = {}; + this.lastRequest = {}; + this.stats=[]; + this.debt= {}; } doMagic() { for (let [name, count] of this.items._items) { @@ -47,16 +47,16 @@ class neuralDole { this.dole[name], this.itemsLastTick.get(name), this.getRequestStats(name,5) - ) - this.stats[name]=this.stats[name] || [] + ); + this.stats[name]=this.stats[name] || []; this.stats[name].unshift({req:0,given:0});//stats[name][0] is the one we currently collect if (this.stats[name].length>10) this.stats[name].pop();//remove if too many samples in stats - this.dole[name] = magicData[0] + this.dole[name] = magicData[0]; // DONE handle magicData[1] for graphing for our users prometheusNNDoleGauge.labels(name).set(magicData[1] || 0); } - this.itemsLastTick = new Map(this.items._items) + this.itemsLastTick = new Map(this.items._items); } divider(object) { let magicData = doleNN.Dose( @@ -68,19 +68,19 @@ class neuralDole { this.lastRequest[object.name+"_"+object.instanceID+"_"+object.instanceName] || 0, this.getRequestStats(object.name,5), this.debt[object.name+" "+object.instanceID] || 0 - ) + ); if ((this.stats[object.name] || []).length>0) { this.stats[object.name][0].req+=Number(object.count); this.stats[object.name][0].given+=Number(magicData[0]); } - this.lastRequest[object.name+"_"+object.instanceID+"_"+object.instanceName] = object.count + this.lastRequest[object.name+"_"+object.instanceID+"_"+object.instanceName] = object.count; //0.Number of items to give in that dose //1.New dole for item X //2.New carry for item X slave Y - this.dole[object.name] = magicData[1] - this.carry[object.name+" "+object.instanceID] = magicData[2] - this.debt[object.name+" "+object.instanceID] = magicData[3] + this.dole[object.name] = magicData[1]; + this.carry[object.name+" "+object.instanceID] = magicData[2]; + this.debt[object.name+" "+object.instanceID] = magicData[3]; // Remove item from DB and send it this.items.removeItem(object.name, magicData[0]); @@ -111,7 +111,7 @@ function doleDivider({ if (itemCount > object.count) { //If successful, increase dole _doleDivisionFactor[object.name] = Math.max((_doleDivisionFactor[object.name]||0)||1, 1) - 1; - items.removeItem(object.name, object.count) + items.removeItem(object.name, object.count); prometheusDoleFactorGauge.labels(object.name).set(_doleDivisionFactor[object.name] || 0); return object.count; @@ -127,4 +127,4 @@ function doleDivider({ module.exports = { doleDivider, neuralDole -} \ No newline at end of file +}; \ No newline at end of file diff --git a/plugins/subspace_storage/dole_nn_base.js b/plugins/subspace_storage/dole_nn_base.js index ba00188c..a5c90bd0 100644 --- a/plugins/subspace_storage/dole_nn_base.js +++ b/plugins/subspace_storage/dole_nn_base.js @@ -7,17 +7,17 @@ function sigmoid0(x) function sigmoid1(x) { if (x>=0.0) { - return 1.0 + return 1.0; } else { - return 0.0 + return 0.0; } } function sigmoid2(x) { if (x>=0.0){ - return x + return x; } else { - return 0.0 + return 0.0; } } function sigmoid3(x) @@ -116,4 +116,4 @@ outputs[1]=sigmoid3(outputs[1]); return [sigmoid0(outputs[0]),avg]; } -module.exports = {Dose,Tick} \ No newline at end of file +module.exports = {Dose,Tick}; \ No newline at end of file diff --git a/plugins/subspace_storage/info.js b/plugins/subspace_storage/info.js index dbbfc683..c6d89f31 100644 --- a/plugins/subspace_storage/info.js +++ b/plugins/subspace_storage/info.js @@ -50,7 +50,7 @@ const items = { { type: "integer" }, ], }, -} +}; module.exports = { name: "subspace_storage", @@ -103,4 +103,4 @@ module.exports = { }, }), }, -} +}; diff --git a/plugins/subspace_storage/instance.js b/plugins/subspace_storage/instance.js index 7be30d1b..40486e9c 100644 --- a/plugins/subspace_storage/instance.js +++ b/plugins/subspace_storage/instance.js @@ -4,8 +4,8 @@ const plugin = require("lib/plugin"); const luaTools = require("lib/luaTools"); function unexpectedError(err) { - console.log("Unexpected error in subspace_storage") - console.log("------------------------------------") + console.log("Unexpected error in subspace_storage"); + console.log("------------------------------------"); console.log(err); } @@ -44,7 +44,7 @@ class InstancePlugin extends plugin.BaseInstancePlugin { }); if (this.instance.config.get("subspace_storage.log_item_transfers")) { - console.log("Exported the following to master:") + console.log("Exported the following to master:"); console.log(items); } } @@ -62,7 +62,7 @@ class InstancePlugin extends plugin.BaseInstancePlugin { } if (this.instance.config.get("subspace_storage.log_item_transfers")) { - console.log("Imported following from master:") + console.log("Imported following from master:"); console.log(response.items); } diff --git a/plugins/subspace_storage/master.js b/plugins/subspace_storage/master.js index b688fb14..ea254b2b 100644 --- a/plugins/subspace_storage/master.js +++ b/plugins/subspace_storage/master.js @@ -47,8 +47,8 @@ class MasterPlugin extends plugin.BaseMasterPlugin { this.itemsLastUpdate = new Map(this.items._items.entries()); this.autosaveId = setInterval(() => { saveDatabase(this.master.config, this.items).catch(err => { - console.log("Unexpected error autosaving items in subspace_storage") - console.log("-----------------------------------------------------") + console.log("Unexpected error autosaving items in subspace_storage"); + console.log("-----------------------------------------------------"); console.log(err); }); }, this.master.config.get("subspace_storage.autosave_interval") * 1000); @@ -56,7 +56,7 @@ class MasterPlugin extends plugin.BaseMasterPlugin { this.neuralDole = new dole.neuralDole({ items: this.items }); this.doleMagicId = setInterval(() => { if (this.master.config.get("subspace_storage.division_method") === "neural_dole") { - this.neuralDole.doMagic() + this.neuralDole.doMagic(); } }, 1000); @@ -97,7 +97,7 @@ class MasterPlugin extends plugin.BaseMasterPlugin { this.updateStorage(); if (this.master.config.get("subspace_storage.log_item_transfers")) { - console.log(`Imported the following from ${message.data.instance_id}:`) + console.log(`Imported the following from ${message.data.instance_id}:`); console.log(message.data.items); } } @@ -166,7 +166,7 @@ class MasterPlugin extends plugin.BaseMasterPlugin { return { items: itemsRemoved, - } + }; } onMetrics() { diff --git a/plugins/subspace_storage/routes.js b/plugins/subspace_storage/routes.js index 301cc371..8e7fb526 100644 --- a/plugins/subspace_storage/routes.js +++ b/plugins/subspace_storage/routes.js @@ -53,4 +53,4 @@ function addApiRoutes(app, items, endpointHitCounter) { module.exports = { addWebRoutes, addApiRoutes, -} +}; diff --git a/plugins/subspace_storage/static/storage.js b/plugins/subspace_storage/static/storage.js index eecee971..966c9a24 100644 --- a/plugins/subspace_storage/static/storage.js +++ b/plugins/subspace_storage/static/storage.js @@ -11,7 +11,7 @@ function drawcontents(data) { const search = new RegExp(searchArgs, "i"); data = data.filter(function(item) { return search.test(item.name); - }) + }); sortByKey(data, "count"); @@ -76,7 +76,7 @@ function updateInventory() { let data = JSON.parse(xmlhttp.responseText); drawcontents(data); } - } + }; xmlhttp.open("GET", `${root}api/inventory`, true); xmlhttp.send(); } diff --git a/plugins/subspace_storage/test/routes.js b/plugins/subspace_storage/test/routes.js index 3a860681..80ba6f54 100644 --- a/plugins/subspace_storage/test/routes.js +++ b/plugins/subspace_storage/test/routes.js @@ -18,7 +18,7 @@ describe("subspace_storage endpoints", function() { inventory.forEach(itemStack => { if(itemStack.name == "steel-plate" && itemStack.count >= 20) contains20SteelPlate = true; }); - assert(contains20SteelPlate, "Please ensure there are at least 20 steel plate in the inventory") + assert(contains20SteelPlate, "Please ensure there are at least 20 steel plate in the inventory"); }); }); }); diff --git a/slave.js b/slave.js index dfb5135a..f340a6b1 100644 --- a/slave.js +++ b/slave.js @@ -69,7 +69,7 @@ function applyAsConfig(name) { } catch (err) { console.error(`Error applying server setting ${name}`, err); } - } + }; } const serverSettingsActions = { @@ -139,10 +139,10 @@ class Instance extends link.Link{ this.server.sendRcon = (...args) => { instanceRconCommandsCounter.labels(String(this.config.get("instance.id"))).inc(); return originalSendRcon.call(this.server, ...args); - } + }; this.server.on("output", (output) => { - link.messages.instanceOutput.send(this, { instance_id: this.config.get("instance.id"), output }) + link.messages.instanceOutput.send(this, { instance_id: this.config.get("instance.id"), output }); plugin.invokeHook(this.plugins, "onOutput", output); }); @@ -225,7 +225,7 @@ class Instance extends link.Link{ } } - let plugins = {} + let plugins = {}; for (let [name, plugin] of this.plugins) { plugins[name] = plugin.info.version; } @@ -326,7 +326,7 @@ class Instance extends link.Link{ // Create save if no save was found. if (saveName === null) { - console.log("Clusterio | Creating new save") + console.log("Clusterio | Creating new save"); await this.server.create("world.zip"); saveName = "world.zip"; } @@ -408,7 +408,7 @@ class Instance extends link.Link{ this.server.on("exit", () => this.notifyExit()); await this.server.start(saveName); - await this.server.disableAchievements() + await this.server.disableAchievements(); await this.updateInstanceData(); await plugin.invokeHook(this.plugins, "onStart"); @@ -459,12 +459,12 @@ class Instance extends link.Link{ } async getMetricsRequestHandler() { - let results = [] + let results = []; if (this._running) { let pluginResults = await plugin.invokeHook(this.plugins, "onMetrics"); for (let metricIterator of pluginResults) { for await (let metric of metricIterator) { - results.push(prometheus.serializeResult(metric)) + results.push(prometheus.serializeResult(metric)); } } } @@ -482,7 +482,7 @@ class Instance extends link.Link{ async startInstanceRequestHandler(message) { let saveName = message.data.save; try { - saveName = await this.prepare(saveName) + saveName = await this.prepare(saveName); } catch (err) { this.notifyExit(); throw err; @@ -536,7 +536,7 @@ class Instance extends link.Link{ }, }); if (response.statusCode !== 200) { - throw Error(`Upload failed: ${response.statusCode} ${response.statusMessage}: ${response.body}`) + throw Error(`Upload failed: ${response.statusCode} ${response.statusMessage}: ${response.body}`); } } finally { @@ -750,7 +750,7 @@ class Slave extends link.Link { setBlocking(true); console.error("ERROR: Unexpected error during shutdown"); console.error(err); - process.exit(1) + process.exit(1); }); });; }); @@ -769,7 +769,7 @@ class Slave extends link.Link { setBlocking(true); console.error("ERROR: Unexpected error during shutdown"); console.error(err); - process.exit(1) + process.exit(1); }); }); @@ -779,7 +779,7 @@ class Slave extends link.Link { setBlocking(true); console.error("ERROR: Unexpected error during shutdown"); console.error(err); - process.exit(1) + process.exit(1); }); } }); @@ -795,7 +795,7 @@ class Slave extends link.Link { async _findNewInstanceDir(name) { try { - checkFilename(name) + checkFilename(name); } catch (err) { throw new Error(`Instance name ${err.message}`); } @@ -821,7 +821,7 @@ class Slave extends link.Link { } if (request.plugin && !instanceConnection.plugins.has(request.plugin)) { - throw new errors.RequestError(`Instance ID ${instanceId} does not have ${request.plugin} plugin loaded`) + throw new errors.RequestError(`Instance ID ${instanceId} does not have ${request.plugin} plugin loaded`); } return await request.send(instanceConnection, message.data); @@ -1210,7 +1210,7 @@ async function startSlave() { let slave = new Slave(slaveConnector, slaveConfig, pluginInfos); // Handle interrupts - let secondSigint = false + let secondSigint = false; process.on("SIGINT", () => { if (secondSigint) { console.log("Caught second interrupt, terminating immediately"); diff --git a/test/integration/index.js b/test/integration/index.js index e8fe86ce..b4284723 100644 --- a/test/integration/index.js +++ b/test/integration/index.js @@ -67,7 +67,7 @@ async function exec(...args) { } async function sendRcon(instanceId, command) { - let response = await link.messages.sendRcon.send(control, { instance_id: instanceId, command }) + let response = await link.messages.sendRcon.send(control, { instance_id: instanceId, command }); return response.result; } @@ -86,8 +86,8 @@ function spawn(name, cmd, waitFor) { resolve(process); } console.log(name, line); - }) - let stderr = new server._LineSplitter((line) => { console.log(name, line.toString("utf8")); }) + }); + let stderr = new server._LineSplitter((line) => { console.log(name, line.toString("utf8")); }); process.stdout.on("data", chunk => { stdout.data(chunk); }); process.stdout.on("close", () => { stdout.end(); }); process.stderr.on("data", chunk => { stderr.data(chunk); }); diff --git a/test/integration/patch.js b/test/integration/patch.js index 1101e147..ae733c37 100644 --- a/test/integration/patch.js +++ b/test/integration/patch.js @@ -9,7 +9,7 @@ const { slowTest } = require("./index"); // The server integration test is required to run before this one -require("./server") +require("./server"); describe("Integration of lib/factorio/patch", function() { describe("patch()", function() { diff --git a/test/integration/server.js b/test/integration/server.js index a68a8156..3494816d 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -149,7 +149,7 @@ describe("Integration of lib/factorio/server", function() { slowTest(this); log(".startScenario()"); - let pass = false + let pass = false; function filter(output) { if (output.message === "test_scenario init") { pass = true; diff --git a/test/lib/config/classes.js b/test/lib/config/classes.js index e094e4a2..7c99d305 100644 --- a/test/lib/config/classes.js +++ b/test/lib/config/classes.js @@ -97,13 +97,13 @@ describe("lib/config/classes", function() { enum: ["a", "b", "c"], optional: true, initial_value: "b", - } + }; TestGroup.define(field); // Generated properties field.fullName = "test_group.enum"; assert.deepEqual(TestGroup._definitions.get("enum"), field); - }) + }); }); describe("get definitions", function() { @@ -191,7 +191,7 @@ describe("lib/config/classes", function() { func: 22, bool: null, json: { valid: true }, - }}) + }}); assert.equal(testInstance.get("enum"), "c"); assert.equal(testInstance.get("test"), "blah"); @@ -218,7 +218,7 @@ describe("lib/config/classes", function() { alpha: null, beta: "decay", gamma: 99, - } + }; let testInstance = new TestGroup(); await testInstance.load(null, { name: "test_group", fields: testFields }); @@ -277,43 +277,43 @@ describe("lib/config/classes", function() { () => testInstance.set("bar", 1), new classes.InvalidField("No field named 'bar'") ); - }) + }); it("should throw if field is not in enum", function() { assert.throws( () => testInstance.set("enum", "bar"), new Error("Expected one of [a, b, c], not bar") ); - }) + }); it("should work if field is in enum", function() { testInstance.set("enum", "c"), assert.equal(testInstance.get("enum"), "c"); - }) + }); it("should throw if field is not optional", function() { assert.throws( () => testInstance.set("func", null), new Error("Field func cannot be null") ); - }) + }); it("should work if field is optional", function() { testInstance.set("test", "spam"), assert.equal(testInstance.get("test"), "spam"); - }) + }); it("should throw if field is of wrong type", function() { assert.throws( () => testInstance.set("test", 1), new Error("Expected type of test to be string, not number") ); - }) + }); it("should treat empty string as null", function() { testInstance.set("test", ""), assert.equal(testInstance.get("test"), null); - }) + }); it("should auto convert string to boolean if possible", function() { testInstance.set("bool", "true"); @@ -374,14 +374,14 @@ describe("lib/config/classes", function() { () => testInstance.setProp("bar", 1), new classes.InvalidField("No field named 'bar'") ); - }) + }); it("should throw if field is not an object", function() { assert.throws( () => testInstance.setProp("enum", "a"), new classes.InvalidField("Cannot set property on non-object field 'enum'") ); - }) + }); it("should work if field is an object", function() { testInstance.set("json", { prev: 32, test: false }); @@ -461,7 +461,7 @@ describe("lib/config/classes", function() { await testInstance.init(); assert.equal(testInstance.get("alpha.foo"), null); assert.deepEqual(testInstance.get("beta.bar"), {}); - }) + }); }); describe(".serialize()", function() { @@ -480,7 +480,7 @@ describe("lib/config/classes", function() { } ] }); - }) + }); }); describe(".load()", function() { @@ -522,7 +522,7 @@ describe("lib/config/classes", function() { name: "beta", fields: { bar: { value: 20 }}, } - ] + ]; let testInstance = new TestConfig(); await testInstance.load({ groups: testGroups }); @@ -562,7 +562,7 @@ describe("lib/config/classes", function() { } ], }); - }) + }); }); describe(".group()", function() { @@ -580,14 +580,14 @@ describe("lib/config/classes", function() { let testInstance = new TestConfig(); await testInstance.init(); - assert.throws(() => testInstance.get("invalid"), new Error("No config group named 'invalid'")) + assert.throws(() => testInstance.get("invalid"), new Error("No config group named 'invalid'")); }); it("should throw if no field is specified", async function() { let testInstance = new TestConfig(); await testInstance.init(); - assert.throws(() => testInstance.get("alpha"), new Error("No field named ''")) + assert.throws(() => testInstance.get("alpha"), new Error("No field named ''")); }); }); diff --git a/test/lib/database.js b/test/lib/database.js index 9b59e9f1..86c13472 100644 --- a/test/lib/database.js +++ b/test/lib/database.js @@ -228,13 +228,13 @@ describe("lib/database", function() { let items = new database.ItemDatabase(); items.addItem("a", 10); assert.deepEqual(items._items, new Map([["a", 10]])); - }) + }); it("should add an existing item", function() { let items = new database.ItemDatabase({"a": 10}); items.addItem("a", 10); assert.deepEqual(items._items, new Map([["a", 20]])); - }) + }); it("should throw on invalid name", function() { let items = new database.ItemDatabase(); @@ -262,13 +262,13 @@ describe("lib/database", function() { let items = new database.ItemDatabase({"a": 20}); items.removeItem("a", 10); assert.deepEqual(items._items, new Map([["a", 10]])); - }) + }); it("should turn a non-existing item negative", function() { let items = new database.ItemDatabase(); items.removeItem("a", 10); assert.deepEqual(items._items, new Map([["a", -10]])); - }) + }); it("should throw on invalid name", function() { let items = new database.ItemDatabase(); diff --git a/test/lib/factorio/lines.js b/test/lib/factorio/lines.js index 0f067999..9310f16c 100644 --- a/test/lib/factorio/lines.js +++ b/test/lib/factorio/lines.js @@ -142,8 +142,8 @@ let testLines = new Map([ message: "Saving finished", } ], -]) +]); module.exports = { testLines, -} +}; diff --git a/test/lib/factorio/patch.js b/test/lib/factorio/patch.js index 7a75bc0c..21b7a5ac 100644 --- a/test/lib/factorio/patch.js +++ b/test/lib/factorio/patch.js @@ -213,7 +213,7 @@ describe("lib/factorio", function() { let zip = new jszip(); zip.file("world/control.lua", "-- unknown\n"); let zipPath = path.join("temp", "test", "patch.zip"); - await fs.outputFile(zipPath, await zip.generateAsync({type: "nodebuffer"})) + await fs.outputFile(zipPath, await zip.generateAsync({type: "nodebuffer"})); await assert.rejects( factorio.patch(zipPath, []), diff --git a/test/lib/factorio/server.js b/test/lib/factorio/server.js index fcdbbb7e..54e46034 100644 --- a/test/lib/factorio/server.js +++ b/test/lib/factorio/server.js @@ -84,7 +84,7 @@ describe("lib/factorio/server", function() { describe("randomDynamicPort()", function() { it("should return a port number", function() { - let port = factorio._randomDynamicPort() + let port = factorio._randomDynamicPort(); assert.equal(typeof port, "number"); assert(Number.isInteger(port)); assert(0 <= port && port < 2**16); @@ -203,25 +203,25 @@ describe("lib/factorio/server", function() { server._handleIpc(Buffer.from("\f$ipc:blah")), new Error('Malformed IPC line "\f$ipc:blah"') ); - }) + }); it("should throw on unknown type", async function() { await assert.rejects( server._handleIpc(Buffer.from("\f$ipc:channel??")), new Error("Unknown IPC type '?'") ); - }) + }); it("should throw on unknown file type", async function() { await assert.rejects( server._handleIpc(Buffer.from("\f$ipc:channel?ffoo.invalid")), new Error("Unknown IPC file format 'invalid'") ); - }) + }); it("should throw on file name with slash", async function() { await assert.rejects( server._handleIpc(Buffer.from("\f$ipc:channel?fa/b")), new Error("Invalid IPC file name 'a/b'") ); - }) + }); it("should load and delete json file", async function() { let filePath = server.writePath("script-output", "data.json"); await fs.outputFile(filePath, '{"data":"spam"}'); @@ -230,7 +230,7 @@ describe("lib/factorio/server", function() { let result = await waiter; assert.deepEqual(result[0], { "data": "spam" }); assert(!await fs.pathExists(filePath), "File was not deleted"); - }) + }); }); }); }); diff --git a/test/lib/generateSSLcert.js b/test/lib/generateSSLcert.js index 75f43b57..f21c6059 100644 --- a/test/lib/generateSSLcert.js +++ b/test/lib/generateSSLcert.js @@ -2,7 +2,7 @@ const assert = require("assert"); const fs = require("fs-extra"); const path = require("path"); -const generateSSLcert = require("lib/generateSSLcert") +const generateSSLcert = require("lib/generateSSLcert"); describe("generateSSLcert.js(options)", ()=>{ let testDir = path.join("temp", "test", "certTest"); diff --git a/test/lib/link/link.js b/test/lib/link/link.js index 4c1131cc..d538a9c6 100644 --- a/test/lib/link/link.js +++ b/test/lib/link/link.js @@ -97,7 +97,7 @@ describe("lib/link/link", function() { describe("._processHandler()", function() { it("should call the handler", function() { let handled = []; - testLink.setHandler("handled", (message) => handled.push(message), (message) => true) + testLink.setHandler("handled", (message) => handled.push(message), (message) => true); testLink._processHandler({ seq: 1, type: "handled", data: { test: "foo" } }); assert.deepEqual(handled, [{ seq: 1, type: "handled", data: { test: "foo" } }]); }); diff --git a/test/lib/link/messages.js b/test/lib/link/messages.js index 99e9a564..1b8ec793 100644 --- a/test/lib/link/messages.js +++ b/test/lib/link/messages.js @@ -163,6 +163,6 @@ describe("lib/link/messages", function() { describe("attachAllMessages()", function() { it("does not throw", function() { link.attachAllMessages(testSourceLink); - }) + }); }); }); diff --git a/test/lib/plugin.js b/test/lib/plugin.js index 7ac9eae0..d41aaf11 100644 --- a/test/lib/plugin.js +++ b/test/lib/plugin.js @@ -14,7 +14,7 @@ describe("lib/plugin", function() { it("should be constructible", async function() { instancePlugin = new plugin.BaseInstancePlugin(); await instancePlugin.init(); - }) + }); it("should define defaults for hooks", async function() { await instancePlugin.onMetrics(); await instancePlugin.onStart(); @@ -23,7 +23,7 @@ describe("lib/plugin", function() { await instancePlugin.onOutput({}); instancePlugin.onMasterConnectionEvent("connect"); await instancePlugin.onPrepareMasterDisconnect(); - }) + }); }); describe("class BaseMasterPlugin", function() { @@ -31,14 +31,14 @@ describe("lib/plugin", function() { it("should be constructible", async function() { masterPlugin = new plugin.BaseMasterPlugin(); await masterPlugin.init(); - }) + }); it("should define defaults for hooks", async function() { await masterPlugin.onInstanceStatusChanged({}, "running", "initialized"); await masterPlugin.onMetrics(); await masterPlugin.onShutdown(); masterPlugin.onSlaveConnectionEvent({}, "connect"); await masterPlugin.onPrepareSlaveDisconnect({}); - }) + }); }); describe("loadPluginInfos()", function() { diff --git a/test/lib/prometheus.js b/test/lib/prometheus.js index f0788579..175bd723 100644 --- a/test/lib/prometheus.js +++ b/test/lib/prometheus.js @@ -8,7 +8,7 @@ describe("lib/prometheus", function() { let registry; beforeEach(function() { registry = new prometheus.CollectorRegistry(); - }) + }); describe(".register()", function() { it("should register a collector", function() { @@ -208,7 +208,7 @@ describe("lib/prometheus", function() { name, "Help", { register: false } ), new Error(`Invalid name '${name}'`) - ) + ); } }); it("should throw on invalid label names", function() { @@ -218,7 +218,7 @@ describe("lib/prometheus", function() { "test", "Help", { register: false, labels: [name] } ), new Error(`Invalid label '${name}'`) - ) + ); } }); it("should throw on missing name", function() { @@ -336,7 +336,7 @@ describe("lib/prometheus", function() { gauge.labels("1", "3"); gauge.labels("4", "6"); gauge.removeAll({a: "1"}); - assert(gauge._values.size <= 1, "Matching labels remained") + assert(gauge._values.size <= 1, "Matching labels remained"); assert( gauge._values.has('a="4",b="6"'), "Non-matching label was removed" @@ -351,10 +351,10 @@ describe("lib/prometheus", function() { it("should handle special characters", function() { let gauge = new prometheus.Gauge( "test", "Help", { register: false, labels: ["a", "b"] } - ) + ); gauge.labels('x\\\\\n\"\"\n\\', "2"); gauge.removeAll({a: 'x\\\\\n\"\"\n\\'}); - assert(gauge._values.size === 0, "Matching labels remained") + assert(gauge._values.size === 0, "Matching labels remained"); }); }); describe(".clear()", function() { @@ -381,7 +381,7 @@ describe("lib/prometheus", function() { describe("processStartTimeSeconds", function() { it("should give a close point in time", async function() { this.skip(); // XXX Doesn't work in Clusterio's shared testing env - let results = [] + let results = []; let collector = prometheus.defaultCollectors.processStartTimeSeconds; for await (let result of collector.collect()) { results.push(result); @@ -401,7 +401,7 @@ describe("lib/prometheus", function() { describe("processCpuSecondsTotal", function() { it("should give a low value", async function() { this.skip(); // XXX Doesn't work in Clusterio's shared testing env - let results = [] + let results = []; let collector = prometheus.defaultCollectors.processCpuSecondsTotal; for await (let result of collector.collect()) { results.push(result); @@ -412,7 +412,7 @@ describe("lib/prometheus", function() { "collector did not give exactly one result" ); - let value = results[0].samples.get("") + let value = results[0].samples.get(""); assert( value < 5 && value > 0, `process time is not between 0 and 5 seconds (${value})` @@ -422,7 +422,7 @@ describe("lib/prometheus", function() { describe("processResidentMemoryBytes", function() { it("should give a low value", async function() { this.skip(); // XXX Doesn't work in Clusterio's shared testing env - let results = [] + let results = []; let collector = prometheus.defaultCollectors.processResidentMemoryBytes; for await (let result of collector.collect()) { results.push(result); @@ -433,7 +433,7 @@ describe("lib/prometheus", function() { "collector did not give exactly one result" ); - let value = results[0].samples.get("") + let value = results[0].samples.get(""); assert( value < 200e6 && value > 0, `resident memory is not between 0 and 200 MB (${value})` @@ -443,7 +443,7 @@ describe("lib/prometheus", function() { describe("processHeapBytes", function() { it("should give a low value", async function() { this.skip(); // XXX Doesn't work in Clusterio's shared testing env - let results = [] + let results = []; let collector = prometheus.defaultCollectors.processHeapBytes; for await (let result of collector.collect()) { results.push(result); @@ -454,7 +454,7 @@ describe("lib/prometheus", function() { "collector did not give exactly one result" ); - let value = results[0].samples.get("") + let value = results[0].samples.get(""); assert( value < 200e6 && value > 0, `heap is not between 0 and 200 MB (${value})` @@ -533,7 +533,7 @@ describe("lib/prometheus", function() { assert.deepEqual( prometheus.serializeResult(deserializedResult), serializedResult - ) + ); }); it("should support adding labels", function() { assert.deepEqual( @@ -595,7 +595,7 @@ describe("lib/prometheus", function() { assert.deepEqual( prometheus.deserializeResult(serializedResult), deserializedResult - ) + ); }); }); diff --git a/test/mock.js b/test/mock.js index f00b1272..9d17f761 100644 --- a/test/mock.js +++ b/test/mock.js @@ -66,10 +66,10 @@ class MockInstance extends link.Link { this.name = "test"; this.config = { get: (name) => { - if (name === "instance.id") { return 7357 } + if (name === "instance.id") { return 7357; } throw Error("Not implemented"); } - } + }; } } diff --git a/test/slave.js b/test/slave.js index d0bc59e6..81039c28 100644 --- a/test/slave.js +++ b/test/slave.js @@ -23,16 +23,16 @@ describe("Slave testing", function() { describe(".name", function() { it("should give the name of the instance", function() { assert.equal(instance.name, "foo"); - }) + }); }); describe(".path()", function() { it("should give the path when called without arguments", function() { assert.equal(instance.path(), "dir"); - }) + }); it("should join path with arguments", function() { assert.equal(instance.path("bar"), path.join("dir", "bar")); - }) + }); }); }); @@ -93,7 +93,7 @@ describe("Slave testing", function() { let discardingLogger = { warning: function() { }, log: function() { }, - } + }; let instance; before(async function() {