diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0f2f3e9 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + "env": { + "commonjs": true, + "es6": true, + "node": true + }, + "extends": "eslint:recommended", + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018 + }, + "rules": { + "no-console": "off", + "semi": "warn", + } +}; diff --git a/index.js b/index.js index daf75e8..5c49524 100644 --- a/index.js +++ b/index.js @@ -16,16 +16,6 @@ function monotonicTime() { return mono; } -var appendJournal = (function() { - let lastJournalText = null; - return function appendJournal(text) { - if (text !== lastJournalText) { - fs.appendFileSync('journal/journal.txt', text + '\n'); - lastJournalText = text; - } - }; -})(); - function logDbError(label) { return function(err) { console.error(label + ':', ((err && err.message) || err)); @@ -124,29 +114,7 @@ function waitForAnyGameUpdate() { } function waitFor(duration) { - return new Promise((resolve, reject) => setTimeout(() => { resolve(); }, duration)); -} - -function checkString(value, label, dflt) { - try { - if (arguments.length >= 3 && (value === undefined || value === null)) { - return dflt; - } else if (typeof value === 'string') { - return value; - } - } catch (err) {} - throw { message: `${label || 'value'} should be a string` }; -} - -function checkInteger(value, label, dflt) { - try { - if (arguments.length >= 3 && (value === undefined || value === null)) { - return dflt; - } else if (Number.isInteger(value)) { - return value; - } - } catch(err) {} - throw { message: `${label || 'value'} should be an integer` }; + return new Promise((resolve) => setTimeout(() => { resolve(); }, duration)); } function catchExceptionsJson(wrapped) { @@ -171,10 +139,10 @@ function catchExceptionsJson(wrapped) { } catch (err) { internalErrorJson(err); } - } + }; } -async function getGameListHandler(req, res, next) { +async function getGameListHandler(req, res) { res.set('Cache-Control', 'no-store'); const afterTime = @@ -191,7 +159,7 @@ async function getGameListHandler(req, res, next) { const pollTimeout = waitFor(POLLING_TIMEOUT).then(() => 'timeout').catch(()=>{}); - while (true) { + for (;;) { /* Save the async promise _before_ the query so we don't miss any updates while suspended. */ const gameUpdate = waitForAnyGameUpdate().then(() => 'update'); @@ -226,7 +194,7 @@ async function getGameListHandler(req, res, next) { } } -async function getGameHandler(req, res, next) { +async function getGameHandler(req, res) { res.set('Cache-Control', 'no-store'); const gameId = req.params.gameId; @@ -248,7 +216,7 @@ async function getGameHandler(req, res, next) { const pollTimeout = waitFor(POLLING_TIMEOUT).then(() => 'timeout').catch(()=>{}); - while (true) { + for (;;) { /* Save the async promise _before_ the query so we don't miss any updates while suspended. */ const gameUpdate = waitForGameUpdate(gameId).then(() => 'update'); @@ -286,7 +254,7 @@ const updateTemplate = { moves(x) { return Number.isInteger(x); }, status(x) { return typeof x === 'string'; }, timestamp(x) { return Number.isInteger(x); }, - board(x) { return true; }, + board(/*x*/) { return true; }, modified(x) { return Number.isInteger(x); }, }; @@ -311,7 +279,7 @@ function validateUpdate(body) { return body; } -async function postGameHandler(req, res, next) { +async function postGameHandler(req, res) { res.set('Cache-Control', 'no-store'); const gameId = req.params.gameId; @@ -344,8 +312,6 @@ async function postGameHandler(req, res, next) { let setClause = ''; let whereClause = ''; - let hasBoard = false; - let hasMeta = false; for (const key in body) { if (key !== 'modified') { @@ -354,10 +320,8 @@ async function postGameHandler(req, res, next) { } if (key === 'board') { params['$' + key] = JSON.stringify(body[key]); - hasBoard = true; } else { params['$' + key] = body[key]; - hasMeta = true; } if (setClause !== '') { setClause += ', '; @@ -381,7 +345,7 @@ async function postGameHandler(req, res, next) { ON CONFLICT (gameId) DO UPDATE SET ${setClause}, modified = $time WHERE (${whereClause}) AND modified = $modified `; - const selectSql = `SELECT * FROM games WHERE gameId = $gameId` + const selectSql = `SELECT * FROM games WHERE gameId = $gameId`; let transactionP; db.serialize(() => { /* Important: We need to start all these queries without waiting in between. */ @@ -445,7 +409,7 @@ try { maxAge: 0, })); } -} catch (err) {} +} catch (err) {/*ignore*/} var config = { port: process.env.OPENSHIFT_NODEJS_PORT || process.env.VCAP_APP_PORT || process.env.PORT || process.argv[2] || 8765 };