1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-10 22:11:50 +02:00

Chore: Desktop: Migrate entrypoint to TypeScript (#12773)

This commit is contained in:
Henry Heino
2025-07-23 14:24:49 -07:00
committed by GitHub
parent 0c52ac424d
commit 3289b2ba30
5 changed files with 48 additions and 38 deletions

View File

@@ -553,6 +553,8 @@ packages/app-desktop/integration-tests/util/setSettingValue.js
packages/app-desktop/integration-tests/util/test.js packages/app-desktop/integration-tests/util/test.js
packages/app-desktop/integration-tests/util/waitForNextOpenPath.js packages/app-desktop/integration-tests/util/waitForNextOpenPath.js
packages/app-desktop/integration-tests/wcag.spec.js packages/app-desktop/integration-tests/wcag.spec.js
packages/app-desktop/main-html.js
packages/app-desktop/main.js
packages/app-desktop/playwright.config.js packages/app-desktop/playwright.config.js
packages/app-desktop/plugins/GotoAnything.js packages/app-desktop/plugins/GotoAnything.js
packages/app-desktop/services/autoUpdater/AutoUpdaterService.test.js packages/app-desktop/services/autoUpdater/AutoUpdaterService.test.js

2
.gitignore vendored
View File

@@ -528,6 +528,8 @@ packages/app-desktop/integration-tests/util/setSettingValue.js
packages/app-desktop/integration-tests/util/test.js packages/app-desktop/integration-tests/util/test.js
packages/app-desktop/integration-tests/util/waitForNextOpenPath.js packages/app-desktop/integration-tests/util/waitForNextOpenPath.js
packages/app-desktop/integration-tests/wcag.spec.js packages/app-desktop/integration-tests/wcag.spec.js
packages/app-desktop/main-html.js
packages/app-desktop/main.js
packages/app-desktop/playwright.config.js packages/app-desktop/playwright.config.js
packages/app-desktop/plugins/GotoAnything.js packages/app-desktop/plugins/GotoAnything.js
packages/app-desktop/services/autoUpdater/AutoUpdaterService.test.js packages/app-desktop/services/autoUpdater/AutoUpdaterService.test.js

View File

@@ -2,35 +2,35 @@
// Disable React message in console "Download the React DevTools for a better development experience" // Disable React message in console "Download the React DevTools for a better development experience"
// https://stackoverflow.com/questions/42196819/disable-hide-download-the-react-devtools#42196820 // https://stackoverflow.com/questions/42196819/disable-hide-download-the-react-devtools#42196820
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef, @typescript-eslint/no-explicit-any
window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = { (window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__ = {
supportsFiber: true, supportsFiber: true,
inject: function() {}, inject: function() {},
onCommitFiberRoot: function() {}, onCommitFiberRoot: function() {},
onCommitFiberUnmount: function() {}, onCommitFiberUnmount: function() {},
}; };
require('./utils/sourceMapSetup'); import './utils/sourceMapSetup';
const app = require('./app').default; import app from './app';
const Folder = require('@joplin/lib/models/Folder').default; import Folder from '@joplin/lib/models/Folder';
const Resource = require('@joplin/lib/models/Resource').default; import Resource from '@joplin/lib/models/Resource';
const BaseItem = require('@joplin/lib/models/BaseItem').default; import BaseItem from '@joplin/lib/models/BaseItem';
const Note = require('@joplin/lib/models/Note').default; import Note from '@joplin/lib/models/Note';
const Tag = require('@joplin/lib/models/Tag').default; import Tag from '@joplin/lib/models/Tag';
const NoteTag = require('@joplin/lib/models/NoteTag').default; import NoteTag from '@joplin/lib/models/NoteTag';
const MasterKey = require('@joplin/lib/models/MasterKey').default; import MasterKey from '@joplin/lib/models/MasterKey';
const Setting = require('@joplin/lib/models/Setting').default; import Setting, { AppType } from '@joplin/lib/models/Setting';
const Revision = require('@joplin/lib/models/Revision').default; import Revision from '@joplin/lib/models/Revision';
const Logger = require('@joplin/utils/Logger').default; import Logger from '@joplin/utils/Logger';
const FsDriverNode = require('@joplin/lib/fs-driver-node').default; import FsDriverNode from '@joplin/lib/fs-driver-node';
const bridge = require('./services/bridge').default; import bridge from './services/bridge';
const shim = require('@joplin/lib/shim').default; import shim from '@joplin/lib/shim';
const { shimInit } = require('@joplin/lib/shim-init-node.js'); const { shimInit } = require('@joplin/lib/shim-init-node.js');
const EncryptionService = require('@joplin/lib/services/e2ee/EncryptionService').default; import EncryptionService from '@joplin/lib/services/e2ee/EncryptionService';
const FileApiDriverLocal = require('@joplin/lib/file-api-driver-local').default; import FileApiDriverLocal from '@joplin/lib/file-api-driver-local';
const React = require('react'); import * as React from 'react';
const nodeSqlite = require('sqlite3'); import nodeSqlite = require('sqlite3');
const initLib = require('@joplin/lib/initLib').default; import initLib from '@joplin/lib/initLib';
const pdfJs = require('pdfjs-dist'); const pdfJs = require('pdfjs-dist');
const { isAppleSilicon } = require('is-apple-silicon'); const { isAppleSilicon } = require('is-apple-silicon');
require('@sentry/electron/renderer'); require('@sentry/electron/renderer');
@@ -60,7 +60,7 @@ const main = async () => {
BaseItem.loadClass('Revision', Revision); BaseItem.loadClass('Revision', Revision);
Setting.setConstant('appId', bridge().appId()); Setting.setConstant('appId', bridge().appId());
Setting.setConstant('appType', 'desktop'); Setting.setConstant('appType', AppType.Desktop);
Setting.setConstant('pluginAssetDir', `${__dirname}/pluginAssets`); Setting.setConstant('pluginAssetDir', `${__dirname}/pluginAssets`);
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
@@ -127,6 +127,6 @@ main().catch((error) => {
// In dev, we give the option to leave the app open as debug statements in the // In dev, we give the option to leave the app open as debug statements in the
// console can be useful // console can be useful
const canIgnore = env === 'dev'; const canIgnore = env === 'dev';
bridge().electronApp().handleAppFailure(errorMessage, canIgnore); void bridge().electronApp().handleAppFailure(errorMessage, canIgnore);
}); });

View File

@@ -1,18 +1,18 @@
// This is the basic initialization for the Electron MAIN process // This is the basic initialization for the Electron MAIN process
require('./utils/sourceMapSetup'); import './utils/sourceMapSetup';
const electronApp = require('electron').app; import { app as electronApp } from 'electron';
require('@electron/remote/main').initialize(); require('@electron/remote/main').initialize();
const ElectronAppWrapper = require('./ElectronAppWrapper').default; import ElectronAppWrapper from './ElectronAppWrapper';
const { pathExistsSync, readFileSync, mkdirpSync } = require('fs-extra'); import { pathExistsSync, readFileSync, mkdirpSync } from 'fs-extra';
const { initBridge } = require('./bridge'); import { initBridge } from './bridge';
const Logger = require('@joplin/utils/Logger').default; import Logger from '@joplin/utils/Logger';
const FsDriverNode = require('@joplin/lib/fs-driver-node').default; import FsDriverNode from '@joplin/lib/fs-driver-node';
const envFromArgs = require('@joplin/lib/envFromArgs'); const envFromArgs = require('@joplin/lib/envFromArgs');
const packageInfo = require('./packageInfo.js'); const packageInfo = require('./packageInfo.js');
const { isCallbackUrl } = require('@joplin/lib/callbackUrlUtils'); import { isCallbackUrl } from '@joplin/lib/callbackUrlUtils';
const determineBaseAppDirs = require('@joplin/lib/determineBaseAppDirs').default; import determineBaseAppDirs from '@joplin/lib/determineBaseAppDirs';
const registerCustomProtocols = require('./utils/customProtocols/registerCustomProtocols').default; import registerCustomProtocols from './utils/customProtocols/registerCustomProtocols';
// Electron takes the application name from package.json `name` and // Electron takes the application name from package.json `name` and
// displays this in the tray icon toolip and message box titles, however in // displays this in the tray icon toolip and message box titles, however in
@@ -26,7 +26,7 @@ process.on('unhandledRejection', (reason, p) => {
process.exit(1); process.exit(1);
}); });
const getFlagValueFromArgs = (args, flag, defaultValue) => { const getFlagValueFromArgs = (args: string[], flag: string, defaultValue: string|null) => {
if (!args) return null; if (!args) return null;
const index = args.indexOf(flag); const index = args.indexOf(flag);
if (index <= 0 || index >= args.length - 1) return defaultValue; if (index <= 0 || index >= args.length - 1) return defaultValue;
@@ -75,7 +75,13 @@ const wrapper = new ElectronAppWrapper(electronApp, {
env, profilePath: rootProfileDir, isDebugMode, initialCallbackUrl, isEndToEndTesting, env, profilePath: rootProfileDir, isDebugMode, initialCallbackUrl, isEndToEndTesting,
}); });
globalThis.joplinBridge = initBridge(wrapper, appId, appName, rootProfileDir, autoUploadCrashDumps, altInstanceId);
type ExtendedGlobal = {
joplinBridge: unknown;
};
(globalThis as unknown as ExtendedGlobal).joplinBridge = (
initBridge(wrapper, appId, appName, rootProfileDir, autoUploadCrashDumps, altInstanceId)
);
wrapper.start().catch((error) => { wrapper.start().catch((error) => {
console.error('Electron App fatal error:'); console.error('Electron App fatal error:');

View File

@@ -120,8 +120,8 @@ const makeBuildContext = (entryPoint: string, renderer: boolean, computeFileSize
const bundleJs = async (writeStats: boolean) => { const bundleJs = async (writeStats: boolean) => {
const entryPoints = [ const entryPoints = [
{ fileName: 'main.js', renderer: false }, { fileName: 'main.ts', renderer: false },
{ fileName: 'main-html.js', renderer: true }, { fileName: 'main-html.ts', renderer: true },
]; ];
for (const { fileName, renderer } of entryPoints) { for (const { fileName, renderer } of entryPoints) {
const compiler = await makeBuildContext(fileName, renderer, writeStats); const compiler = await makeBuildContext(fileName, renderer, writeStats);