diff --git a/.gitignore b/.gitignore index 02b14a5..84af638 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ elm.js npm-debug.log dist/ index.css +main.js diff --git a/main.js b/main.ts similarity index 95% rename from main.js rename to main.ts index 9bd6092..21e53e4 100644 --- a/main.js +++ b/main.ts @@ -1,5 +1,4 @@ -const electron = require('electron') -const { +import { ipcMain, globalShortcut, app, @@ -7,8 +6,9 @@ const { BrowserWindow, dialog, shell, - remote -} = require('electron') + remote, + screen +} from 'electron' const fs = require('fs') const transparencyDisabled = fs.existsSync( @@ -29,7 +29,7 @@ const assetsDirectory = path.join(__dirname, 'assets') const { version } = require('./package') const osascript = require('node-osascript') const appDataPath = app.getPath('userData') -currentMobstersFilePath = path.join(appDataPath, 'active-mobsters') +let currentMobstersFilePath = path.join(appDataPath, 'active-mobsters') const bugsnag = require('bugsnag') const isDev = require('electron-is-dev') log.info(`Running version ${version}`) @@ -43,6 +43,7 @@ bugsnag.register('032040bba551785c7846442332cc067f', { releaseStage: releaseStage }) + const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => { // Someone tried to run a second instance, we should focus our window. if (mainWindow) { @@ -110,12 +111,12 @@ function hideMainWindow() { } function positionWindowLeft(window) { - let { width, height } = electron.screen.getPrimaryDisplay().workAreaSize + let { width, height } = screen.getPrimaryDisplay().workAreaSize window.setPosition(0, height - timerHeight) } function positionWindowRight(window) { - const { width, height } = electron.screen.getPrimaryDisplay().workAreaSize + const { width, height } = screen.getPrimaryDisplay().workAreaSize window.setPosition(width - timerWidth, height - timerHeight) } @@ -159,7 +160,7 @@ function startTimer(flags) { } ipcMain.on('timer-mouse-hover', event => { - ;[x, y] = timerWindow.getPosition() + let [x, y] = timerWindow.getPosition() if (x === 0) { positionWindowRight(timerWindow) } else { @@ -205,7 +206,7 @@ function createWindow() { }, 1000) mainWindow.maximize() - electron.screen.on('display-metrics-changed', function() { + screen.on('display-metrics-changed', function() { mainWindow.maximize() }) @@ -382,7 +383,7 @@ function setupAutoUpdater() { if (!isDev) { autoUpdater.checkForUpdates() log.info('About to set up interval') - function myCheckForUpdates() { + let myCheckForUpdates = () => { log.info('About to check for updates on interval') if (checkForUpdates) { diff --git a/package.json b/package.json index 492158e..316a4db 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A cross-platform mob programming timer built on web technologies", "main": "main.js", "scripts": { - "start": "npm test && npm run build && electron .", + "start": "npm run types && npm test && npm run build && electron .", "build": "elm make src/timer/Main.elm src/setup/Main.elm --output elm.js && elm css src/Stylesheets.elm", "test-watch": "yarn test; fswatch -0 src tests -e '.*' -i \\.elm$ | xargs -0 -n1 -I{} yarn test", "test": "clear && echo 'running tests' && elm-test", @@ -13,7 +13,8 @@ "dist-win": "build --win", "dist-linux": "build --linux", "dist": "build --mac --win --linux", - "release": "build --mac --win --linux" + "release": "build --mac --win --linux", + "types": "tsc" }, "build": { "appId": "com.dillonkearns.mobster", @@ -46,6 +47,7 @@ "highlight.js": "^9.10.0", "jquery": "^3.1.1", "ms": "^0.7.2", - "node-osascript": "^2.0.0" + "node-osascript": "^2.0.0", + "typescript": "^2.4.1" } } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..933c242 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": false, + "sourceMap": false + }, + "exclude": [ + "node_modules", + "typings" + ] +} diff --git a/yarn.lock b/yarn.lock index f78df7b..4b014f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -124,12 +124,6 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@^2.0.1: - version "2.1.5" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" - dependencies: - lodash "^4.14.0" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -167,12 +161,6 @@ binstall@1.2.0: request "2.79.0" tar "2.2.1" -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -679,15 +667,6 @@ elm-test@^0.18.7: node-elm-compiler "4.3.2" xmlbuilder "^8.2.2" -elm@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/elm/-/elm-0.18.0.tgz#919b8309cd939dfe2ff9d252d961b6c89509b970" - dependencies: - mkdirp "0.5.1" - promise "7.1.1" - request "2.74.0" - tar "2.2.1" - error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -805,14 +784,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~1.0.0-rc4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" - dependencies: - async "^2.0.1" - combined-stream "^1.0.5" - mime-types "^2.1.11" - form-data@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" @@ -1308,7 +1279,7 @@ lodash@4.13.1: version "4.13.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.13.1.tgz#83e4b10913f48496d4d16fec4a560af2ee744b68" -lodash@4.14.2, lodash@^4.14.0: +lodash@4.14.2: version "4.14.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.14.2.tgz#bbccce6373a400fbfd0a8c67ca42f6d1ef416432" @@ -1375,7 +1346,7 @@ mime-db@~1.26.0: version "1.26.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" dependencies: @@ -1405,7 +1376,7 @@ mkdirp@0.5.0: dependencies: minimist "0.0.8" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -1470,10 +1441,6 @@ node-status-codes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" -node-uuid@~1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" - nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -1676,7 +1643,7 @@ progress@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" -promise@7.1.1, promise@7.x: +promise@7.x: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" dependencies: @@ -1690,10 +1657,6 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -qs@~6.2.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.2.tgz#d506a5ad5b2cae1fd35c4f54ec182e267e3ef586" - qs@~6.3.0: version "6.3.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d" @@ -1736,10 +1699,11 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.0.0, readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" +readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" @@ -1747,11 +1711,10 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~0.10.x" util-deprecate "~1.0.1" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" +readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: - buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" @@ -1817,32 +1780,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~1.0.0-rc4" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - request@2.79.0, request@2.x, request@^2.45.0, request@^2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" @@ -2130,6 +2067,10 @@ typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +typescript@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.1.tgz#c3ccb16ddaa0b2314de031e7e6fee89e5ba346bc" + uid-number@~0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"