diff --git a/DEVELOPER-NOTES.md b/DEVELOPER-NOTES.md index 13eca306c..1d0894471 100644 --- a/DEVELOPER-NOTES.md +++ b/DEVELOPER-NOTES.md @@ -90,7 +90,7 @@ These steps are only needed as a fallback if CI is not correctly notarizing the 1. Download the `.dmg` from `https://github.com/ipfs-shipyard/ipfs-desktop/releases/vA.B.C`. 2. Ensure `APPLEID` and `APPLEIDPASS` are set either as environment variables or entries in `.env` file. These need to belong to the same org as the certificate used for signing. -3. Run `node pkgs/macos/notarize-cli.js ./IPFS-Desktop-A.B.C.dmg`. +3. Run `node pkgs/macos/notarize-cli.cjs ./IPFS-Desktop-A.B.C.dmg`. 4. Debug errors by calling the tool directly: `xcrun altool --notarize-app -f /path/to/IPFS-Desktop-0.X.0.dmg --primary-bundle-id io.ipfs.desktop -u XXX-from-vault-XXX -p XXX-app-specific-password-from-vault-XXX`; also, see the [long list of hoops Apple may ask you to jump through](https://github.com/ipfs-shipyard/ipfs-desktop/pull/1365#issuecomment-598127684). ### Notarization failures diff --git a/electron-builder.yml b/electron-builder.yml index 8056280cb..a330c3879 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -13,7 +13,7 @@ directories: asarUnpack: 'src/**/scripts/**/*' -afterSign: './pkgs/macos/notarize-build.js' +afterSign: './pkgs/macos/notarize-build.cjs' mac: artifactName: ${name}-${version}-squirrel.${ext} diff --git a/package.json b/package.json index 4919fc406..f9bd993f7 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "test:e2e": "xvfb-maybe cross-env NODE_ENV=test playwright test -c test/e2e/playwright.config.js", "postinstall": "run-s install-app-deps patch-deps macos-universal-kubo", "install-app-deps": "electron-builder install-app-deps", - "macos-universal-kubo": "node pkgs/macos/build-universal-kubo-binary.js", + "macos-universal-kubo": "node pkgs/macos/build-universal-kubo-binary.cjs", "patch-deps": "patch-package", "clean": "shx rm -rf node_modules/kubo/bin", "force-webui-download": "shx rm -rf assets/webui && run-s build:webui", diff --git a/pkgs/macos/build-universal-kubo-binary.js b/pkgs/macos/build-universal-kubo-binary.cjs similarity index 100% rename from pkgs/macos/build-universal-kubo-binary.js rename to pkgs/macos/build-universal-kubo-binary.cjs diff --git a/pkgs/macos/notarize-build.js b/pkgs/macos/notarize-build.cjs similarity index 100% rename from pkgs/macos/notarize-build.js rename to pkgs/macos/notarize-build.cjs diff --git a/pkgs/macos/notarize-cli.js b/pkgs/macos/notarize-cli.cjs similarity index 100% rename from pkgs/macos/notarize-cli.js rename to pkgs/macos/notarize-cli.cjs diff --git a/src/add-to-ipfs.js b/src/add-to-ipfs.js index 510a52c5e..0be2c5d59 100644 --- a/src/add-to-ipfs.js +++ b/src/add-to-ipfs.js @@ -4,10 +4,10 @@ const { globSource } = require('ipfs-http-client') const i18n = require('i18next') const last = require('it-last') const fs = require('fs-extra') -const logger = require('./common/logger') -const { notify, notifyError } = require('./common/notify') -const { analyticsKeys } = require('./analytics/keys') -const getCtx = require('./context') +const logger = require('./common/logger.js') +const { notify, notifyError } = require('./common/notify.js') +const { analyticsKeys } = require('./analytics/keys.js') +const getCtx = require('./context.js') async function copyFileToMfs (ipfs, cid, filename) { let i = 0 @@ -111,7 +111,7 @@ async function addFileOrDirectory (ipfs, filepath) { return { cid, filename } } -module.exports = async function (files) { +const defaultExport = async function (files) { const ctx = getCtx() const getIpfsd = await ctx.getProp('getIpfsd') const ipfsd = await getIpfsd() @@ -150,3 +150,5 @@ module.exports = async function (files) { return cid } + +module.exports = defaultExport diff --git a/src/analytics/index.js b/src/analytics/index.js index 7c4a430ec..2b4bbe2f1 100644 --- a/src/analytics/index.js +++ b/src/analytics/index.js @@ -1,15 +1,14 @@ // @ts-check const Countly = require('countly-sdk-nodejs') -const { ipcMain } = require('electron') -const { COUNTLY_KEY } = require('../common/consts') +const { app, ipcMain } = require('electron') +const { COUNTLY_KEY } = require('../common/consts.js') const { join } = require('path') -const { app } = require('electron') const { existsSync, mkdirSync } = require('fs') -const ipcMainEvents = require('../common/ipc-main-events') -const logger = require('../common/logger') -const getCtx = require('../context') +const ipcMainEvents = require('../common/ipc-main-events.js') +const logger = require('../common/logger.js') +const getCtx = require('../context.js') -module.exports = async function () { +const defaultExport = async function () { logger.info('[analytics] init...') // workaround: recursive mkdir https://github.com/Countly/countly-sdk-nodejs/pull/14 const countlyDataDir = join(app.getPath('userData'), 'countly-data') @@ -39,3 +38,5 @@ module.exports = async function () { }) logger.info('[analytics] init done') } + +module.exports = defaultExport diff --git a/src/app-menu.js b/src/app-menu.js index 1126e7998..e4398d8dc 100644 --- a/src/app-menu.js +++ b/src/app-menu.js @@ -1,5 +1,5 @@ const { app, Menu, shell } = require('electron') -const logger = require('./common/logger') +const logger = require('./common/logger.js') const template = [ { @@ -88,9 +88,11 @@ if (process.platform === 'darwin') { ] } -module.exports = function () { +const defaultExport = function () { logger.info('[appMenu] init...') const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) logger.info('[appMenu] init done...') } + +module.exports = defaultExport diff --git a/src/argv-files-handler.js b/src/argv-files-handler.js index 93ab78a97..6f078e05f 100644 --- a/src/argv-files-handler.js +++ b/src/argv-files-handler.js @@ -1,5 +1,5 @@ const fs = require('fs-extra') -const addToIpfs = require('./add-to-ipfs') +const addToIpfs = require('./add-to-ipfs.js') async function argvHandler (argv) { let handled = false @@ -25,9 +25,10 @@ async function argvHandler (argv) { return handled } -module.exports = async function () { +const defaultExport = async function () { // Checks current process await argvHandler(process.argv) } +module.exports = defaultExport module.exports.argvHandler = argvHandler diff --git a/src/auto-launch.js b/src/auto-launch.js index 89588efc9..2516b1ab4 100644 --- a/src/auto-launch.js +++ b/src/auto-launch.js @@ -5,12 +5,12 @@ const os = require('os') const path = require('path') const fs = require('fs-extra') const untildify = require('untildify') -const createToggler = require('./utils/create-toggler') -const logger = require('./common/logger') -const store = require('./common/store') -const { IS_MAC, IS_WIN } = require('./common/consts') -const { AUTO_LAUNCH: CONFIG_KEY } = require('./common/config-keys') -const { showDialog, recoverableErrorDialog } = require('./dialogs') +const createToggler = require('./utils/create-toggler.js') +const logger = require('./common/logger.js') +const store = require('./common/store.js') +const { IS_MAC, IS_WIN } = require('./common/consts.js') +const { AUTO_LAUNCH: CONFIG_KEY } = require('./common/config-keys.js') +const { showDialog, recoverableErrorDialog } = require('./dialogs/index.js') function isSupported () { const plat = os.platform() @@ -49,7 +49,7 @@ async function disable () { await fs.remove(getDesktopFile()) } -module.exports = async function () { +const defaultExport = async function () { const activate = async ({ newValue, oldValue, feedback }) => { if (process.env.NODE_ENV === 'development') { logger.info('[launch on startup] unavailable during development') @@ -109,4 +109,5 @@ module.exports = async function () { createToggler(CONFIG_KEY, activate) } +module.exports = defaultExport module.exports.isSupported = isSupported diff --git a/src/auto-updater/index.js b/src/auto-updater/index.js index 702c6cea9..4cb45b307 100644 --- a/src/auto-updater/index.js +++ b/src/auto-updater/index.js @@ -1,14 +1,13 @@ -const { shell, app, BrowserWindow, Notification } = require('electron') +const { shell, app, ipcMain, BrowserWindow, Notification } = require('electron') const { autoUpdater } = require('electron-updater') const i18n = require('i18next') -const { ipcMain } = require('electron') -const logger = require('../common/logger') -const { showDialog } = require('../dialogs') -const { IS_MAC, IS_WIN, IS_APPIMAGE } = require('../common/consts') -const ipcMainEvents = require('../common/ipc-main-events') -const getCtx = require('../context') -const store = require('../common/store') -const CONFIG_KEYS = require('../common/config-keys') +const logger = require('../common/logger.js') +const { showDialog } = require('../dialogs/index.js') +const { IS_MAC, IS_WIN, IS_APPIMAGE } = require('../common/consts.js') +const ipcMainEvents = require('../common/ipc-main-events.js') +const getCtx = require('../context.js') +const store = require('../common/store.js') +const CONFIG_KEYS = require('../common/config-keys.js') function isAutoUpdateSupported () { if (store.get(CONFIG_KEYS.DISABLE_AUTO_UPDATE, false)) { @@ -186,7 +185,7 @@ async function checkForUpdates () { ipcMain.emit(ipcMainEvents.UPDATING_ENDED) } -module.exports = async function () { +const defaultExport = async function () { if (['test', 'development'].includes(process.env.NODE_ENV ?? '')) { getCtx().setProp('manualCheckForUpdates', () => { showDialog({ @@ -216,3 +215,5 @@ module.exports = async function () { checkForUpdates() }) } + +module.exports = defaultExport diff --git a/src/automatic-gc.js b/src/automatic-gc.js index 177d98e9f..708320aa4 100644 --- a/src/automatic-gc.js +++ b/src/automatic-gc.js @@ -1,9 +1,9 @@ -const createToggler = require('./utils/create-toggler') -const logger = require('./common/logger') -const store = require('./common/store') -const { AUTO_GARBAGE_COLLECTOR: CONFIG_KEY } = require('./common/config-keys') +const createToggler = require('./utils/create-toggler.js') +const logger = require('./common/logger.js') +const store = require('./common/store.js') +const { AUTO_GARBAGE_COLLECTOR: CONFIG_KEY } = require('./common/config-keys.js') const { ipcMain } = require('electron') -const ipcMainEvents = require('./common/ipc-main-events') +const ipcMainEvents = require('./common/ipc-main-events.js') const gcFlag = '--enable-gc' const isEnabled = flags => flags.some(f => f === gcFlag) @@ -34,7 +34,7 @@ function applyConfig (newFlags) { }) } -module.exports = async function () { +const defaultExport = async function () { const activate = ({ newValue, oldValue }) => { if (newValue === oldValue) return @@ -56,3 +56,5 @@ module.exports = async function () { createToggler(CONFIG_KEY, activate) logger.info(`[automatic gc] ${store.get(CONFIG_KEY, true) ? 'enabled' : 'disabled'}`) } + +module.exports = defaultExport diff --git a/src/common/consts.js b/src/common/consts.js index 69bdcd863..b8acafb9d 100644 --- a/src/common/consts.js +++ b/src/common/consts.js @@ -1,14 +1,22 @@ const os = require('os') const packageJson = require('../../package.json') -module.exports = Object.freeze({ - IS_MAC: os.platform() === 'darwin', - IS_WIN: os.platform() === 'win32', - IS_APPIMAGE: typeof process.env.APPIMAGE !== 'undefined', - VERSION: packageJson.version, - ELECTRON_VERSION: process.versions.electron, - KUBO_VERSION: packageJson.dependencies.kubo, - COUNTLY_KEY: process.env.NODE_ENV === 'development' - ? '6b00e04fa5370b1ce361d2f24a09c74254eee382' - : '47fbb3db3426d2ae32b3b65fe40c564063d8b55d' -}) +const IS_MAC = os.platform() === 'darwin' +const IS_WIN = os.platform() === 'win32' +const IS_APPIMAGE = typeof process.env.APPIMAGE !== 'undefined' +const VERSION = packageJson.version +const ELECTRON_VERSION = process.versions.electron +const KUBO_VERSION = packageJson.dependencies.kubo +const COUNTLY_KEY = process.env.NODE_ENV === 'development' + ? '6b00e04fa5370b1ce361d2f24a09c74254eee382' + : '47fbb3db3426d2ae32b3b65fe40c564063d8b55d' + +module.exports = { + IS_MAC, + IS_WIN, + IS_APPIMAGE, + VERSION, + ELECTRON_VERSION, + KUBO_VERSION, + COUNTLY_KEY +} diff --git a/src/common/logger.js b/src/common/logger.js index 0601a0a06..f6e039775 100644 --- a/src/common/logger.js +++ b/src/common/logger.js @@ -4,7 +4,7 @@ const { join } = require('path') const { app } = require('electron') const { performance } = require('perf_hooks') const Countly = require('countly-sdk-nodejs') -const { analyticsKeys } = require('../analytics/keys') +const { analyticsKeys } = require('../analytics/keys.js') /** * @typedef {import('countly-sdk-nodejs').AnalyticsKeys} AnalyticsKeys @@ -75,7 +75,7 @@ const addAnalyticsEvent = ({ withAnalytics, ...countlyOptions }) => { } } -module.exports = Object.freeze({ +const defaultExport = Object.freeze({ /** * * @param {string} msg @@ -153,3 +153,5 @@ module.exports = Object.freeze({ */ fileLogger: logger }) + +module.exports = defaultExport diff --git a/src/common/notify.js b/src/common/notify.js index b08fd4a9a..85707433b 100644 --- a/src/common/notify.js +++ b/src/common/notify.js @@ -20,7 +20,7 @@ function notifyError ({ title, body = '' }) { }) } -module.exports = Object.freeze({ +module.exports = { notify, notifyError -}) +} diff --git a/src/common/store.js b/src/common/store.js index 515422bf6..6ef5c5e45 100644 --- a/src/common/store.js +++ b/src/common/store.js @@ -1,7 +1,7 @@ const { app } = require('electron') const Store = require('electron-store') -const logger = require('./logger') +const logger = require('./logger.js') const { fileLogger } = logger diff --git a/src/context.js b/src/context.js index f96f26374..ac6948757 100644 --- a/src/context.js +++ b/src/context.js @@ -1,6 +1,6 @@ // @ts-check const pDefer = require('p-defer') -const logger = require('./common/logger') +const logger = require('./common/logger.js') /** * @typedef { 'tray' | 'tray.update-menu' | 'countlyDeviceId' | 'manualCheckForUpdates' | 'startIpfs' | 'stopIpfs' | 'restartIpfs' | 'getIpfsd' | 'launchWebUI' | 'webui' | 'splashScreen' | 'i18n.initDone' } ContextProperties diff --git a/src/custom-ipfs-binary.js b/src/custom-ipfs-binary.js index 42dfb0109..807fb4c7f 100644 --- a/src/custom-ipfs-binary.js +++ b/src/custom-ipfs-binary.js @@ -1,10 +1,10 @@ const i18n = require('i18next') const { app, dialog } = require('electron') -const { showDialog } = require('./dialogs') -const logger = require('./common/logger') -const store = require('./common/store') -const dock = require('./utils/dock') -const getCtx = require('./context') +const { showDialog } = require('./dialogs/index.js') +const logger = require('./common/logger.js') +const store = require('./common/store.js') +const dock = require('./utils/dock.js') +const getCtx = require('./context.js') const SETTINGS_KEY = 'binaryPath' diff --git a/src/daemon/config.js b/src/daemon/config.js index 8a0d1da38..e817b4e61 100644 --- a/src/daemon/config.js +++ b/src/daemon/config.js @@ -4,9 +4,9 @@ const { multiaddr } = require('multiaddr') const http = require('http') const portfinder = require('portfinder') const { shell } = require('electron') -const store = require('../common/store') -const logger = require('../common/logger') -const dialogs = require('./dialogs') +const store = require('../common/store.js') +const logger = require('../common/logger.js') +const dialogs = require('./dialogs.js') /** * Get repository configuration file path. @@ -481,7 +481,7 @@ function checkRepositoryAndConfiguration (ipfsd) { } } -module.exports = Object.freeze({ +module.exports = { configExists, apiFileExists, removeApiFile, @@ -489,4 +489,4 @@ module.exports = Object.freeze({ migrateConfig, checkPorts, checkRepositoryAndConfiguration -}) +} diff --git a/src/daemon/daemon.js b/src/daemon/daemon.js index 10cfda5a2..70a028b40 100644 --- a/src/daemon/daemon.js +++ b/src/daemon/daemon.js @@ -1,9 +1,9 @@ const Ctl = require('ipfsd-ctl') -const logger = require('../common/logger') -const { getCustomBinary } = require('../custom-ipfs-binary') -const { applyDefaults, migrateConfig, checkPorts, configExists, checkRepositoryAndConfiguration, removeApiFile, apiFileExists } = require('./config') -const showMigrationPrompt = require('./migration-prompt') -const dialogs = require('./dialogs') +const logger = require('../common/logger.js') +const { getCustomBinary } = require('../custom-ipfs-binary.js') +const { applyDefaults, migrateConfig, checkPorts, configExists, checkRepositoryAndConfiguration, removeApiFile, apiFileExists } = require('./config.js') +const showMigrationPrompt = require('./migration-prompt.js') +const dialogs = require('./dialogs.js') const { app } = require('electron') /** diff --git a/src/daemon/dialogs.js b/src/daemon/dialogs.js index ef3212c42..b909a8ac8 100644 --- a/src/daemon/dialogs.js +++ b/src/daemon/dialogs.js @@ -1,6 +1,6 @@ const { BrowserWindow } = require('electron') const i18n = require('i18next') -const { showDialog } = require('../dialogs') +const { showDialog } = require('../dialogs/index.js') function hideOtherWindows () { // Hide other windows so the user focus in on the dialog diff --git a/src/daemon/index.js b/src/daemon/index.js index 343ef83a6..de508da8a 100644 --- a/src/daemon/index.js +++ b/src/daemon/index.js @@ -1,14 +1,14 @@ const { app, ipcMain } = require('electron') const fs = require('fs-extra') const { join } = require('path') -const { ipfsNotRunningDialog } = require('../dialogs') -const store = require('../common/store') -const logger = require('../common/logger') -const { STATUS } = require('./consts') -const createDaemon = require('./daemon') -const ipcMainEvents = require('../common/ipc-main-events') -const { analyticsKeys } = require('../analytics/keys') -const getCtx = require('../context') +const { ipfsNotRunningDialog } = require('../dialogs/index.js') +const store = require('../common/store.js') +const logger = require('../common/logger.js') +const { STATUS } = require('./consts.js') +const createDaemon = require('./daemon.js') +const ipcMainEvents = require('../common/ipc-main-events.js') +const { analyticsKeys } = require('../analytics/keys.js') +const getCtx = require('../context.js') async function setupDaemon () { let ipfsd = null diff --git a/src/daemon/migration-prompt.js b/src/daemon/migration-prompt.js index ecb4b2560..6848662b3 100644 --- a/src/daemon/migration-prompt.js +++ b/src/daemon/migration-prompt.js @@ -1,10 +1,10 @@ const { BrowserWindow } = require('electron') const i18n = require('i18next') const crypto = require('crypto') -const dock = require('../utils/dock') -const { styles, getBackgroundColor } = require('../dialogs/prompt/styles') -const { generateErrorIssueUrl } = require('../dialogs/errors') -const { IS_MAC } = require('../common/consts') +const dock = require('../utils/dock.js') +const { styles, getBackgroundColor } = require('../dialogs/prompt/styles.js') +const { generateErrorIssueUrl } = require('../dialogs/errors.js') +const { IS_MAC } = require('../common/consts.js') const template = (logs, script, title, message, buttons) => { if (IS_MAC) { diff --git a/src/dialogs/dialog.js b/src/dialogs/dialog.js index b9bea93be..d71b2805e 100644 --- a/src/dialogs/dialog.js +++ b/src/dialogs/dialog.js @@ -1,12 +1,12 @@ const { dialog } = require('electron') const i18n = require('i18next') -const { IS_MAC } = require('../common/consts') -const dock = require('../utils/dock') +const { IS_MAC } = require('../common/consts.js') +const dock = require('../utils/dock.js') // NOTE: always send the buttons in the order [OK, Cancel, ...Actions]. // See this post for more interesting information about the topic: // https://medium.muz.li/ok-key-and-cancel-key-which-one-should-be-set-up-on-the-left-4780e86c16eb -module.exports = function ({ +const defaultExport = function ({ title, message, type = 'info', showDock = true, buttons = [ i18n.t('ok'), i18n.t('cancel') @@ -48,3 +48,5 @@ module.exports = function ({ return buttons.length - selected - 1 } + +module.exports = defaultExport diff --git a/src/dialogs/errors.js b/src/dialogs/errors.js index 7a97fce68..65f164e92 100644 --- a/src/dialogs/errors.js +++ b/src/dialogs/errors.js @@ -2,7 +2,7 @@ const { app, shell } = require('electron') const path = require('path') const os = require('os') const i18n = require('i18next') -const dialog = require('./dialog') +const dialog = require('./dialog.js') const issueTitle = (e) => { const es = e.stack ? e.stack.toString() : 'unknown error, no stacktrace' @@ -136,8 +136,8 @@ function recoverableErrorDialog (e, options) { } } -module.exports = Object.freeze({ +module.exports = { criticalErrorDialog, recoverableErrorDialog, generateErrorIssueUrl -}) +} diff --git a/src/dialogs/index.js b/src/dialogs/index.js index 669b71e73..a58fb7141 100644 --- a/src/dialogs/index.js +++ b/src/dialogs/index.js @@ -1,14 +1,14 @@ -const showDialog = require('./dialog') -const showPrompt = require('./prompt') -const { criticalErrorDialog, recoverableErrorDialog } = require('./errors') -const ipfsNotRunningDialog = require('./ipfs-not-running') -const selectDirectory = require('./select-directory') +const showDialog = require('./dialog.js') +const showPrompt = require('./prompt/index.js') +const { criticalErrorDialog, recoverableErrorDialog } = require('./errors.js') +const ipfsNotRunningDialog = require('./ipfs-not-running.js') +const selectDirectory = require('./select-directory.js') -module.exports = Object.freeze({ +module.exports = { showDialog, showPrompt, criticalErrorDialog, recoverableErrorDialog, ipfsNotRunningDialog, selectDirectory -}) +} diff --git a/src/dialogs/ipfs-not-running.js b/src/dialogs/ipfs-not-running.js index c2e2003f5..d6df7df3d 100644 --- a/src/dialogs/ipfs-not-running.js +++ b/src/dialogs/ipfs-not-running.js @@ -1,10 +1,10 @@ const i18n = require('i18next') -const dialog = require('./dialog') -const { STATUS } = require('../daemon/consts') -const logger = require('../common/logger') -const getCtx = require('../context') +const dialog = require('./dialog.js') +const { STATUS } = require('../daemon/consts.js') +const logger = require('../common/logger.js') +const getCtx = require('../context.js') -module.exports = async function () { +const defaultExport = async function () { logger.info('[ipfs-not-running] an action needs ipfs to be running') const option = dialog({ @@ -23,3 +23,5 @@ module.exports = async function () { return (await startIpfs()) === STATUS.STARTING_FINISHED } + +module.exports = defaultExport diff --git a/src/dialogs/prompt/index.js b/src/dialogs/prompt/index.js index bde6e10b5..465fc8eea 100644 --- a/src/dialogs/prompt/index.js +++ b/src/dialogs/prompt/index.js @@ -1,9 +1,9 @@ const { BrowserWindow, ipcMain } = require('electron') const crypto = require('crypto') -const { IS_MAC } = require('../../common/consts') -const dock = require('../../utils/dock') -const makePage = require('./template') -const { getBackgroundColor } = require('./styles') +const { IS_MAC } = require('../../common/consts.js') +const dock = require('../../utils/dock.js') +const makePage = require('./template.js') +const { getBackgroundColor } = require('./styles.js') function generatePage ({ message, defaultValue = '', buttons }, id) { buttons = buttons.map((txt, i) => ``) @@ -16,7 +16,7 @@ function generatePage ({ message, defaultValue = '', buttons }, id) { return `data:text/html;base64,${Buffer.from(page, 'utf8').toString('base64')}` } -module.exports = async function showPrompt (options) { +async function showPrompt (options) { options = Object.assign({}, { window: {}, showDock: true @@ -61,3 +61,5 @@ module.exports = async function showPrompt (options) { window.loadURL(generatePage(options, id)) }) } + +module.exports = showPrompt diff --git a/src/dialogs/prompt/template.js b/src/dialogs/prompt/template.js index 12dfc6b87..433b72e78 100644 --- a/src/dialogs/prompt/template.js +++ b/src/dialogs/prompt/template.js @@ -1,6 +1,6 @@ -const { styles } = require('./styles') +const { styles } = require('./styles.js') -module.exports = ({ message, defaultValue, buttons, id }) => (` +const template = ({ message, defaultValue, buttons, id }) => (`
@@ -33,3 +33,5 @@ module.exports = ({ message, defaultValue, buttons, id }) => (` }) `) + +module.exports = template diff --git a/src/dialogs/select-directory.js b/src/dialogs/select-directory.js index 0d7926d0a..729fa6b11 100644 --- a/src/dialogs/select-directory.js +++ b/src/dialogs/select-directory.js @@ -1,7 +1,7 @@ const { app, dialog } = require('electron') const i18n = require('i18next') -module.exports = async function selectDirectory (options = {}) { +async function selectDirectory (options = {}) { const { canceled, filePaths } = await dialog.showOpenDialog({ title: i18n.t('selectDirectory'), defaultPath: app.getPath('home'), @@ -18,3 +18,5 @@ module.exports = async function selectDirectory (options = {}) { return filePaths[0] } + +module.exports = selectDirectory diff --git a/src/enable-namesys-pubsub.js b/src/enable-namesys-pubsub.js index 144f4763e..095c40ce9 100644 --- a/src/enable-namesys-pubsub.js +++ b/src/enable-namesys-pubsub.js @@ -1,9 +1,9 @@ -const createToggler = require('./utils/create-toggler') -const logger = require('./common/logger') -const store = require('./common/store') -const { EXPERIMENT_PUBSUB_NAMESYS: CONFIG_KEY } = require('./common/config-keys') +const createToggler = require('./utils/create-toggler.js') +const logger = require('./common/logger.js') +const store = require('./common/store.js') +const { EXPERIMENT_PUBSUB_NAMESYS: CONFIG_KEY } = require('./common/config-keys.js') const { ipcMain } = require('electron') -const ipcMainEvents = require('./common/ipc-main-events') +const ipcMainEvents = require('./common/ipc-main-events.js') const namesysPubsubFlag = '--enable-namesys-pubsub' const isEnabled = flags => flags.some(f => f === namesysPubsubFlag) @@ -30,7 +30,7 @@ function applyConfig (newFlags) { }) } -module.exports = async function () { +const defaultExport = async function () { const activate = ({ newValue, oldValue = null }) => { if (newValue === oldValue) return @@ -52,3 +52,5 @@ module.exports = async function () { createToggler(CONFIG_KEY, activate) logger.info(`[ipns over pubsub] ${store.get(CONFIG_KEY, false) ? 'enabled' : 'disabled'}`) } + +module.exports = defaultExport diff --git a/src/enable-pubsub.js b/src/enable-pubsub.js index 3a5a414de..7ca1a3042 100644 --- a/src/enable-pubsub.js +++ b/src/enable-pubsub.js @@ -1,9 +1,9 @@ -const createToggler = require('./utils/create-toggler') -const logger = require('./common/logger') -const store = require('./common/store') -const { EXPERIMENT_PUBSUB: CONFIG_KEY } = require('./common/config-keys') +const createToggler = require('./utils/create-toggler.js') +const logger = require('./common/logger.js') +const store = require('./common/store.js') +const { EXPERIMENT_PUBSUB: CONFIG_KEY } = require('./common/config-keys.js') const { ipcMain } = require('electron') -const ipcMainEvents = require('./common/ipc-main-events') +const ipcMainEvents = require('./common/ipc-main-events.js') const pubsubFlag = '--enable-pubsub-experiment' const isEnabled = flags => flags.some(f => f === pubsubFlag) @@ -30,7 +30,7 @@ function applyConfig (newFlags) { }) } -module.exports = async function () { +const defaultExport = async function () { const activate = ({ newValue, oldValue = null }) => { if (newValue === oldValue) return @@ -52,3 +52,5 @@ module.exports = async function () { createToggler(CONFIG_KEY, activate) logger.info(`[pubsub] ${store.get(CONFIG_KEY, false) ? 'enabled' : 'disabled'}`) } + +module.exports = defaultExport diff --git a/src/handleError.js b/src/handleError.js index 5901216d3..befe62c71 100644 --- a/src/handleError.js +++ b/src/handleError.js @@ -1,6 +1,6 @@ // @ts-check -const logger = require('./common/logger') -const { criticalErrorDialog } = require('./dialogs') +const logger = require('./common/logger.js') +const { criticalErrorDialog } = require('./dialogs/index.js') /** * diff --git a/src/i18n.js b/src/i18n.js index a95d6d133..d67a53eac 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -3,12 +3,12 @@ const { ipcMain } = require('electron') const i18n = require('i18next') const ICU = require('i18next-icu') const Backend = require('i18next-fs-backend') -const store = require('./common/store') -const ipcMainEvents = require('./common/ipc-main-events') -const logger = require('./common/logger') -const getCtx = require('./context') +const store = require('./common/store.js') +const ipcMainEvents = require('./common/ipc-main-events.js') +const logger = require('./common/logger.js') +const getCtx = require('./context.js') -module.exports = async function () { +const defaultExport = async function () { const ctx = getCtx() logger.info('[i18n] init...') const lng = store.get('language') @@ -63,3 +63,5 @@ module.exports = async function () { }) }) } + +module.exports = defaultExport diff --git a/src/index.js b/src/index.js index 461fe7d71..b14b7dc51 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,30 @@ // @ts-check -const { registerAppStartTime, getSecondsSinceAppStart } = require('./metrics/appStart') -registerAppStartTime() +const { app, dialog } = require('electron') +const getCtx = require('./context.js') +const fixPath = require('fix-path') +const logger = require('./common/logger.js') +const setupProtocolHandlers = require('./protocol-handlers.js') +const setupI18n = require('./i18n.js') +const setupDaemon = require('./daemon/index.js') +const setupWebUI = require('./webui/index.js') +const setupAutoLaunch = require('./auto-launch.js') +const setupAutoGc = require('./automatic-gc.js') +const setupPubsub = require('./enable-pubsub.js') +const setupNamesysPubsub = require('./enable-namesys-pubsub.js') +const setupTakeScreenshot = require('./take-screenshot.js') +const setupAppMenu = require('./app-menu.js') +const setupArgvFilesHandler = require('./argv-files-handler.js') +const setupAutoUpdater = require('./auto-updater/index.js') +const setupTray = require('./tray.js') +const setupAnalytics = require('./analytics/index.js') +const setupSecondInstance = require('./second-instance.js') +const { analyticsKeys } = require('./analytics/keys.js') +const handleError = require('./handleError.js') +const createSplashScreen = require('./splash/create-splash-screen.js') +const { registerAppStartTime, getSecondsSinceAppStart } = require('./metrics/appStart.js') require('v8-compile-cache') -const { app, dialog } = require('electron') +registerAppStartTime() if (process.env.NODE_ENV === 'test') { const path = require('path') @@ -13,28 +34,6 @@ if (process.env.NODE_ENV === 'test') { } } -const getCtx = require('./context') -const fixPath = require('fix-path') -const logger = require('./common/logger') -const setupProtocolHandlers = require('./protocol-handlers') -const setupI18n = require('./i18n') -const setupDaemon = require('./daemon') -const setupWebUI = require('./webui') -const setupAutoLaunch = require('./auto-launch') -const setupAutoGc = require('./automatic-gc') -const setupPubsub = require('./enable-pubsub') -const setupNamesysPubsub = require('./enable-namesys-pubsub') -const setupTakeScreenshot = require('./take-screenshot') -const setupAppMenu = require('./app-menu') -const setupArgvFilesHandler = require('./argv-files-handler') -const setupAutoUpdater = require('./auto-updater') -const setupTray = require('./tray') -const setupAnalytics = require('./analytics') -const setupSecondInstance = require('./second-instance') -const { analyticsKeys } = require('./analytics/keys') -const handleError = require('./handleError') -const createSplashScreen = require('./splash/create-splash-screen') - // Hide Dock if (app.dock) app.dock.hide() diff --git a/src/move-repository-location.js b/src/move-repository-location.js index 92f3624b9..20f1adea2 100644 --- a/src/move-repository-location.js +++ b/src/move-repository-location.js @@ -1,14 +1,14 @@ const i18n = require('i18next') const path = require('path') const fs = require('fs-extra') -const store = require('./common/store') -const logger = require('./common/logger') -const { showDialog, recoverableErrorDialog, selectDirectory } = require('./dialogs') -const dock = require('./utils/dock') -const { analyticsKeys } = require('./analytics/keys') -const getCtx = require('./context') - -module.exports = function () { +const store = require('./common/store.js') +const logger = require('./common/logger.js') +const { showDialog, recoverableErrorDialog, selectDirectory } = require('./dialogs/index.js') +const dock = require('./utils/dock.js') +const { analyticsKeys } = require('./analytics/keys.js') +const getCtx = require('./context.js') + +const defaultExport = function () { dock.run(async () => { logger.info('[move repository] user prompted about effects') const ctx = getCtx() @@ -95,3 +95,5 @@ module.exports = function () { }) }) } + +module.exports = defaultExport diff --git a/src/protocol-handlers.js b/src/protocol-handlers.js index 8c2641ea7..994bc3d0b 100644 --- a/src/protocol-handlers.js +++ b/src/protocol-handlers.js @@ -1,6 +1,6 @@ const { app, shell } = require('electron') const toUri = require('multiaddr-to-uri') -const getCtx = require('./context') +const getCtx = require('./context.js') function openLink (protocol, part, base) { shell.openExternal(`${base}/${protocol}/${part}`) @@ -41,7 +41,7 @@ async function argvHandler (argv) { return handled } -module.exports = function () { +const defaultExport = function () { // Handle if the app started running now, and a link // was sent to be handled. argvHandler(process.argv) @@ -53,4 +53,5 @@ module.exports = function () { }) } +module.exports = defaultExport module.exports.argvHandler = argvHandler diff --git a/src/run-gc.js b/src/run-gc.js index 067bdc225..ecc03ed25 100644 --- a/src/run-gc.js +++ b/src/run-gc.js @@ -1,12 +1,12 @@ const i18n = require('i18next') const { ipcMain } = require('electron') -const logger = require('./common/logger') -const { showDialog, recoverableErrorDialog } = require('./dialogs') -const dock = require('./utils/dock') -const ipcMainEvents = require('./common/ipc-main-events') -const getCtx = require('./context') +const logger = require('./common/logger.js') +const { showDialog, recoverableErrorDialog } = require('./dialogs/index.js') +const dock = require('./utils/dock.js') +const ipcMainEvents = require('./common/ipc-main-events.js') +const getCtx = require('./context.js') -module.exports = function runGarbageCollector () { +function runGarbageCollector () { dock.run(async () => { logger.info('[run gc] alerting user for effects') const ctx = getCtx() @@ -70,3 +70,5 @@ module.exports = function runGarbageCollector () { ipcMain.emit(ipcMainEvents.GC_ENDED) }) } + +module.exports = runGarbageCollector diff --git a/src/second-instance.js b/src/second-instance.js index 0185ebc0c..92220b7ed 100644 --- a/src/second-instance.js +++ b/src/second-instance.js @@ -1,9 +1,9 @@ const { app } = require('electron') -const { argvHandler: protocolHandler } = require('./protocol-handlers') -const { argvHandler: filesHandler } = require('./argv-files-handler') -const getCtx = require('./context') +const { argvHandler: protocolHandler } = require('./protocol-handlers.js') +const { argvHandler: filesHandler } = require('./argv-files-handler.js') +const getCtx = require('./context.js') -module.exports = async function () { +const defaultExport = async function () { const ctx = getCtx() app.on('second-instance', async (_, argv) => { if (await protocolHandler(argv)) { @@ -17,3 +17,5 @@ module.exports = async function () { await ctx.getFn('launchWebUI')() }) } + +module.exports = defaultExport diff --git a/src/splash/create-splash-screen.js b/src/splash/create-splash-screen.js index 7dca7efe7..1557ffc4d 100644 --- a/src/splash/create-splash-screen.js +++ b/src/splash/create-splash-screen.js @@ -5,11 +5,11 @@ * while we're still booting up the daemon. */ const { BrowserWindow } = require('electron') -const getCtx = require('../context') -const logger = require('../common/logger') +const getCtx = require('../context.js') +const logger = require('../common/logger.js') const path = require('node:path') -module.exports = async function createSplashScreen () { +async function createSplashScreen () { const ctx = getCtx() const splashScreen = new BrowserWindow({ title: 'IPFS Desktop splash screen', @@ -33,3 +33,5 @@ module.exports = async function createSplashScreen () { ctx.setProp('splashScreen', splashScreen) } + +module.exports = createSplashScreen diff --git a/src/take-screenshot.js b/src/take-screenshot.js index 60246e79d..b382f8aeb 100644 --- a/src/take-screenshot.js +++ b/src/take-screenshot.js @@ -1,13 +1,13 @@ const i18n = require('i18next') const { clipboard, nativeImage, ipcMain } = require('electron') -const logger = require('./common/logger') -const { IS_MAC } = require('./common/consts') -const { notify, notifyError } = require('./common/notify') -const { SCREENSHOT_SHORTCUT: CONFIG_KEY } = require('./common/config-keys') -const setupGlobalShortcut = require('./utils/setup-global-shortcut') -const { analyticsKeys } = require('./analytics/keys') -const ipcMainEvents = require('./common/ipc-main-events') -const getCtx = require('./context') +const logger = require('./common/logger.js') +const { IS_MAC } = require('./common/consts.js') +const { notify, notifyError } = require('./common/notify.js') +const { SCREENSHOT_SHORTCUT: CONFIG_KEY } = require('./common/config-keys.js') +const setupGlobalShortcut = require('./utils/setup-global-shortcut.js') +const { analyticsKeys } = require('./analytics/keys.js') +const ipcMainEvents = require('./common/ipc-main-events.js') +const getCtx = require('./context.js') const SHORTCUT = IS_MAC ? 'Command+Control+S' @@ -108,7 +108,7 @@ async function takeScreenshot () { webui.webContents.send('screenshot') } -module.exports = function () { +const defaultExport = function () { setupGlobalShortcut({ confirmationDialog: { title: i18n.t('enableGlobalTakeScreenshotShortcut.title'), @@ -124,5 +124,6 @@ module.exports = function () { ipcMain.on(ipcMainEvents.SCREENSHOT, handleScreenshot()) } +module.exports = defaultExport module.exports.takeScreenshot = takeScreenshot module.exports.SHORTCUT = SHORTCUT diff --git a/src/tray.js b/src/tray.js index 11a566bd4..0e6b223b6 100644 --- a/src/tray.js +++ b/src/tray.js @@ -3,22 +3,22 @@ const i18n = require('i18next') const path = require('path') const os = require('os') const fs = require('fs-extra') -const addToIpfs = require('./add-to-ipfs') -const logger = require('./common/logger') -const store = require('./common/store') -const moveRepositoryLocation = require('./move-repository-location') -const runGarbageCollector = require('./run-gc') -const ipcMainEvents = require('./common/ipc-main-events') -const { setCustomBinary, clearCustomBinary, hasCustomBinary } = require('./custom-ipfs-binary') -const { STATUS } = require('./daemon') -const { IS_MAC, VERSION, KUBO_VERSION } = require('./common/consts') - -const CONFIG_KEYS = require('./common/config-keys') - -const { SHORTCUT: SCREENSHOT_SHORTCUT, takeScreenshot } = require('./take-screenshot') -const { isSupported: supportsLaunchAtLogin } = require('./auto-launch') -const createToggler = require('./utils/create-toggler') -const getCtx = require('./context') +const addToIpfs = require('./add-to-ipfs.js') +const logger = require('./common/logger.js') +const store = require('./common/store.js') +const moveRepositoryLocation = require('./move-repository-location.js') +const runGarbageCollector = require('./run-gc.js') +const ipcMainEvents = require('./common/ipc-main-events.js') +const { setCustomBinary, clearCustomBinary, hasCustomBinary } = require('./custom-ipfs-binary.js') +const { STATUS } = require('./daemon/index.js') +const { IS_MAC, VERSION, KUBO_VERSION } = require('./common/consts.js') + +const CONFIG_KEYS = require('./common/config-keys.js') + +const { SHORTCUT: SCREENSHOT_SHORTCUT, takeScreenshot } = require('./take-screenshot.js') +const { isSupported: supportsLaunchAtLogin } = require('./auto-launch.js') +const createToggler = require('./utils/create-toggler.js') +const getCtx = require('./context.js') function buildCheckbox (key, label) { return { @@ -274,7 +274,7 @@ function icon (status) { // https://www.electronjs.org/docs/faq#my-apps-tray-disappeared-after-a-few-minutes let tray = null -module.exports = async function () { +const defaultExport = async function () { const ctx = getCtx() logger.info('[tray] starting') tray = new Tray(icon(off)) @@ -430,3 +430,5 @@ function getKuboRepositoryPath () { } return ipfsPath } + +module.exports = defaultExport diff --git a/src/utils/create-toggler.js b/src/utils/create-toggler.js index 86fc1cf76..f9fda29e3 100644 --- a/src/utils/create-toggler.js +++ b/src/utils/create-toggler.js @@ -1,9 +1,9 @@ const { ipcMain } = require('electron') -const store = require('../common/store') -const logger = require('../common/logger') -const ipcMainEvents = require('../common/ipc-main-events') +const store = require('../common/store.js') +const logger = require('../common/logger.js') +const ipcMainEvents = require('../common/ipc-main-events.js') -module.exports = function (settingsOption, activate) { +const defaultExport = function (settingsOption, activate) { ipcMain.on(ipcMainEvents.TOGGLE(settingsOption), async () => { const oldValue = store.get(settingsOption, null) const newValue = !oldValue @@ -21,3 +21,5 @@ module.exports = function (settingsOption, activate) { ipcMain.emit(ipcMainEvents.CONFIG_UPDATED) }) } + +module.exports = defaultExport diff --git a/src/utils/dock.js b/src/utils/dock.js index d496c96d0..5ff7b743a 100644 --- a/src/utils/dock.js +++ b/src/utils/dock.js @@ -16,19 +16,23 @@ function hide () { } } -module.exports = Object.freeze({ +const run = async (fn) => { + show() + const res = await fn() + hide() + return res +} + +const runSync = (fn) => { + show() + const res = fn() + hide() + return res +} + +module.exports = { show, hide, - run: async (fn) => { - show() - const res = await fn() - hide() - return res - }, - runSync: (fn) => { - show() - const res = fn() - hide() - return res - } -}) + run, + runSync +} diff --git a/src/utils/setup-global-shortcut.js b/src/utils/setup-global-shortcut.js index 19fa9ce4c..bb7dc8ef0 100644 --- a/src/utils/setup-global-shortcut.js +++ b/src/utils/setup-global-shortcut.js @@ -1,14 +1,14 @@ const { globalShortcut, ipcMain } = require('electron') const i18n = require('i18next') -const createToggler = require('./create-toggler') -const store = require('../common/store') -const { IS_MAC } = require('../common/consts') -const { showDialog } = require('../dialogs') -const ipcMainEvents = require('../common/ipc-main-events') +const createToggler = require('./create-toggler.js') +const store = require('../common/store.js') +const { IS_MAC } = require('../common/consts.js') +const { showDialog } = require('../dialogs/index.js') +const ipcMainEvents = require('../common/ipc-main-events.js') // This function registers a global shortcut/accelerator with a certain action // and (de)activates it according to its 'settingsOption' value on settings. -module.exports = function ({ settingsOption, accelerator, action, confirmationDialog }) { +const defaultExport = function ({ settingsOption, accelerator, action, confirmationDialog }) { const activate = ({ newValue, oldValue, feedback }) => { if (newValue === oldValue) return @@ -56,3 +56,5 @@ module.exports = function ({ settingsOption, accelerator, action, confirmationDi } }) } + +module.exports = defaultExport diff --git a/src/webui/connection-status.js b/src/webui/connection-status.js index b6a67883b..3f1f024cd 100644 --- a/src/webui/connection-status.js +++ b/src/webui/connection-status.js @@ -1,7 +1,7 @@ const { ipcRenderer } = require('electron') -const ipcMainEvents = require('../common/ipc-main-events') +const ipcMainEvents = require('../common/ipc-main-events.js') -module.exports = function () { +const defaultExport = function () { const handler = () => { ipcRenderer.send(ipcMainEvents.ONLINE_STATUS_CHANGED, navigator.onLine) } @@ -10,3 +10,5 @@ module.exports = function () { window.addEventListener('offline', handler) handler() } + +module.exports = defaultExport diff --git a/src/webui/index.js b/src/webui/index.js index cf7e45f42..365504b43 100644 --- a/src/webui/index.js +++ b/src/webui/index.js @@ -4,21 +4,21 @@ const { join } = require('path') const { URL } = require('url') const serve = require('electron-serve') const i18n = require('i18next') -const openExternal = require('./open-external') -const logger = require('../common/logger') -const store = require('../common/store') -const { OPEN_WEBUI_LAUNCH: CONFIG_KEY } = require('../common/config-keys') -const dock = require('../utils/dock') -const { VERSION, ELECTRON_VERSION } = require('../common/consts') -const createToggler = require('../utils/create-toggler') -const { showDialog } = require('../dialogs') -const { getSecondsSinceAppStart } = require('../metrics/appStart') +const openExternal = require('./open-external.js') +const logger = require('../common/logger.js') +const store = require('../common/store.js') +const { OPEN_WEBUI_LAUNCH: CONFIG_KEY } = require('../common/config-keys.js') +const dock = require('../utils/dock.js') +const { VERSION, ELECTRON_VERSION } = require('../common/consts.js') +const createToggler = require('../utils/create-toggler.js') +const { showDialog } = require('../dialogs/index.js') +const { getSecondsSinceAppStart } = require('../metrics/appStart.js') const { performance } = require('perf_hooks') const Countly = require('countly-sdk-nodejs') -const { analyticsKeys } = require('../analytics/keys') -const ipcMainEvents = require('../common/ipc-main-events') -const getCtx = require('../context') -const { STATUS } = require('../daemon/consts') +const { analyticsKeys } = require('../analytics/keys.js') +const ipcMainEvents = require('../common/ipc-main-events.js') +const getCtx = require('../context.js') +const { STATUS } = require('../daemon/consts.js') serve({ scheme: 'webui', directory: join(__dirname, '../../assets/webui') }) @@ -121,7 +121,7 @@ const createWindow = () => { return window } -module.exports = async function () { +const defaultExport = async function () { logger.info('[webui] init...') const ctx = getCtx() @@ -241,3 +241,5 @@ module.exports = async function () { window.loadURL(url.toString()) })) } + +module.exports = defaultExport diff --git a/src/webui/open-external.js b/src/webui/open-external.js index 667befc76..aeeee6507 100644 --- a/src/webui/open-external.js +++ b/src/webui/open-external.js @@ -1,6 +1,6 @@ const { app, shell } = require('electron') -module.exports = function () { +const defaultExport = function () { app.on('web-contents-created', (_, contents) => { contents.on('will-navigate', (event, url) => { const parsedUrl = new URL(url) @@ -20,3 +20,5 @@ module.exports = function () { }) }) } + +module.exports = defaultExport diff --git a/src/webui/preload.js b/src/webui/preload.js index f41831b22..d3622c38b 100644 --- a/src/webui/preload.js +++ b/src/webui/preload.js @@ -1,9 +1,9 @@ // @ts-check const { ipcRenderer, contextBridge } = require('electron') -const screenshotHook = require('./screenshot') -const connectionHook = require('./connection-status') -const { COUNTLY_KEY, VERSION } = require('../common/consts') -const ipcMainEvents = require('../common/ipc-main-events') +const screenshotHook = require('./screenshot.js') +const connectionHook = require('./connection-status.js') +const { COUNTLY_KEY, VERSION } = require('../common/consts.js') +const ipcMainEvents = require('../common/ipc-main-events.js') screenshotHook() connectionHook() diff --git a/src/webui/screenshot.js b/src/webui/screenshot.js index b4022bef2..0cf074e27 100644 --- a/src/webui/screenshot.js +++ b/src/webui/screenshot.js @@ -1,5 +1,5 @@ const { ipcRenderer, desktopCapturer } = require('electron') -const ipcMainEvents = require('../common/ipc-main-events') +const ipcMainEvents = require('../common/ipc-main-events.js') async function streamHandler (format, stream) { const track = stream.getVideoTracks()[0] @@ -45,9 +45,11 @@ async function screenshot (format) { return output } -module.exports = function () { +const defaultExport = function () { ipcRenderer.on('screenshot', async () => { const out = await screenshot() ipcRenderer.send(ipcMainEvents.SCREENSHOT, out) }) } + +module.exports = defaultExport diff --git a/test/e2e/launch.e2e.test.js b/test/e2e/launch.e2e.test.js index fca73e3ff..01d3590bb 100644 --- a/test/e2e/launch.e2e.test.js +++ b/test/e2e/launch.e2e.test.js @@ -4,7 +4,7 @@ const { test, expect } = require('@playwright/test') const path = require('path') const fs = require('fs-extra') const tmp = require('tmp') -const { makeRepository } = require('./utils/ipfsd') +const { makeRepository } = require('./utils/ipfsd.js') const portfinder = require('portfinder') async function getPort (port) { diff --git a/test/e2e/utils/ipfsd.js b/test/e2e/utils/ipfsd.js index c13ecc6db..6ad547aef 100644 --- a/test/e2e/utils/ipfsd.js +++ b/test/e2e/utils/ipfsd.js @@ -1,6 +1,6 @@ /* eslint-env mocha */ -const { applyDefaults } = require('../../../src/daemon/config') +const { applyDefaults } = require('../../../src/daemon/config.js') const tmp = require('tmp') const Ctl = require('ipfsd-ctl') diff --git a/test/unit/add-to-ipfs.spec.js b/test/unit/add-to-ipfs.spec.js index b95c29a93..004332d75 100644 --- a/test/unit/add-to-ipfs.spec.js +++ b/test/unit/add-to-ipfs.spec.js @@ -1,13 +1,13 @@ const path = require('path') const { test, expect } = require('@playwright/test') -const mockElectron = require('./mocks/electron') -const mockLogger = require('./mocks/logger') -const mockNotify = require('./mocks/notify') +const mockElectron = require('./mocks/electron.js') +const mockLogger = require('./mocks/logger.js') +const mockNotify = require('./mocks/notify.js') const proxyquire = require('proxyquire').noCallThru() -const { makeRepository } = require('./../e2e/utils/ipfsd') +const { makeRepository } = require('./../e2e/utils/ipfsd.js') const getFixtures = (...files) => files.map(f => path.join(__dirname, 'fixtures', f)) @@ -19,7 +19,7 @@ test.describe('Add To Ipfs', function () { test.beforeAll(async () => { const repo = await makeRepository({ start: true }) ipfsd = repo.ipfsd - const getCtx = proxyquire('../../src/context', { + const getCtx = proxyquire('../../src/context.js', { electron: mockElectron(), './common/notify': mockNotify(), './common/logger': mockLogger() @@ -36,7 +36,7 @@ test.describe('Add To Ipfs', function () { test.beforeEach(async () => { electron = mockElectron() notify = mockNotify() - addToIpfs = proxyquire('../../src/add-to-ipfs', { + addToIpfs = proxyquire('../../src/add-to-ipfs.js', { electron: electron, './common/notify': notify, './common/logger': mockLogger(), diff --git a/test/unit/context.spec.js b/test/unit/context.spec.js index f606cc15b..5d13e50d6 100644 --- a/test/unit/context.spec.js +++ b/test/unit/context.spec.js @@ -2,9 +2,9 @@ const { test, expect } = require('@playwright/test') const proxyquire = require('proxyquire').noCallThru() const sinon = require('sinon') -const mockElectron = require('./mocks/electron') -const mockLogger = require('./mocks/logger') -const mockNotify = require('./mocks/notify') +const mockElectron = require('./mocks/electron.js') +const mockLogger = require('./mocks/logger.js') +const mockNotify = require('./mocks/notify.js') const testGetAndSet = async (ctx, propertyName, value) => { ctx.setProp(propertyName, value) @@ -15,7 +15,7 @@ const testGetAndSet = async (ctx, propertyName, value) => { test.describe('App Context', () => { let ctx, getCtx test.beforeEach(async () => { - getCtx = proxyquire('../../src/context', { + getCtx = proxyquire('../../src/context.js', { electron: mockElectron(), './common/notify': mockNotify(), './common/logger': mockLogger() diff --git a/test/unit/create-toggler.spec.js b/test/unit/create-toggler.spec.js index be5a0094f..cbb109edc 100644 --- a/test/unit/create-toggler.spec.js +++ b/test/unit/create-toggler.spec.js @@ -1,10 +1,10 @@ const sinon = require('sinon') -const mockElectron = require('./mocks/electron') -const mockStore = require('./mocks/store') -const mockLogger = require('./mocks/logger') +const mockElectron = require('./mocks/electron.js') +const mockStore = require('./mocks/store.js') +const mockLogger = require('./mocks/logger.js') const proxyquire = require('proxyquire').noCallThru() const { test, expect } = require('@playwright/test') -const ipcMainEvents = require('../../src/common/ipc-main-events') +const ipcMainEvents = require('../../src/common/ipc-main-events.js') test.describe('Create toggler', () => { const option = 'OPT' @@ -14,7 +14,7 @@ test.describe('Create toggler', () => { electron = mockElectron() store = mockStore() logger = mockLogger() - createToggler = proxyquire('../../src/utils/create-toggler', { + createToggler = proxyquire('../../src/utils/create-toggler.js', { electron: electron, '../common/logger': logger, '../common/store': store, diff --git a/test/unit/dock.spec.js b/test/unit/dock.spec.js index 0c482f274..f896afb13 100644 --- a/test/unit/dock.spec.js +++ b/test/unit/dock.spec.js @@ -1,6 +1,6 @@ const sinon = require('sinon') const { test, expect } = require('@playwright/test') -const mockElectron = require('./mocks/electron') +const mockElectron = require('./mocks/electron.js') const proxyquire = require('proxyquire') .noCallThru() @@ -9,21 +9,21 @@ const proxyquire = require('proxyquire') test.describe('Dock', () => { test('show dock succeeds with dock (macOS)', () => { const electron = mockElectron({ withDock: true }) - const { show } = proxyquire('../../src/utils/dock', { electron }) + const { show } = proxyquire('../../src/utils/dock.js', { electron }) show() expect(electron.app.dock.show.callCount).toEqual(1) }) test('show dock succeeds without dock (other OSes)', () => { const electron = mockElectron() - const { show } = proxyquire('../../src/utils/dock', { electron }) + const { show } = proxyquire('../../src/utils/dock.js', { electron }) show() }) test('hide dock succeeds with dock and no windows (macOS)', () => { const electron = mockElectron({ withDock: true }) electron.BrowserWindow.getAllWindows.returns([]) - const { hide } = proxyquire('../../src/utils/dock', { electron }) + const { hide } = proxyquire('../../src/utils/dock.js', { electron }) hide() expect(electron.app.dock.hide.callCount).toEqual(1) }) @@ -35,7 +35,7 @@ test.describe('Dock', () => { { isVisible: sinon.stub().returns(false) } ] electron.BrowserWindow.getAllWindows.returns(windows) - const { hide } = proxyquire('../../src/utils/dock', { electron }) + const { hide } = proxyquire('../../src/utils/dock.js', { electron }) hide() expect(windows[0].isVisible.callCount).toEqual(1) expect(windows[1].isVisible.callCount).toEqual(1) @@ -49,7 +49,7 @@ test.describe('Dock', () => { { isVisible: sinon.stub().returns(false) } ] electron.BrowserWindow.getAllWindows.returns(windows) - const { hide } = proxyquire('../../src/utils/dock', { electron }) + const { hide } = proxyquire('../../src/utils/dock.js', { electron }) hide() expect(windows[0].isVisible.callCount).toEqual(1) expect(windows[1].isVisible.callCount).toEqual(1) @@ -58,14 +58,14 @@ test.describe('Dock', () => { test('hide dock succeeds without dock (other OSes)', () => { const electron = mockElectron() - const { hide } = proxyquire('../../src/utils/dock', { electron }) + const { hide } = proxyquire('../../src/utils/dock.js', { electron }) hide() }) test('runs async function with dock (macOS)', async () => { const electron = mockElectron({ withDock: true }) electron.BrowserWindow.getAllWindows.returns([]) - const { run } = proxyquire('../../src/utils/dock', { electron }) + const { run } = proxyquire('../../src/utils/dock.js', { electron }) const fn = sinon.stub().resolves(5) const res = await run(fn) expect(res).toEqual(5) @@ -77,7 +77,7 @@ test.describe('Dock', () => { test('runs async function without dock (other OSes)', async () => { const electron = mockElectron() electron.BrowserWindow.getAllWindows.returns([]) - const { run } = proxyquire('../../src/utils/dock', { electron }) + const { run } = proxyquire('../../src/utils/dock.js', { electron }) const fn = sinon.stub().resolves(5) const res = await run(fn) expect(res).toEqual(5) @@ -86,7 +86,7 @@ test.describe('Dock', () => { test('runs sync function with dock (macOS)', () => { const electron = mockElectron({ withDock: true }) electron.BrowserWindow.getAllWindows.returns([]) - const { runSync } = proxyquire('../../src/utils/dock', { electron }) + const { runSync } = proxyquire('../../src/utils/dock.js', { electron }) const fn = sinon.stub().returns(5) const res = runSync(fn) expect(res).toEqual(5) @@ -98,7 +98,7 @@ test.describe('Dock', () => { test('runs sync function without dock (other OSes)', () => { const electron = mockElectron() electron.BrowserWindow.getAllWindows.returns([]) - const { runSync } = proxyquire('../../src/utils/dock', { electron }) + const { runSync } = proxyquire('../../src/utils/dock.js', { electron }) const fn = sinon.stub().returns(5) const res = runSync(fn) expect(res).toEqual(5) diff --git a/test/unit/mocks/store.js b/test/unit/mocks/store.js index ee64e6212..4ecdfc3b4 100644 --- a/test/unit/mocks/store.js +++ b/test/unit/mocks/store.js @@ -1,5 +1,5 @@ -const mockElectron = require('./electron') -const mockLogger = require('./logger') +const mockElectron = require('./electron.js') +const mockLogger = require('./logger.js') const Store = require('electron-store') const proxyquire = require('proxyquire').noCallThru() @@ -8,7 +8,7 @@ module.exports = function mockStore () { return new Store({ ...options, migrations: {} }) } // use the real store object, but mock the logger and electron - return proxyquire('../../../src/common/store', { + return proxyquire('../../../src/common/store.js', { electron: mockElectron(), './logger': mockLogger(), 'electron-store': MockElectronStoreConstructor diff --git a/test/unit/store.spec.js b/test/unit/store.spec.js index 0ea9ac874..d0b3317bc 100644 --- a/test/unit/store.spec.js +++ b/test/unit/store.spec.js @@ -1,6 +1,6 @@ const sinon = require('sinon') -const mockElectron = require('./mocks/electron') -const mockLogger = require('./mocks/logger') +const mockElectron = require('./mocks/electron.js') +const mockLogger = require('./mocks/logger.js') const proxyquire = require('proxyquire').noCallThru() const { test, expect } = require('@playwright/test') @@ -11,7 +11,7 @@ test.describe('store', () => { test.beforeEach(() => { electron = mockElectron() logger = mockLogger() - store = proxyquire('../../src/common/store', { + store = proxyquire('../../src/common/store.js', { electron: electron, './logger': logger })