diff --git a/.eslintignore b/.eslintignore
index 9714669e5aa..bd4bc312a47 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -31,6 +31,7 @@ packages/app-cli/tests/tmp
packages/app-clipper/content_scripts/JSDOMParser.js
packages/app-clipper/content_scripts/Readability-readerable.js
packages/app-clipper/content_scripts/Readability.js
+packages/app-clipper/content_scripts/clipperUtils.js
packages/app-clipper/dist
packages/app-clipper/icons
packages/app-clipper/popup/build
diff --git a/.eslintrc.js b/.eslintrc.js
index 7e4a0632cd6..2f8f2c9defe 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -87,6 +87,7 @@ module.exports = {
allowEmptyReject: true,
}],
'no-throw-literal': ['error'],
+ 'no-unused-expressions': ['error'],
// This rule should not be enabled since it matters in what order
// imports are done, in particular in relation to the shim.setReact
diff --git a/.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch b/.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch
deleted file mode 100644
index 8a5706a3d28..00000000000
--- a/.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
-index a1fd1875d852ff69c087a3103eff827c20d37ca5..5222614ddad3276876857e7a9dde4017a6b9fc85 100644
---- a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
-+++ b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
-@@ -42,7 +42,7 @@
- ${nsProcess::FindProcess} "${_FILE}" ${_ERR}
- !else
- # find process owned by current user
-- nsExec::Exec `cmd /c tasklist /FI "USERNAME eq %USERNAME%" /FI "IMAGENAME eq ${_FILE}" | %SYSTEMROOT%\System32\find.exe "${_FILE}"`
-+ nsExec::Exec `cmd /c tasklist /FI "USERNAME eq %USERNAME%" /FI "PID ne $pid" /FI "IMAGENAME eq ${_FILE}" | %SYSTEMROOT%\System32\find.exe "${_FILE}"`
- Pop ${_ERR}
- !endif
- !macroend
diff --git a/README.md b/README.md
index 2be657f9e56..d1dbd4ea852 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ Please see the [donation page](https://github.com/laurent22/joplin/blob/dev/read
# Sponsors
-
+
* * *
diff --git a/package.json b/package.json
index 7b6d666686d..bb823eb1362 100644
--- a/package.json
+++ b/package.json
@@ -105,7 +105,6 @@
"react-native-camera@4.2.1": "patch:react-native-camera@npm%3A4.2.1#./.yarn/patches/react-native-camera-npm-4.2.1-24b2600a7e.patch",
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch",
"eslint": "patch:eslint@8.57.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch",
- "app-builder-lib@24.4.0": "patch:app-builder-lib@npm%3A24.4.0#./.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch",
"nanoid": "patch:nanoid@npm%3A3.3.7#./.yarn/patches/nanoid-npm-3.3.7-98824ba130.patch",
"pdfjs-dist": "patch:pdfjs-dist@npm%3A3.11.174#./.yarn/patches/pdfjs-dist-npm-3.11.174-67f2fee6d6.patch",
"@react-native-community/slider": "patch:@react-native-community/slider@npm%3A4.4.4#./.yarn/patches/@react-native-community-slider-npm-4.4.4-d78e472f48.patch",
diff --git a/packages/app-cli/tests/html_to_md/image_preserve_size_in_lists.html b/packages/app-cli/tests/html_to_md/image_preserve_size_in_lists.html
new file mode 100644
index 00000000000..2050b05ba65
--- /dev/null
+++ b/packages/app-cli/tests/html_to_md/image_preserve_size_in_lists.html
@@ -0,0 +1,33 @@
+
+ -
+
+
+ - HTML images just before a sublist should have a closing <img> tag added.
+ - Otherwise, when rendered to Markdown again, the subsequent list items will be rendered as HTML.
+
+
+ -
+
+
+ A closing tag is also necessary if the image is followed by content on a new line.
+
+ -
+
+
+ - Similar logic isn't necessary for images converted to Markdown.
+
+
+ -
+
+
+ - It also isn't necessary if the next item is at the same level as the image...
+ -
+ ...or if the image has text just before it.
+
+
+
+
\ No newline at end of file
diff --git a/packages/app-cli/tests/html_to_md/image_preserve_size_in_lists.md b/packages/app-cli/tests/html_to_md/image_preserve_size_in_lists.md
new file mode 100644
index 00000000000..6ca842d2ffa
--- /dev/null
+++ b/packages/app-cli/tests/html_to_md/image_preserve_size_in_lists.md
@@ -0,0 +1,11 @@
+-
+ - HTML images just before a sublist should have a closing <img> tag added.
+ - Otherwise, when rendered to Markdown again, the subsequent list items will be rendered as HTML.
+-
+ **A closing tag is also necessary if the image is followed by content on a new line.**
+- ![](:/0123456789abcdef0123456789abcdef)
+ - Similar logic isn't necessary for images converted to Markdown.
+-
+- It also isn't necessary if the next item is at the same level as the image...
+- ...or if the image has text just before it.
+ - See [this issue](https://github.com/laurent22/joplin/issues/11382) for details.
\ No newline at end of file
diff --git a/packages/app-cli/tests/md_to_html/sanitize_21.html b/packages/app-cli/tests/md_to_html/sanitize_21.html
new file mode 100644
index 00000000000..618c8af9720
--- /dev/null
+++ b/packages/app-cli/tests/md_to_html/sanitize_21.html
@@ -0,0 +1 @@
+Should keep this comment:
\ No newline at end of file
diff --git a/packages/app-cli/tests/md_to_html/sanitize_21.md b/packages/app-cli/tests/md_to_html/sanitize_21.md
new file mode 100644
index 00000000000..618c8af9720
--- /dev/null
+++ b/packages/app-cli/tests/md_to_html/sanitize_21.md
@@ -0,0 +1 @@
+Should keep this comment:
\ No newline at end of file
diff --git a/packages/app-desktop/gui/NoteContentPropertiesDialog.tsx b/packages/app-desktop/gui/NoteContentPropertiesDialog.tsx
index 29658336088..71aaf27b1bb 100644
--- a/packages/app-desktop/gui/NoteContentPropertiesDialog.tsx
+++ b/packages/app-desktop/gui/NoteContentPropertiesDialog.tsx
@@ -38,7 +38,7 @@ function countElements(text: string, wordSetter: Function, characterSetter: Func
characterSetter(counter.all);
characterNoSpaceSetter(counter.characters);
});
- text === '' ? lineSetter(0) : lineSetter(text.split('\n').length);
+ lineSetter(text === '' ? 0 : text.split('\n').length);
}
function formatReadTime(readTimeMinutes: number) {
diff --git a/packages/app-desktop/package.json b/packages/app-desktop/package.json
index 7571636deb0..239fcdf6c95 100644
--- a/packages/app-desktop/package.json
+++ b/packages/app-desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "@joplin/app-desktop",
- "version": "3.2.4",
+ "version": "3.2.5",
"description": "Joplin for Desktop",
"main": "main.js",
"private": true,
@@ -115,17 +115,25 @@
"icon": "../../Assets/LinuxIcons",
"category": "Office",
"desktop": {
- "Icon": "joplin",
- "MimeType": "x-scheme-handler/joplin;"
+ "entry": {
+ "Icon": "joplin",
+ "MimeType": "x-scheme-handler/joplin;"
+ }
},
- "target": "AppImage"
+ "target": [
+ "AppImage",
+ "deb"
+ ],
+ "executableName": "joplin",
+ "maintainer": "Joplin Team ",
+ "artifactName": "Joplin-${version}.${ext}"
}
},
"homepage": "https://github.com/laurent22/joplin#readme",
"devDependencies": {
"7zip-bin": "5.2.0",
"@axe-core/playwright": "4.10.0",
- "@electron/rebuild": "3.6.0",
+ "@electron/rebuild": "3.7.1",
"@joplin/default-plugins": "~3.2",
"@joplin/tools": "~3.2",
"@playwright/test": "1.45.3",
@@ -139,7 +147,7 @@
"@types/tesseract.js": "2.0.0",
"axios": "^1.7.7",
"electron": "32.2.0",
- "electron-builder": "24.13.3",
+ "electron-builder": "26.0.0-alpha.7",
"glob": "10.4.5",
"gulp": "4.0.2",
"jest": "29.7.0",
diff --git a/packages/app-desktop/utils/isSafeToOpen.ts b/packages/app-desktop/utils/isSafeToOpen.ts
index 2c3ebdcf80b..4f1661cdbcf 100644
--- a/packages/app-desktop/utils/isSafeToOpen.ts
+++ b/packages/app-desktop/utils/isSafeToOpen.ts
@@ -176,6 +176,29 @@ const isSafeToOpen = async (path: string) => {
}
}
+
+ // The check `extname(path) === ''` is present to prevent the following security issue:
+ //
+ // Suppose that an attacker can rapidly change the type of a file (e.g. on a network drive or shared folder).
+ //
+ // - **Example 1**: On a network drive, if:
+ // 1. In a loop,
+ // - A folder `test.exe\\` is created, replacing the file `test.exe` if it exists.
+ // - After a brief delay, the folder is replaced the **file** `test.exe`.
+ // 4. Joplin calls `stat('network-drive/path/here/test.exe')` and gets **isDirectory: true**.
+ // 5. The folder is replaced with a file.
+ // 6. Joplin calls `openPath('network-drive/path/here/test.exe')` and executes `test.exe`.
+ // - **Example 2**: An example that doesn't rely on timings (but whether it works depends on how network drives are implemented):
+ // 1. An attacker creates a custom network file server where:
+ // - It's logged when a client calls `stat` on a particular path.
+ // - The first time `stat` is called on the path, it returns `directory`.
+ // - Subsequent times, `stat` returns `file`.
+ // 2. Joplin calls `stat('network-drive/path/here/file.exe')`.
+ // 3. The network drive returns `isDirectory: true`.
+ // 4. The network drive replaces the directory `file.exe` with an executable with the same name.
+ // 5. Joplin marks the path as safe to open.
+ // 6. Joplin calls `openPath('network-drive/path/here/file.exe')`.
+ // 7. This executes the executable from step 4.
if (extname(path) === '' && (await stat(path)).isDirectory()) {
return true;
}
diff --git a/packages/app-mobile/components/ScreenHeader/index.tsx b/packages/app-mobile/components/ScreenHeader/index.tsx
index e15013640b0..63a908bdc45 100644
--- a/packages/app-mobile/components/ScreenHeader/index.tsx
+++ b/packages/app-mobile/components/ScreenHeader/index.tsx
@@ -550,7 +550,14 @@ class ScreenHeaderComponent extends PureComponent imp
// which can cause some bugs where previously set state to another note would interfere
// how the new note should be rendered
const NoteScreenWrapper = (props: Props) => {
- const lastNonNullNoteIdRef = useRef(props.noteId);
- if (props.noteId) {
- lastNonNullNoteIdRef.current = props.noteId;
- }
-
- // This keeps the current note open even if it's no longer present in selectedNoteIds.
- // This might happen, for example, if the selected note is moved to an unselected
- // folder.
- const noteId = lastNonNullNoteIdRef.current;
-
const dialogs = useContext(DialogContext);
return (
-
+
);
};
diff --git a/packages/app-mobile/components/screens/Notes.tsx b/packages/app-mobile/components/screens/Notes.tsx
index befda92f1e8..9f243b367d6 100644
--- a/packages/app-mobile/components/screens/Notes.tsx
+++ b/packages/app-mobile/components/screens/Notes.tsx
@@ -35,6 +35,7 @@ interface Props {
showCompletedTodos: boolean;
noteSelectionEnabled: boolean;
+ selectedNoteIds: string[];
activeFolderId: string;
selectedFolderId: string;
selectedTagId: string;
diff --git a/packages/app-mobile/components/screens/encryption-config.tsx b/packages/app-mobile/components/screens/encryption-config.tsx
index b4512113fcf..c4bfe1b5267 100644
--- a/packages/app-mobile/components/screens/encryption-config.tsx
+++ b/packages/app-mobile/components/screens/encryption-config.tsx
@@ -9,9 +9,10 @@ import time from '@joplin/lib/time';
import { decryptedStatText, enableEncryptionConfirmationMessages, onSavePasswordClick, useInputMasterPassword, useInputPasswords, usePasswordChecker, useStats } from '@joplin/lib/components/EncryptionConfigScreen/utils';
import { MasterKeyEntity } from '@joplin/lib/services/e2ee/types';
import { State } from '@joplin/lib/reducer';
-import { SyncInfo } from '@joplin/lib/services/synchronizer/syncInfoUtils';
+import { masterKeyEnabled, SyncInfo } from '@joplin/lib/services/synchronizer/syncInfoUtils';
import { getDefaultMasterKey, setupAndDisableEncryption, toggleAndSetupEncryption } from '@joplin/lib/services/e2ee/utils';
import { useMemo, useState } from 'react';
+import { Divider, List } from 'react-native-paper';
import shim from '@joplin/lib/shim';
interface Props {
@@ -34,8 +35,10 @@ const EncryptionConfigScreen = (props: Props) => {
const { passwordChecks, masterPasswordKeys } = usePasswordChecker(props.masterKeys, props.activeMasterKeyId, props.masterPassword, props.passwords);
const { inputPasswords, onInputPasswordChange } = useInputPasswords(props.passwords);
const { inputMasterPassword, onMasterPasswordSave, onMasterPasswordChange } = useInputMasterPassword(props.masterKeys, props.activeMasterKeyId);
+ const [showDisabledKeys, setShowDisabledKeys] = useState(false);
const mkComps = [];
+ const disabledMkComps = [];
const nonExistingMasterKeyIds = props.notLoadedMasterKeys.slice();
@@ -78,6 +81,10 @@ const EncryptionConfigScreen = (props: Props) => {
flex: 1,
padding: theme.margin,
},
+ disabledContainer: {
+ paddingLeft: theme.margin,
+ paddingRight: theme.margin,
+ },
};
return StyleSheet.create(styles);
@@ -85,7 +92,7 @@ const EncryptionConfigScreen = (props: Props) => {
const decryptedItemsInfo = props.encryptionEnabled ? {decryptedStatText(stats)} : null;
- const renderMasterKey = (_num: number, mk: MasterKeyEntity) => {
+ const renderMasterKey = (mk: MasterKeyEntity) => {
const theme = themeStyle(props.themeId);
const password = inputPasswords[mk.id] ? inputPasswords[mk.id] : '';
@@ -226,16 +233,19 @@ const EncryptionConfigScreen = (props: Props) => {
}
};
-
-
- for (let i = 0; i < props.masterKeys.length; i++) {
+ for (let i = 0; i < props.masterKeys.filter(mk => masterKeyEnabled(mk)).length; i++) {
const mk = props.masterKeys[i];
- mkComps.push(renderMasterKey(i + 1, mk));
+ mkComps.push(renderMasterKey(mk));
const idx = nonExistingMasterKeyIds.indexOf(mk.id);
if (idx >= 0) nonExistingMasterKeyIds.splice(idx, 1);
}
+ for (let i = 0; i < props.masterKeys.filter(mk => !masterKeyEnabled(mk)).length; i++) {
+ const mk = props.masterKeys[i];
+ disabledMkComps.push(renderMasterKey(mk));
+ }
+
const onToggleButtonClick = async () => {
if (props.encryptionEnabled) {
const ok = await shim.showConfirmationDialog(_('Disabling encryption means *all* your notes and attachments are going to be re-synchronised and sent unencrypted to the sync target. Do you wish to continue?'));
@@ -286,8 +296,8 @@ const EncryptionConfigScreen = (props: Props) => {
return (
-
- {
+
+
{_('For more information about End-To-End Encryption (E2EE) and advice on how to enable it please check the documentation:')}
{
https://joplinapp.org/help/apps/sync/e2ee
- }
-
- {_('Status')}
- {_('Encryption is: %s', props.encryptionEnabled ? _('Enabled') : _('Disabled'))}
- {decryptedItemsInfo}
- {renderMasterPassword()}
- {toggleButton}
- {passwordPromptComp}
- {mkComps}
- {nonExistingMasterKeySection}
-
+
+ {_('Status')}
+ {_('Encryption is: %s', props.encryptionEnabled ? _('Enabled') : _('Disabled'))}
+ {decryptedItemsInfo}
+ {renderMasterPassword()}
+ {toggleButton}
+ {passwordPromptComp}
+ {mkComps}
+ {nonExistingMasterKeySection}
+
+
+ setShowDisabledKeys(st => !st)}
+ >
+
+ {disabledMkComps}
+
+
);
diff --git a/packages/app-mobile/package.json b/packages/app-mobile/package.json
index 544d8864c0c..a5e0966abb5 100644
--- a/packages/app-mobile/package.json
+++ b/packages/app-mobile/package.json
@@ -27,7 +27,7 @@
"@joplin/react-native-saf-x": "~3.2",
"@joplin/renderer": "~3.2",
"@joplin/utils": "~3.2",
- "@react-native-clipboard/clipboard": "1.14.1",
+ "@react-native-clipboard/clipboard": "1.14.2",
"@react-native-community/datetimepicker": "8.2.0",
"@react-native-community/geolocation": "3.3.0",
"@react-native-community/netinfo": "11.3.3",
diff --git a/packages/app-mobile/services/voiceTyping/vosk.android.ts b/packages/app-mobile/services/voiceTyping/vosk.android.ts
index 157249ab550..cd23d6e27bb 100644
--- a/packages/app-mobile/services/voiceTyping/vosk.android.ts
+++ b/packages/app-mobile/services/voiceTyping/vosk.android.ts
@@ -117,7 +117,7 @@ export const startRecording = (vosk: Vosk, options: StartOptions): VoiceTypingSe
eventHandler.remove();
}
- vosk.cleanup(),
+ vosk.cleanup();
state_ = State.Idle;
diff --git a/packages/app-mobile/utils/appDefaultState.ts b/packages/app-mobile/utils/appDefaultState.ts
index d69395d07c6..880cb9525c7 100644
--- a/packages/app-mobile/utils/appDefaultState.ts
+++ b/packages/app-mobile/utils/appDefaultState.ts
@@ -18,5 +18,8 @@ const appDefaultState: AppState = {
showPanelsDialog: false,
newNoteAttachFileAction: null,
...defaultState,
+
+ // On mobile, it's possible to select notes that aren't in the selected folder/tag/etc.
+ allowSelectionInOtherFolders: true,
};
export default appDefaultState;
diff --git a/packages/app-mobile/web/serviceWorker.ts b/packages/app-mobile/web/serviceWorker.ts
index 40c1f85259b..f5ee4bea2ee 100644
--- a/packages/app-mobile/web/serviceWorker.ts
+++ b/packages/app-mobile/web/serviceWorker.ts
@@ -207,6 +207,16 @@ if (typeof window === 'undefined') {
quiet: false,
};
+ const consoleLog = (...args: unknown[]) => {
+ if (coi.quiet) return;
+ console.log(...args);
+ };
+
+ const consoleError = (...args: unknown[]) => {
+ if (coi.quiet) return;
+ console.error(...args);
+ };
+
const n = navigator;
const controlling = n.serviceWorker && n.serviceWorker.controller;
@@ -228,7 +238,7 @@ if (typeof window === 'undefined') {
: coi.coepCredentialless(),
});
if (reloadToDegrade) {
- !coi.quiet && console.log('Reloading page to degrade COEP.');
+ consoleLog('Reloading page to degrade COEP.');
window.sessionStorage.setItem('coiReloadedBySelf', 'coepDegrade');
coi.doReload();
}
@@ -245,28 +255,28 @@ if (typeof window === 'undefined') {
// if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return;
if (!window.isSecureContext) {
- !coi.quiet && console.log('COOP/COEP Service Worker not registered, a secure context is required.');
+ consoleLog('COOP/COEP Service Worker not registered, a secure context is required.');
return;
}
// In some environments (e.g. Firefox private mode) this won't be available
if (!n.serviceWorker) {
- !coi.quiet && console.error('COOP/COEP Service Worker not registered, perhaps due to private mode.');
+ consoleError('COOP/COEP Service Worker not registered, perhaps due to private mode.');
return;
}
const registration = await n.serviceWorker.register(window.document.currentScript.getAttribute('src'));
- !coi.quiet && console.log('COOP/COEP Service Worker registered', registration.scope);
+ consoleLog('COOP/COEP Service Worker registered', registration.scope);
registration.addEventListener('updatefound', () => {
- !coi.quiet && console.log('Reloading page to make use of updated COOP/COEP Service Worker.');
+ consoleLog('Reloading page to make use of updated COOP/COEP Service Worker.');
window.sessionStorage.setItem('coiReloadedBySelf', 'updatefound');
coi.doReload();
});
// If the registration is active, but it's not controlling the page
if (registration.active && !n.serviceWorker.controller) {
- !coi.quiet && console.log('Reloading page to make use of COOP/COEP Service Worker.');
+ consoleLog('Reloading page to make use of COOP/COEP Service Worker.');
window.sessionStorage.setItem('coiReloadedBySelf', 'notControlling');
coi.doReload();
}
diff --git a/packages/default-plugins/build.ts b/packages/default-plugins/build.ts
index 2660116baad..8978ee71e37 100644
--- a/packages/default-plugins/build.ts
+++ b/packages/default-plugins/build.ts
@@ -4,6 +4,7 @@ const yargs = require('yargs');
const build = () => {
+ // eslint-disable-next-line no-unused-expressions -- Old code before rule was applied
yargs
.usage('$0 [args]')
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
diff --git a/packages/default-plugins/pluginRepositories.json b/packages/default-plugins/pluginRepositories.json
index 9d6d29a98f2..c868a7fdd17 100644
--- a/packages/default-plugins/pluginRepositories.json
+++ b/packages/default-plugins/pluginRepositories.json
@@ -3,5 +3,10 @@
"cloneUrl": "https://github.com/JackGruber/joplin-plugin-backup.git",
"branch": "master",
"commit": "5ba57c18ac0f24f20832f012e015a080b138f0c4"
+ },
+ "io.github.personalizedrefrigerator.js-draw": {
+ "cloneUrl": "https://github.com/personalizedrefrigerator/joplin-plugin-freehand-drawing.git",
+ "branch": "main",
+ "commit": "3e7eac96d10218728120ce81bee2eeffd5f8fdbb"
}
}
diff --git a/packages/lib/SyncTargetOneDrive.ts b/packages/lib/SyncTargetOneDrive.ts
index e434127e4a1..7ffe5841b8a 100644
--- a/packages/lib/SyncTargetOneDrive.ts
+++ b/packages/lib/SyncTargetOneDrive.ts
@@ -108,7 +108,11 @@ export default class SyncTargetOneDrive extends BaseSyncTarget {
if (!accountProperties) {
accountProperties = await api.execAccountPropertiesRequest();
- context ? context.accountProperties = accountProperties : context = { accountProperties: accountProperties };
+ if (context) {
+ context.accountProperties = accountProperties;
+ } else {
+ context = { accountProperties: accountProperties };
+ }
Setting.setValue(`sync.${this.syncTargetId()}.context`, JSON.stringify(context));
}
api.setAccountProperties(accountProperties);
diff --git a/packages/lib/clipperUtils.ts b/packages/lib/clipperUtils.ts
index 327a045488d..351fb3e5c4f 100644
--- a/packages/lib/clipperUtils.ts
+++ b/packages/lib/clipperUtils.ts
@@ -139,4 +139,5 @@ export function getStyleSheets(doc: Document) {
// Required to run in Firefox with tabs.executeScript. See
// https://stackoverflow.com/a/44774834
+// eslint-disable-next-line no-unused-expressions -- Old code before rule was applied
undefined;
diff --git a/packages/lib/package.json b/packages/lib/package.json
index 63ac03580f8..2f81ba9b463 100644
--- a/packages/lib/package.json
+++ b/packages/lib/package.json
@@ -28,7 +28,6 @@
"@types/node-rsa": "1.1.4",
"@types/react": "18.3.3",
"@types/uuid": "9.0.7",
- "canvas": "2.11.2",
"clean-html": "1.5.0",
"jest": "29.7.0",
"jsdom": "23.2.0",
diff --git a/packages/lib/reducer.test.ts b/packages/lib/reducer.test.ts
index 15eaae44e93..9517af8dce3 100644
--- a/packages/lib/reducer.test.ts
+++ b/packages/lib/reducer.test.ts
@@ -709,13 +709,19 @@ describe('reducer', () => {
// Regression test for #10589.
it.each([
- true, false,
- ])('should preserve note selection if specified while moving a note (preserveSelection: %j)', async (preserveSelection) => {
+ [true, false],
+ [undefined, false],
+ [undefined, true],
+ [false, true],
+ ])('should preserve note selection if specified with an option (preserveSelection: %j, allowSelectionInOtherFolders: %j)', async (
+ preserveSelectionOption, allowSelectionInOtherFolders,
+ ) => {
const folders = await createNTestFolders(3);
const notes = await createNTestNotes(5, folders[0]);
// select the 1st folder and the 1st note
let state = initTestState(folders, 0, notes, [0]);
+ state = { ...state, allowSelectionInOtherFolders };
state = goToNote(notes, [0], state);
expect(state.selectedNoteIds).toHaveLength(1);
@@ -729,11 +735,15 @@ describe('reducer', () => {
await Note.moveToFolder(
state.selectedNoteIds[0],
folders[1].id,
- preserveSelection ? { dispatchOptions: { preserveSelection: true } } : undefined,
+ { dispatchOptions: { preserveSelection: preserveSelectionOption } },
);
expect(BaseModel.dispatch).toHaveBeenCalled();
- if (preserveSelection) {
+
+ // preserveSelectionOption takes precedence over allowSelectionInOtherFolders
+ const shouldPreserveSelection = preserveSelectionOption ?? allowSelectionInOtherFolders;
+
+ if (shouldPreserveSelection) {
expect(state.selectedNoteIds).toMatchObject([notes[0].id]);
} else {
expect(state.selectedNoteIds).toMatchObject([notes[1].id]);
@@ -743,6 +753,27 @@ describe('reducer', () => {
expect(state.selectedFolderId).toBe(folders[0].id);
});
+ test('when selection is allowed in unselected folders, NOTE_UPDATE_ALL should not remove items from the selection', async () => {
+ const folders = await createNTestFolders(2);
+ const notes = await createNTestNotes(2, folders[0]);
+
+ // select the 1st folder and the 1st note
+ let state = initTestState(folders, 0, notes, [0]);
+ state = { ...state, allowSelectionInOtherFolders: true };
+ state = goToNote(notes, [0], state);
+
+ expect(state.selectedNoteIds).toEqual([notes[0].id]);
+ expect(state.notes).toHaveLength(2);
+
+ state = reducer(state, {
+ type: 'NOTE_UPDATE_ALL',
+ notes: [],
+ });
+
+ expect(state.notes).toHaveLength(0);
+ expect(state.selectedNoteIds).toEqual([notes[0].id]);
+ });
+
// window tests
test('switching windows should move state from background to the foreground', async () => {
const folders = await createNTestFolders(2);
diff --git a/packages/lib/reducer.ts b/packages/lib/reducer.ts
index 618681f2b32..c0e830cda6b 100644
--- a/packages/lib/reducer.ts
+++ b/packages/lib/reducer.ts
@@ -169,6 +169,8 @@ export interface State extends WindowState {
mustUpgradeAppMessage: string;
mustAuthenticate: boolean;
+ allowSelectionInOtherFolders: boolean;
+
// Extra reducer keys go here:
pluginService: PluginServiceState;
shareService: ShareServiceState;
@@ -236,6 +238,7 @@ export const defaultState: State = {
lastDeletionNotificationTime: 0,
mustUpgradeAppMessage: '',
mustAuthenticate: false,
+ allowSelectionInOtherFolders: false,
pluginService: pluginServiceDefaultState,
shareService: shareServiceDefaultState,
@@ -1080,7 +1083,9 @@ const reducer = produce((draft: Draft = defaultState, action: any) => {
draft.notes = action.notes;
draft.notesSource = action.notesSource;
draft.noteListLastSortTime = Date.now(); // Notes are already sorted when they are set this way.
- updateSelectedNotesFromExistingNotes(draft);
+ if (!draft.allowSelectionInOtherFolders) {
+ updateSelectedNotesFromExistingNotes(draft);
+ }
break;
// Insert the note into the note list if it's new, or
@@ -1148,7 +1153,8 @@ const reducer = produce((draft: Draft = defaultState, action: any) => {
// For example, if the user drags the current note to a different folder,
// a new note should be selected.
// In some cases, however, the selection needs to be preserved (e.g. the mobile app).
- if (noteFolderHasChanged && !action.preserveSelection) {
+ const preserveSelection = action.preserveSelection ?? draft.allowSelectionInOtherFolders;
+ if (noteFolderHasChanged && !preserveSelection) {
let newIndex = movedNotePreviousIndex;
if (newIndex >= newNotes.length) newIndex = newNotes.length - 1;
if (!newNotes.length) newIndex = -1;
diff --git a/packages/lib/services/e2ee/cryptoTestUtils.ts b/packages/lib/services/e2ee/cryptoTestUtils.ts
index 0c56f9311f5..795762e37d6 100644
--- a/packages/lib/services/e2ee/cryptoTestUtils.ts
+++ b/packages/lib/services/e2ee/cryptoTestUtils.ts
@@ -113,6 +113,7 @@ export async function testStringPerformance(method: EncryptionMethod, dataSize:
const deserialized = await Note.unserialize(serialized);
const decryptedNote = await Note.decrypt(deserialized);
const tick3 = performance.now();
+ // eslint-disable-next-line no-unused-expressions -- Old code before rule was applied
(decryptedNote.title === note.title);
encryptTime += tick2 - tick1;
decryptTime += tick3 - tick2;
diff --git a/packages/lib/services/ocr/OcrService.ts b/packages/lib/services/ocr/OcrService.ts
index a5fc22a416f..5b21641600d 100644
--- a/packages/lib/services/ocr/OcrService.ts
+++ b/packages/lib/services/ocr/OcrService.ts
@@ -135,7 +135,7 @@ export default class OcrService {
const result = await this.recognize(language, resource);
toSave.ocr_status = ResourceOcrStatus.Done;
toSave.ocr_text = filterOcrText(result.text);
- toSave.ocr_details = Resource.serializeOcrDetails(result.lines),
+ toSave.ocr_details = Resource.serializeOcrDetails(result.lines);
toSave.ocr_error = '';
} catch (error) {
const errorMessage = typeof error === 'string' ? error : error?.message;
diff --git a/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts b/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts
index 2696280c7bb..0f79c79c8bf 100644
--- a/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts
+++ b/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts
@@ -15,6 +15,10 @@ const getDefaultPluginsInfo = (): DefaultPluginsInfo => {
// we disable it in Joplin Portable.
enabled: !shim.isPortable(),
},
+
+ 'io.github.personalizedrefrigerator.js-draw': {
+
+ },
};
return defaultPlugins;
};
diff --git a/packages/lib/services/synchronizer/ItemUploader.test.ts b/packages/lib/services/synchronizer/ItemUploader.test.ts
index 7f46438803e..cecba80d263 100644
--- a/packages/lib/services/synchronizer/ItemUploader.test.ts
+++ b/packages/lib/services/synchronizer/ItemUploader.test.ts
@@ -117,7 +117,7 @@ describe('synchronizer/ItemUploader', () => {
expect(callRecorder.length).toBe(0);
await time.msleep(1);
- notes[1] = await Note.save({ title: '22' }),
+ notes[1] = await Note.save({ title: '22' });
await itemUploader.serializeAndUploadItem(Note, BaseItem.systemPath(notes[1]), notes[1]);
expect(callRecorder.length).toBe(1);
}));
diff --git a/packages/lib/shim-init-node.ts b/packages/lib/shim-init-node.ts
index 2c0dec44a3e..4f50e8bdadb 100644
--- a/packages/lib/shim-init-node.ts
+++ b/packages/lib/shim-init-node.ts
@@ -465,7 +465,7 @@ function shimInit(options: ShimInitOptions = null) {
} else {
throw new Error('Unsupported method');
}
- },
+ };
shim.imageFromDataUrl = async function(imageDataUrl, filePath, options = null) {
if (options === null) options = {};
diff --git a/packages/plugin-repo-cli/index.ts b/packages/plugin-repo-cli/index.ts
index cdeb93ad827..f8091d9c7d5 100644
--- a/packages/plugin-repo-cli/index.ts
+++ b/packages/plugin-repo-cli/index.ts
@@ -302,6 +302,7 @@ async function main() {
selectedCommandArgs = args;
}
+ // eslint-disable-next-line no-unused-expressions -- Old code before rule was applied
require('yargs')
.scriptName(scriptName)
.usage('$0 [args]')
diff --git a/packages/renderer/htmlUtils.ts b/packages/renderer/htmlUtils.ts
index d35cf83325f..3dcfc236be1 100644
--- a/packages/renderer/htmlUtils.ts
+++ b/packages/renderer/htmlUtils.ts
@@ -260,6 +260,10 @@ class HtmlUtils {
const parser = new htmlparser2.Parser({
+ oncomment: (encodedData: string) => {
+ output.push(``);
+ },
+
onopentag: (name: string, attrs: Record) => {
// Note: "name" and attribute names are always lowercase even
// when the input is not. So there is no need to call
diff --git a/packages/server/src/routes/index/items.ts b/packages/server/src/routes/index/items.ts
index 8bdf61bab9f..4d122f52e78 100644
--- a/packages/server/src/routes/index/items.ts
+++ b/packages/server/src/routes/index/items.ts
@@ -68,7 +68,7 @@ router.get('items', async (_path: SubPath, ctx: AppContext) => {
};
const view: View = defaultView('items', 'Items');
- view.content.itemTable = makeTableView(table),
+ view.content.itemTable = makeTableView(table);
view.content.postUrl = `${config().baseUrl}/items`;
view.cssFiles = ['index/items'];
return view;
diff --git a/packages/server/src/services/TaskService.test.ts b/packages/server/src/services/TaskService.test.ts
index 7c48b26b6f8..6b61641563b 100644
--- a/packages/server/src/services/TaskService.test.ts
+++ b/packages/server/src/services/TaskService.test.ts
@@ -65,7 +65,7 @@ describe('TaskService', () => {
const tasks = createDemoTasks();
tasks[0].run = async (_models: Models) => {
taskHasRan = true;
- },
+ };
await service.registerTasks(tasks);
const taskId = tasks[0].id;
diff --git a/packages/tools/cspell/dictionary4.txt b/packages/tools/cspell/dictionary4.txt
index bd13933f947..1874a48e25e 100644
--- a/packages/tools/cspell/dictionary4.txt
+++ b/packages/tools/cspell/dictionary4.txt
@@ -147,6 +147,8 @@ setsize
Comprar
seguidores
devbox
+personalizedrefrigerator
+tablist
Ökonomie
Favorite
tablist
diff --git a/packages/tools/postPreReleasesToForum.json b/packages/tools/postPreReleasesToForum.json
index 49dbdd64891..1e102680ff6 100644
--- a/packages/tools/postPreReleasesToForum.json
+++ b/packages/tools/postPreReleasesToForum.json
@@ -115,6 +115,7 @@
"android-v3.2.3": true,
"ios-v13.2.1": true,
"v3.2.4": true,
- "ios-v13.2.2": true
+ "ios-v13.2.2": true,
+ "v3.2.5": true
}
}
\ No newline at end of file
diff --git a/packages/tools/update-readme-contributors.ts b/packages/tools/update-readme-contributors.ts
index 8a1ddd44afa..4e9532d960c 100644
--- a/packages/tools/update-readme-contributors.ts
+++ b/packages/tools/update-readme-contributors.ts
@@ -8,8 +8,6 @@ interface Contributor {
html_url: string;
}
-rootDir;
-
const readmePath = `${rootDir}/README.md`;
const { insertContentIntoFile } = require('./tool-utils.js');
diff --git a/packages/tools/website/processDocs.ts b/packages/tools/website/processDocs.ts
index db4e48c31e0..dbbe36a9c71 100644
--- a/packages/tools/website/processDocs.ts
+++ b/packages/tools/website/processDocs.ts
@@ -159,13 +159,13 @@ const processToken = (token: any, output: string[], context: Context): void => {
context.inFence = true;
content.push(`\`\`\`${token.info || ''}\n`);
} else if (type === 'html_block') {
- contentProcessed = true,
+ contentProcessed = true;
content.push(parseHtml(token.content.trim()));
} else if (type === 'html_inline') {
- contentProcessed = true,
+ contentProcessed = true;
content.push(parseHtml(token.content.trim()));
} else if (type === 'code_inline') {
- contentProcessed = true,
+ contentProcessed = true;
content.push(`\`${token.content}\``);
} else if (type === 'code_block') {
contentProcessed = true;
diff --git a/packages/turndown/src/commonmark-rules.js b/packages/turndown/src/commonmark-rules.js
index b2a3249d2ff..7b94a38ad93 100644
--- a/packages/turndown/src/commonmark-rules.js
+++ b/packages/turndown/src/commonmark-rules.js
@@ -561,7 +561,40 @@ function imageMarkdownFromNode(node, options = null) {
}, options);
if (options.preserveImageTagsWithSize && (node.getAttribute('width') || node.getAttribute('height'))) {
- return node.outerHTML;
+ let html = node.outerHTML;
+
+ // To prevent markup immediately after the image from being interpreted as HTML, a closing tag
+ // is sometimes necessary.
+ const needsClosingTag = () => {
+ const parent = node.parentElement;
+ if (!parent || parent.nodeName !== 'LI') return false;
+ const hasClosingTag = html.match(/<\/[a-z]+\/>$/ig);
+ if (hasClosingTag) {
+ return false;
+ }
+
+ const allChildren = [...parent.childNodes];
+ const nonEmptyChildren = allChildren.filter(item => {
+ // Even if surrounded by #text nodes that only contain whitespace, Markdown after
+ // an can still be incorrectly interpreted as HTML. Only non-empty #texts seem
+ // to prevent this.
+ return item.nodeName !== '#text' || item.textContent.trim() !== '';
+ });
+
+ const imageIndex = nonEmptyChildren.indexOf(node);
+ const hasNextSibling = imageIndex + 1 < nonEmptyChildren.length;
+ const nextSiblingName = hasNextSibling ? (
+ nonEmptyChildren[imageIndex + 1].nodeName
+ ) : null;
+
+ const nextSiblingIsNewLine = nextSiblingName === 'UL' || nextSiblingName === 'OL' || nextSiblingName === 'BR';
+ return imageIndex === 0 && nextSiblingIsNewLine;
+ };
+
+ if (needsClosingTag()) {
+ html = html.replace(/[/]?>$/, `>${node.nodeName.toLowerCase()}>`);
+ }
+ return html;
}
return imageMarkdownFromAttributes({
diff --git a/readme/about/changelog/desktop.md b/readme/about/changelog/desktop.md
index e8aff81d67d..26043a4c166 100644
--- a/readme/about/changelog/desktop.md
+++ b/readme/about/changelog/desktop.md
@@ -1,5 +1,16 @@
# Joplin Desktop Changelog
+## [v3.2.5](https://github.com/laurent22/joplin/releases/tag/v3.2.5) (Pre-release) - 2024-12-18T10:41:13Z
+
+- Improved: Generate .deb package ([#11526](https://github.com/laurent22/joplin/issues/11526) by [@pedr](https://github.com/pedr))
+- Improved: Make js-draw a default plugin ([#11516](https://github.com/laurent22/joplin/issues/11516)) ([#11314](https://github.com/laurent22/joplin/issues/11314))
+- Improved: Make table in HTML format horizontally scrollable ([#11198](https://github.com/laurent22/joplin/issues/11198) by [@wljince007](https://github.com/wljince007))
+- Improved: Reduce application size ([#11505](https://github.com/laurent22/joplin/issues/11505) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator))
+- Improved: Updated packages adm-zip (v0.5.16)
+- Fixed: Fix pressing enter during composition in the title input moves focus ([#11491](https://github.com/laurent22/joplin/issues/11491)) ([#11485](https://github.com/laurent22/joplin/issues/11485) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator))
+- Fixed: Fixed tags with same special unicode characters not matching ([#11513](https://github.com/laurent22/joplin/issues/11513)) ([#11179](https://github.com/laurent22/joplin/issues/11179) by [@pedr](https://github.com/pedr))
+- Fixed: Upgrade `electron-builder` and `@electron/rebuild` ([#11512](https://github.com/laurent22/joplin/issues/11512)) ([#11508](https://github.com/laurent22/joplin/issues/11508) by [@personalizedrefrigerator](https://github.com/personalizedrefrigerator))
+
## [v3.2.4](https://github.com/laurent22/joplin/releases/tag/v3.2.4) (Pre-release) - 2024-12-12T17:59:52Z
- New: Added support for rendered note metadata, in particular the joplin-metadata-print-title tag ([5d84f80](https://github.com/laurent22/joplin/commit/5d84f80))
diff --git a/readme/apps/clipper.md b/readme/apps/clipper.md
index dfffbf384d3..48973beecab 100644
--- a/readme/apps/clipper.md
+++ b/readme/apps/clipper.md
@@ -1,6 +1,6 @@
# Joplin Web Clipper
-The Web Clipper is a browser extension that allows you to save web pages and screenshots from your browser. To start using it, open the Joplin desktop application, go to the **Web Clipper Options** and follow the instructions.
+The Web Clipper is a browser extension that allows you to save web pages and screenshots from your browser. To start using it, open the Joplin desktop application, go to the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/apps/config_screen.md), open the **Web Clipper** section and follow the instructions.
diff --git a/yarn.lock b/yarn.lock
index 94c1041741e..268c749110a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6610,17 +6610,29 @@ __metadata:
languageName: node
linkType: hard
-"@electron/asar@npm:^3.2.1":
- version: 3.2.4
- resolution: "@electron/asar@npm:3.2.4"
+"@electron/asar@npm:3.2.17, @electron/asar@npm:^3.2.7":
+ version: 3.2.17
+ resolution: "@electron/asar@npm:3.2.17"
dependencies:
- chromium-pickle-js: ^0.2.0
commander: ^5.0.0
glob: ^7.1.6
minimatch: ^3.0.4
bin:
asar: bin/asar.js
- checksum: 06e3e8fe7c894f7e7727410af5a9957ec77088f775b22441acf4ef718a9e6642a4dc1672f77ee1ce325fc367c8d59ac1e02f7db07869c8ced8a00132a3b54643
+ checksum: 0b9fae8c508c86e1f844f7e55499ce199609187e2bf9af11a1a2a773805b2bb0ff1d8af43c5e6c0cec8c0de1541b9e263c9bbe5fbf168e44f8c2c1414d6cec6c
+ languageName: node
+ linkType: hard
+
+"@electron/fuses@npm:^1.8.0":
+ version: 1.8.0
+ resolution: "@electron/fuses@npm:1.8.0"
+ dependencies:
+ chalk: ^4.1.1
+ fs-extra: ^9.0.1
+ minimist: ^1.2.5
+ bin:
+ electron-fuses: dist/bin.js
+ checksum: 94cb8ba10d69c0750401fc29cde38215c2b1934014008e98c231f16e78a653209b716a56223a09063e7b6a8526cfeed9223cd8d95559ff4a244d1c3783dec23f
languageName: node
linkType: hard
@@ -6643,14 +6655,23 @@ __metadata:
languageName: node
linkType: hard
-"@electron/notarize@npm:2.2.1":
- version: 2.2.1
- resolution: "@electron/notarize@npm:2.2.1"
+"@electron/node-gyp@git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2":
+ version: 10.2.0-electron.1
+ resolution: "@electron/node-gyp@https://github.com/electron/node-gyp.git#commit=06b29aafb7708acef8b3669835c8a7857ebc92d2"
dependencies:
- debug: ^4.1.1
- fs-extra: ^9.0.1
- promise-retry: ^2.0.1
- checksum: c791a631acb397ec7ad6fa7966e878bbf147c29afae29844276bfcde36509fcd326ac0ad0a3e477ed2aa01abcb3001816311a2d002f6e7e7b81e4fe678915a8b
+ env-paths: ^2.2.0
+ exponential-backoff: ^3.1.1
+ glob: ^8.1.0
+ graceful-fs: ^4.2.6
+ make-fetch-happen: ^10.2.1
+ nopt: ^6.0.0
+ proc-log: ^2.0.1
+ semver: ^7.3.5
+ tar: ^6.2.1
+ which: ^2.0.2
+ bin:
+ node-gyp: ./bin/node-gyp.js
+ checksum: c3a5c3b3a69286db9beceb5beb5141e37e2ccc2dc5f0dffbf53b623c8a6b6e1a762939d143bb2e38b7323b2db8f97f2777309e1cd6351c37b7b2e00ad7797576
languageName: node
linkType: hard
@@ -6665,9 +6686,20 @@ __metadata:
languageName: node
linkType: hard
-"@electron/osx-sign@npm:1.0.5":
- version: 1.0.5
- resolution: "@electron/osx-sign@npm:1.0.5"
+"@electron/notarize@npm:2.5.0":
+ version: 2.5.0
+ resolution: "@electron/notarize@npm:2.5.0"
+ dependencies:
+ debug: ^4.1.1
+ fs-extra: ^9.0.1
+ promise-retry: ^2.0.1
+ checksum: b8935a9648ae53429d6d476b473ae180d76ad281ccd34318ddc45c030c112501b966cd2609f00b74d0127f6f77dec8de134c2b8bbe356da9a84cfa3fea2d06ab
+ languageName: node
+ linkType: hard
+
+"@electron/osx-sign@npm:1.3.1":
+ version: 1.3.1
+ resolution: "@electron/osx-sign@npm:1.3.1"
dependencies:
compare-version: ^0.1.2
debug: ^4.3.4
@@ -6678,14 +6710,15 @@ __metadata:
bin:
electron-osx-flat: bin/electron-osx-flat.js
electron-osx-sign: bin/electron-osx-sign.js
- checksum: 6c662e8bb4322b83f0147ddb4f5815770aca980a2cefc58a8423d502ccee4428168e11fa3c50f9660d29a74e3397f96c4f6ebddf1695ed28366aac0b92a49029
+ checksum: b35f3ee3220473b3578c5e7b279b3e0596d3161e19cede6ff283dcb1ba92183982fbd8d9c31929ecc3d1b57aa2e7cb787a9c0fce1c82f3a24a612bb3280033a0
languageName: node
linkType: hard
-"@electron/rebuild@npm:3.6.0":
- version: 3.6.0
- resolution: "@electron/rebuild@npm:3.6.0"
+"@electron/rebuild@npm:3.7.0":
+ version: 3.7.0
+ resolution: "@electron/rebuild@npm:3.7.0"
dependencies:
+ "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2"
"@malept/cross-spawn-promise": ^2.0.0
chalk: ^4.0.0
debug: ^4.1.1
@@ -6694,7 +6727,7 @@ __metadata:
got: ^11.7.0
node-abi: ^3.45.0
node-api-version: ^0.2.0
- node-gyp: ^9.0.0
+ node-gyp: latest
ora: ^5.1.0
read-binary-file-arch: ^1.0.6
semver: ^7.3.5
@@ -6702,7 +6735,32 @@ __metadata:
yargs: ^17.0.1
bin:
electron-rebuild: lib/cli.js
- checksum: 0dbf320b71ba5bc31ff7e0f46b157a16d56a7ee2b2d503ad60b46fe4673f9ba63c5b270a00e44856564e6a9fd5da216034a26eb3321679c40b681156ab6289a2
+ checksum: b51e4782032e7ae3bc4bef581a257efff4f4afad833d30b22dbbe5d11c727817748aeb7032cdf12c6edf3613108654fde0c777a37dbeb156d1301683893e5400
+ languageName: node
+ linkType: hard
+
+"@electron/rebuild@npm:3.7.1":
+ version: 3.7.1
+ resolution: "@electron/rebuild@npm:3.7.1"
+ dependencies:
+ "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2"
+ "@malept/cross-spawn-promise": ^2.0.0
+ chalk: ^4.0.0
+ debug: ^4.1.1
+ detect-libc: ^2.0.1
+ fs-extra: ^10.0.0
+ got: ^11.7.0
+ node-abi: ^3.45.0
+ node-api-version: ^0.2.0
+ node-gyp: latest
+ ora: ^5.1.0
+ read-binary-file-arch: ^1.0.6
+ semver: ^7.3.5
+ tar: ^6.0.5
+ yargs: ^17.0.1
+ bin:
+ electron-rebuild: lib/cli.js
+ checksum: 8789c02bd5ee91372988c2698d9b476f6732daf801ae62e92818077e3bdf6de1ffd4e363cfcad66de8be4077fd41e8369a7a67191a9dd1bfbe3b39c184289683
languageName: node
linkType: hard
@@ -6715,18 +6773,18 @@ __metadata:
languageName: node
linkType: hard
-"@electron/universal@npm:1.5.1":
- version: 1.5.1
- resolution: "@electron/universal@npm:1.5.1"
+"@electron/universal@npm:2.0.1":
+ version: 2.0.1
+ resolution: "@electron/universal@npm:2.0.1"
dependencies:
- "@electron/asar": ^3.2.1
- "@malept/cross-spawn-promise": ^1.1.0
+ "@electron/asar": ^3.2.7
+ "@malept/cross-spawn-promise": ^2.0.0
debug: ^4.3.1
- dir-compare: ^3.0.0
- fs-extra: ^9.0.1
- minimatch: ^3.0.4
- plist: ^3.0.4
- checksum: 55eb09dce1f870efaf0bfd98b65042ff3dd5d868deeede2e5266ed5d041b75d9c5108050de6ebfda299d756f31ce66633a0d7585fdcad849337d8c2925709154
+ dir-compare: ^4.2.0
+ fs-extra: ^11.1.1
+ minimatch: ^9.0.3
+ plist: ^3.1.0
+ checksum: adbfcc4306d39dcbff97030f86c96559c17cc76858a93a598dce7d1f7a735c71379e74a74baf4dea35a4bda959e6b42356886e8765f8e6ff7d43f92ab846f316
languageName: node
linkType: hard
@@ -8269,7 +8327,7 @@ __metadata:
7zip-bin: 5.2.0
"@axe-core/playwright": 4.10.0
"@electron/notarize": 2.3.2
- "@electron/rebuild": 3.6.0
+ "@electron/rebuild": 3.7.1
"@electron/remote": 2.1.2
"@fortawesome/fontawesome-free": 5.15.4
"@joeattardi/emoji-button": 4.6.4
@@ -8298,7 +8356,7 @@ __metadata:
countable: 3.0.1
debounce: 1.2.1
electron: 32.2.0
- electron-builder: 24.13.3
+ electron-builder: 26.0.0-alpha.7
electron-updater: 6.2.1
electron-window-state: 5.0.3
formatcoords: 1.1.3
@@ -8364,7 +8422,7 @@ __metadata:
"@joplin/tools": ~3.2
"@joplin/utils": ~3.2
"@js-draw/material-icons": 1.20.3
- "@react-native-clipboard/clipboard": 1.14.1
+ "@react-native-clipboard/clipboard": 1.14.2
"@react-native-community/datetimepicker": 8.2.0
"@react-native-community/geolocation": 3.3.0
"@react-native-community/netinfo": 11.3.3
@@ -8620,7 +8678,6 @@ __metadata:
base-64: 1.0.0
base64-stream: 1.0.0
builtin-modules: 3.3.0
- canvas: 2.11.2
chokidar: 3.6.0
clean-html: 1.5.0
color: 3.2.1
@@ -10155,15 +10212,6 @@ __metadata:
languageName: node
linkType: hard
-"@malept/cross-spawn-promise@npm:^1.1.0":
- version: 1.1.1
- resolution: "@malept/cross-spawn-promise@npm:1.1.1"
- dependencies:
- cross-spawn: ^7.0.1
- checksum: 1aa468f9ff3aa59dbaa720731ddf9c1928228b6844358d8821b86628953e0608420e88c6366d85af35acad73b1addaa472026a1836ad3fec34813eb38b2bd25a
- languageName: node
- linkType: hard
-
"@malept/cross-spawn-promise@npm:^2.0.0":
version: 2.0.0
resolution: "@malept/cross-spawn-promise@npm:2.0.0"
@@ -10756,15 +10804,20 @@ __metadata:
languageName: node
linkType: hard
-"@react-native-clipboard/clipboard@npm:1.14.1":
- version: 1.14.1
- resolution: "@react-native-clipboard/clipboard@npm:1.14.1"
+"@react-native-clipboard/clipboard@npm:1.14.2":
+ version: 1.14.2
+ resolution: "@react-native-clipboard/clipboard@npm:1.14.2"
peerDependencies:
- react: 16.9.0 || 16.11.0 || 16.13.1 || 17.0.1 || 17.0.2 || 18.0.0 || 18.1.0 || 18.2.0
- react-native: ^0.61.5 || ^0.62.3 || ^0.63.2 || ^0.64.2 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0
- react-native-macos: ^0.61.0 || ^0.62.0 || ^0.63.0 || ^0.64.0 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0
- react-native-windows: ^0.61.0 || ^0.62.0 || ^0.63.0 || ^0.64.0 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0
- checksum: 005ce2bee4d6e30b2a6b11be0d0ee169ab108d24f2a9b518b0ba8e5b96616c6dfb089c28644c1b5e3c1b9aa786c92cbf781e525223f56ab8589da1df79cae31f
+ react: ">= 16.9.0"
+ react-native: ">= 0.61.5"
+ react-native-macos: ">= 0.61.0"
+ react-native-windows: ">= 0.61.0"
+ peerDependenciesMeta:
+ react-native-macos:
+ optional: true
+ react-native-windows:
+ optional: true
+ checksum: a14c7de784f78c360b41fc723221d1091ccf59dc12ff5dcadf11c7fe078ae081afa1b95f2fe3cf0d4fcd25bc0e2a04cc56fb85aff8437de19cb2eba7d95362df
languageName: node
linkType: hard
@@ -15152,6 +15205,13 @@ __metadata:
languageName: node
linkType: hard
+"agent-base@npm:^7.1.2":
+ version: 7.1.3
+ resolution: "agent-base@npm:7.1.3"
+ checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753
+ languageName: node
+ linkType: hard
+
"agent-base@npm:~4.2.1":
version: 4.2.1
resolution: "agent-base@npm:4.2.1"
@@ -15563,48 +15623,53 @@ __metadata:
languageName: node
linkType: hard
-"app-builder-bin@npm:4.0.0":
- version: 4.0.0
- resolution: "app-builder-bin@npm:4.0.0"
- checksum: c3c8fd85c371b7a396c1bb1160ab2e3231ba4309abea5b36a5b366e42511e347c65a33ff50d56f4960b337833d539c263137b0ba131e2fa268c32edeb6c9f683
+"app-builder-bin@npm:5.0.0-alpha.11":
+ version: 5.0.0-alpha.11
+ resolution: "app-builder-bin@npm:5.0.0-alpha.11"
+ checksum: d448169c7f58ca6cb189df2f7b67ca7a8ebae946a81e5622b01a3f9e3c3caed77087762408aef64ba4c762cdb3909d38d5bab8f995861e0f2647005ef1358eed
languageName: node
linkType: hard
-"app-builder-lib@npm:24.13.3":
- version: 24.13.3
- resolution: "app-builder-lib@npm:24.13.3"
+"app-builder-lib@npm:26.0.0-alpha.7":
+ version: 26.0.0-alpha.7
+ resolution: "app-builder-lib@npm:26.0.0-alpha.7"
dependencies:
"@develar/schema-utils": ~2.6.5
- "@electron/notarize": 2.2.1
- "@electron/osx-sign": 1.0.5
- "@electron/universal": 1.5.1
+ "@electron/asar": 3.2.17
+ "@electron/fuses": ^1.8.0
+ "@electron/notarize": 2.5.0
+ "@electron/osx-sign": 1.3.1
+ "@electron/rebuild": 3.7.0
+ "@electron/universal": 2.0.1
"@malept/flatpak-bundler": ^0.4.0
"@types/fs-extra": 9.0.13
async-exit-hook: ^2.0.1
bluebird-lst: ^1.0.9
- builder-util: 24.13.1
- builder-util-runtime: 9.2.4
+ builder-util: 26.0.0-alpha.7
+ builder-util-runtime: 9.2.10
chromium-pickle-js: ^0.2.0
+ config-file-ts: 0.2.8-rc1
debug: ^4.3.4
+ dotenv: ^16.4.5
+ dotenv-expand: ^11.0.6
ejs: ^3.1.8
- electron-publish: 24.13.1
- form-data: ^4.0.0
+ electron-publish: 26.0.0-alpha.7
fs-extra: ^10.1.0
hosted-git-info: ^4.1.0
is-ci: ^3.0.0
isbinaryfile: ^5.0.0
js-yaml: ^4.1.0
+ json5: ^2.2.3
lazy-val: ^1.0.5
- minimatch: ^5.1.1
- read-config-file: 6.3.2
- sanitize-filename: ^1.6.3
+ minimatch: ^10.0.0
+ resedit: ^1.7.0
semver: ^7.3.8
tar: ^6.1.12
temp-file: ^3.4.0
peerDependencies:
- dmg-builder: 24.13.3
- electron-builder-squirrel-windows: 24.13.3
- checksum: 68ea3295efe99b8e8d4f9a1e77f3eae34de01b9829f8907e467d658b9406aa04c95baa2c06142b29bd8184d4efdc69f176a53d62fec36e7eba80024c46ce5adc
+ dmg-builder: 26.0.0-alpha.7
+ electron-builder-squirrel-windows: 26.0.0-alpha.7
+ checksum: 6a0852f51e352755cb1b1d99b5c24cc801ec528e1f301d2d3a2fa19c02b2edc383428a4a15b635c4f5f86afa4039d8a404006462f7c28e4caa99736ffd497001
languageName: node
linkType: hard
@@ -17753,6 +17818,16 @@ __metadata:
languageName: node
linkType: hard
+"builder-util-runtime@npm:9.2.10":
+ version: 9.2.10
+ resolution: "builder-util-runtime@npm:9.2.10"
+ dependencies:
+ debug: ^4.3.4
+ sax: ^1.2.4
+ checksum: 4507253fc7d50943526d00725322cbfdc9b80aad44c4a160eb4257a8ec97ddc6262448ddd840aa1520e2a4252b2b5b04d0a5caac2138be033117f1d445cf5ce7
+ languageName: node
+ linkType: hard
+
"builder-util-runtime@npm:9.2.4":
version: 9.2.4
resolution: "builder-util-runtime@npm:9.2.4"
@@ -17763,27 +17838,28 @@ __metadata:
languageName: node
linkType: hard
-"builder-util@npm:24.13.1":
- version: 24.13.1
- resolution: "builder-util@npm:24.13.1"
+"builder-util@npm:26.0.0-alpha.7":
+ version: 26.0.0-alpha.7
+ resolution: "builder-util@npm:26.0.0-alpha.7"
dependencies:
7zip-bin: ~5.2.0
"@types/debug": ^4.1.6
- app-builder-bin: 4.0.0
+ app-builder-bin: 5.0.0-alpha.11
bluebird-lst: ^1.0.9
- builder-util-runtime: 9.2.4
+ builder-util-runtime: 9.2.10
chalk: ^4.1.2
cross-spawn: ^7.0.3
debug: ^4.3.4
fs-extra: ^10.1.0
- http-proxy-agent: ^5.0.0
- https-proxy-agent: ^5.0.1
+ http-proxy-agent: ^7.0.0
+ https-proxy-agent: ^7.0.0
is-ci: ^3.0.0
js-yaml: ^4.1.0
+ sanitize-filename: ^1.6.3
source-map-support: ^0.5.19
stat-mode: ^1.0.0
temp-file: ^3.4.0
- checksum: 2991ee7ce2677736ca918d408180f93f2178decd17951164e31b90f01b7165a7e30d3d4d2a552978ec67b66be5cbe7a858deb581ff2aa9c4ba18fc1e72bf057d
+ checksum: 7dfe6d5559b63b5506a27bfcc67d8d15f2b96c82168dfc8c69437eb4408e909d6df36ae0d3bfa8d8a64079f041eac15c96404a92b5bf4adc2ec47c6ad3895fd8
languageName: node
linkType: hard
@@ -18310,7 +18386,7 @@ __metadata:
languageName: node
linkType: hard
-"canvas@npm:2.11.2, canvas@npm:^2.11.2":
+"canvas@npm:^2.11.2":
version: 2.11.2
resolution: "canvas@npm:2.11.2"
dependencies:
@@ -18380,7 +18456,7 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:4, chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
+"chalk@npm:4, chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
dependencies:
@@ -19528,13 +19604,13 @@ __metadata:
languageName: node
linkType: hard
-"config-file-ts@npm:^0.2.4":
- version: 0.2.4
- resolution: "config-file-ts@npm:0.2.4"
+"config-file-ts@npm:0.2.8-rc1":
+ version: 0.2.8-rc1
+ resolution: "config-file-ts@npm:0.2.8-rc1"
dependencies:
- glob: ^7.1.6
- typescript: ^4.0.2
- checksum: c7032064c0b00d7a3c429ea4dad477cc32a66370a0a2c39440feea0568158e662781cb905a54319be50f0345a63045ecbd7cc9a9ccbf0cc15744f874deea8029
+ glob: ^10.3.12
+ typescript: ^5.4.3
+ checksum: 820547f430e6b977b0be2ff25b37b890f7541edf523017afeba5351013bd7910aa3050679e5a58cde9b8414c59ef4d5b0a215f29fa5ab74e558fa56d31b6f65e
languageName: node
linkType: hard
@@ -22139,13 +22215,13 @@ __metadata:
languageName: node
linkType: hard
-"dir-compare@npm:^3.0.0":
- version: 3.3.0
- resolution: "dir-compare@npm:3.3.0"
+"dir-compare@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "dir-compare@npm:4.2.0"
dependencies:
- buffer-equal: ^1.0.0
- minimatch: ^3.0.4
- checksum: 05e7381509b17cb4e6791bd9569c12ce4267f44b1ee36594946ed895ed7ad24da9285130dc42af3a60707d58c76307bb3a1cbae2acd0a9cce8c74664e6a26828
+ minimatch: ^3.0.5
+ p-limit: "^3.1.0 "
+ checksum: 138ee3c7716f45c1dc100efdf6b9517459428f1cb83fecda1f0dc633326d911a01f6456ff68333f916209649321c70fa004f448f137531664582ecddde4e2601
languageName: node
linkType: hard
@@ -22176,13 +22252,13 @@ __metadata:
languageName: node
linkType: hard
-"dmg-builder@npm:24.13.3":
- version: 24.13.3
- resolution: "dmg-builder@npm:24.13.3"
+"dmg-builder@npm:26.0.0-alpha.7":
+ version: 26.0.0-alpha.7
+ resolution: "dmg-builder@npm:26.0.0-alpha.7"
dependencies:
- app-builder-lib: 24.13.3
- builder-util: 24.13.1
- builder-util-runtime: 9.2.4
+ app-builder-lib: 26.0.0-alpha.7
+ builder-util: 26.0.0-alpha.7
+ builder-util-runtime: 9.2.10
dmg-license: ^1.0.11
fs-extra: ^10.1.0
iconv-lite: ^0.6.2
@@ -22190,7 +22266,7 @@ __metadata:
dependenciesMeta:
dmg-license:
optional: true
- checksum: 5c25293d795bb3326baee9d911d797a1ec703ad78ba57b60c6e6ce672582fe820590c59913b6800885e8303c853b3797ce518e304aa83f568caab147e1e8979a
+ checksum: 9f7c0f48e48264257684b84514ae82d47ff950d18d24f42da836b1d7c93e2b6c909a6e1e574cc32afabcad81f9d1f23821e5965823d03c28c7b79a798ccdaeec
languageName: node
linkType: hard
@@ -22471,10 +22547,12 @@ __metadata:
languageName: node
linkType: hard
-"dotenv-expand@npm:^5.1.0":
- version: 5.1.0
- resolution: "dotenv-expand@npm:5.1.0"
- checksum: 8017675b7f254384915d55f9eb6388e577cf0a1231a28d54b0ca03b782be9501b0ac90ac57338636d395fa59051e6209e9b44b8ddf169ce6076dffb5dea227d3
+"dotenv-expand@npm:^11.0.6":
+ version: 11.0.7
+ resolution: "dotenv-expand@npm:11.0.7"
+ dependencies:
+ dotenv: ^16.4.5
+ checksum: 58455ad9ffedbf6180b49f8f35596da54f10b02efcaabcba5400363f432e1da057113eee39b42365535da41df1e794d54a4aa67b22b37c41686c3dce4e6a28c5
languageName: node
linkType: hard
@@ -22494,10 +22572,10 @@ __metadata:
languageName: node
linkType: hard
-"dotenv@npm:^9.0.2":
- version: 9.0.2
- resolution: "dotenv@npm:9.0.2"
- checksum: 6b7980330a653089bc9b83362248547791151ee74f9881eb223ac2f4d641b174b708f77315d88708b551d45b4177afd3ba71bca4832f8807e003f71c2a0f83e7
+"dotenv@npm:^16.4.5":
+ version: 16.4.7
+ resolution: "dotenv@npm:16.4.7"
+ checksum: c27419b5875a44addcc56cc69b7dc5b0e6587826ca85d5b355da9303c6fc317fc9989f1f18366a16378c9fdd9532d14117a1abe6029cc719cdbbef6eaef2cea4
languageName: node
linkType: hard
@@ -22604,40 +22682,40 @@ __metadata:
languageName: node
linkType: hard
-"electron-builder@npm:24.13.3":
- version: 24.13.3
- resolution: "electron-builder@npm:24.13.3"
+"electron-builder@npm:26.0.0-alpha.7":
+ version: 26.0.0-alpha.7
+ resolution: "electron-builder@npm:26.0.0-alpha.7"
dependencies:
- app-builder-lib: 24.13.3
- builder-util: 24.13.1
- builder-util-runtime: 9.2.4
+ app-builder-lib: 26.0.0-alpha.7
+ builder-util: 26.0.0-alpha.7
+ builder-util-runtime: 9.2.10
chalk: ^4.1.2
- dmg-builder: 24.13.3
+ dmg-builder: 26.0.0-alpha.7
fs-extra: ^10.1.0
is-ci: ^3.0.0
lazy-val: ^1.0.5
- read-config-file: 6.3.2
simple-update-notifier: 2.0.0
yargs: ^17.6.2
bin:
electron-builder: cli.js
install-app-deps: install-app-deps.js
- checksum: 8d7943d990363e547f1fbe391fee6b94d5e35e78c355645399f1f9b6709b6c167f0781abf8926c984c8a92475e6647f863f5e6a6938101a8a3a18ca85559810b
+ checksum: 352da4ae782db336ff17102b0f7d9db24bc710ef2848d77cde7a99345d5f9f65b4e177a1f9dc5e36e9a5ac0c104b6a1d6eb6c588e8b302cc89a50fc1fd33eaf8
languageName: node
linkType: hard
-"electron-publish@npm:24.13.1":
- version: 24.13.1
- resolution: "electron-publish@npm:24.13.1"
+"electron-publish@npm:26.0.0-alpha.7":
+ version: 26.0.0-alpha.7
+ resolution: "electron-publish@npm:26.0.0-alpha.7"
dependencies:
"@types/fs-extra": ^9.0.11
- builder-util: 24.13.1
- builder-util-runtime: 9.2.4
+ builder-util: 26.0.0-alpha.7
+ builder-util-runtime: 9.2.10
chalk: ^4.1.2
+ form-data: ^4.0.0
fs-extra: ^10.1.0
lazy-val: ^1.0.5
mime: ^2.5.2
- checksum: 7cd9924c967418074126f090404265efd93108a5ece7a5fe053df6ae647da9da264991f98a2463f5ac06c56e2e8f58f0d44ada04ad7a6374d3b870e95198117e
+ checksum: aaf5d19c419975d5bf608eb7ec1ea974204269e42cdba61b9479eb3a1f2fba14f34915994f43812d6825a688ca50e6ffdc13463abfc8e302193220bca17add81
languageName: node
linkType: hard
@@ -25661,7 +25739,7 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:11.2.0":
+"fs-extra@npm:11.2.0, fs-extra@npm:^11.1.1":
version: 11.2.0
resolution: "fs-extra@npm:11.2.0"
dependencies:
@@ -26476,7 +26554,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:10.4.5, glob@npm:^10.3.7, glob@npm:^10.4.2":
+"glob@npm:10.4.5, glob@npm:^10.3.12, glob@npm:^10.3.7, glob@npm:^10.4.2":
version: 10.4.5
resolution: "glob@npm:10.4.5"
dependencies:
@@ -26563,7 +26641,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^8.0.1":
+"glob@npm:^8.0.1, glob@npm:^8.1.0":
version: 8.1.0
resolution: "glob@npm:8.1.0"
dependencies:
@@ -27981,6 +28059,16 @@ __metadata:
languageName: node
linkType: hard
+"https-proxy-agent@npm:^7.0.0":
+ version: 7.0.6
+ resolution: "https-proxy-agent@npm:7.0.6"
+ dependencies:
+ agent-base: ^7.1.2
+ debug: 4
+ checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d
+ languageName: node
+ linkType: hard
+
"https-proxy-agent@npm:^7.0.2":
version: 7.0.2
resolution: "https-proxy-agent@npm:7.0.2"
@@ -31294,7 +31382,7 @@ __metadata:
languageName: node
linkType: hard
-"json5@npm:^2.2.0, json5@npm:^2.2.2, json5@npm:^2.2.3":
+"json5@npm:^2.2.2, json5@npm:^2.2.3":
version: 2.2.3
resolution: "json5@npm:2.2.3"
bin:
@@ -31772,7 +31860,7 @@ __metadata:
languageName: node
linkType: hard
-"lazy-val@npm:^1.0.4, lazy-val@npm:^1.0.5":
+"lazy-val@npm:^1.0.5":
version: 1.0.5
resolution: "lazy-val@npm:1.0.5"
checksum: 31e12e0b118826dfae74f8f3ff8ebcddfe4200ff88d0d448db175c7265ee537e0ba55488d411728246337f3ed3c9ec68416f10889f632a2ce28fb7a970909fb5
@@ -32786,7 +32874,7 @@ __metadata:
languageName: node
linkType: hard
-"make-fetch-happen@npm:^10.0.3":
+"make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.2.1":
version: 10.2.1
resolution: "make-fetch-happen@npm:10.2.1"
dependencies:
@@ -34282,6 +34370,15 @@ __metadata:
languageName: node
linkType: hard
+"minimatch@npm:^10.0.0":
+ version: 10.0.1
+ resolution: "minimatch@npm:10.0.1"
+ dependencies:
+ brace-expansion: ^2.0.1
+ checksum: f5b63c2f30606091a057c5f679b067f84a2cd0ffbd2dbc9143bda850afd353c7be81949ff11ae0c86988f07390eeca64efd7143ee05a0dab37f6c6b38a2ebb6c
+ languageName: node
+ linkType: hard
+
"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4":
version: 3.0.4
resolution: "minimatch@npm:3.0.4"
@@ -34300,15 +34397,6 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^5.1.1":
- version: 5.1.6
- resolution: "minimatch@npm:5.1.6"
- dependencies:
- brace-expansion: ^2.0.1
- checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77
- languageName: node
- linkType: hard
-
"minimatch@npm:^7.2.0":
version: 7.4.2
resolution: "minimatch@npm:7.4.2"
@@ -34327,6 +34415,15 @@ __metadata:
languageName: node
linkType: hard
+"minimatch@npm:^9.0.3":
+ version: 9.0.5
+ resolution: "minimatch@npm:9.0.5"
+ dependencies:
+ brace-expansion: ^2.0.1
+ checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28
+ languageName: node
+ linkType: hard
+
"minimatch@npm:^9.0.4":
version: 9.0.4
resolution: "minimatch@npm:9.0.4"
@@ -36547,7 +36644,7 @@ __metadata:
languageName: node
linkType: hard
-"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0":
+"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0, p-limit@npm:^3.1.0 ":
version: 3.1.0
resolution: "p-limit@npm:3.1.0"
dependencies:
@@ -37381,6 +37478,13 @@ __metadata:
languageName: node
linkType: hard
+"pe-library@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "pe-library@npm:0.4.1"
+ checksum: a31b532fd5e28c8d45d82fc5b774e220d2f6d8e9d1145d4711e0737a50e624eb4ff3e1b0f1faf44cc5be22abdf4aa9177ae4741d1cceb695188e5d1f1ccdede9
+ languageName: node
+ linkType: hard
+
"peek-readable@npm:^4.1.0":
version: 4.1.0
resolution: "peek-readable@npm:4.1.0"
@@ -37721,7 +37825,7 @@ __metadata:
languageName: node
linkType: hard
-"plist@npm:^3.0.4, plist@npm:^3.0.5":
+"plist@npm:^3.0.4, plist@npm:^3.0.5, plist@npm:^3.1.0":
version: 3.1.0
resolution: "plist@npm:3.1.0"
dependencies:
@@ -38696,6 +38800,13 @@ __metadata:
languageName: node
linkType: hard
+"proc-log@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "proc-log@npm:2.0.1"
+ checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f
+ languageName: node
+ linkType: hard
+
"proc-log@npm:^3.0.0":
version: 3.0.0
resolution: "proc-log@npm:3.0.0"
@@ -40283,20 +40394,6 @@ __metadata:
languageName: node
linkType: hard
-"read-config-file@npm:6.3.2":
- version: 6.3.2
- resolution: "read-config-file@npm:6.3.2"
- dependencies:
- config-file-ts: ^0.2.4
- dotenv: ^9.0.2
- dotenv-expand: ^5.1.0
- js-yaml: ^4.1.0
- json5: ^2.2.0
- lazy-val: ^1.0.4
- checksum: bb4862851b616f905219a474fe92e37f2a65e07cda896cd3a89b3b357d38f9bfc3fd3d443e2f9c5fdd85b5166d5d09d49088dd8933cd82fd606c017a20703007
- languageName: node
- linkType: hard
-
"read-installed-packages@npm:^2.0.1":
version: 2.0.1
resolution: "read-installed-packages@npm:2.0.1"
@@ -41155,6 +41252,15 @@ __metadata:
languageName: node
linkType: hard
+"resedit@npm:^1.7.0":
+ version: 1.7.2
+ resolution: "resedit@npm:1.7.2"
+ dependencies:
+ pe-library: ^0.4.1
+ checksum: 53ee7ddd19c93005f4a71525088f64bee783a6e8ba3c3a84fc34fae334227bd498e5c8a2dc2356558435b848be972c0fd54bda1e5500baa36c9d2a045925ed50
+ languageName: node
+ linkType: hard
+
"reselect@npm:4.1.8":
version: 4.1.8
resolution: "reselect@npm:4.1.8"
@@ -44944,7 +45050,7 @@ __metadata:
languageName: node
linkType: hard
-"tar@npm:6.2.1":
+"tar@npm:6.2.1, tar@npm:^6.2.1":
version: 6.2.1
resolution: "tar@npm:6.2.1"
dependencies:
@@ -46552,23 +46658,23 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^4.0.2":
- version: 4.9.5
- resolution: "typescript@npm:4.9.5"
+"typescript@npm:^5.0.4, typescript@npm:^5.4.4":
+ version: 5.6.3
+ resolution: "typescript@npm:5.6.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
+ checksum: ba302f8822777ebefb28b554105f3e074466b671e7444ec6b75dadc008a62f46f373d9e57ceced1c433756d06c8b7dc569a7eefdf3a9573122a49205ff99021a
languageName: node
linkType: hard
-"typescript@npm:^5.0.4, typescript@npm:^5.4.4":
- version: 5.6.3
- resolution: "typescript@npm:5.6.3"
+"typescript@npm:^5.4.3":
+ version: 5.7.2
+ resolution: "typescript@npm:5.7.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: ba302f8822777ebefb28b554105f3e074466b671e7444ec6b75dadc008a62f46f373d9e57ceced1c433756d06c8b7dc569a7eefdf3a9573122a49205ff99021a
+ checksum: b55300c4cefee8ee380d14fa9359ccb41ff8b54c719f6bc49b424899d662a5ce62ece390ce769568c7f4d14af844085255e63788740084444eb12ef423b13433
languageName: node
linkType: hard
@@ -46602,23 +46708,23 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@^4.0.2#~builtin":
- version: 4.9.5
- resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587"
+"typescript@patch:typescript@^5.0.4#~builtin, typescript@patch:typescript@^5.4.4#~builtin":
+ version: 5.6.3
+ resolution: "typescript@patch:typescript@npm%3A5.6.3#~builtin::version=5.6.3&hash=379a07"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 1f8f3b6aaea19f0f67cba79057674ba580438a7db55057eb89cc06950483c5d632115c14077f6663ea76fd09fce3c190e6414bb98582ec80aa5a4eaf345d5b68
+ checksum: ade87bce2363ee963eed0e4ca8a312ea02c81873ebd53609bc3f6dc0a57f6e61ad7e3fb8cbb7f7ab8b5081cbee801b023f7c4823ee70b1c447eae050e6c7622b
languageName: node
linkType: hard
-"typescript@patch:typescript@^5.0.4#~builtin, typescript@patch:typescript@^5.4.4#~builtin":
- version: 5.6.3
- resolution: "typescript@patch:typescript@npm%3A5.6.3#~builtin::version=5.6.3&hash=379a07"
+"typescript@patch:typescript@^5.4.3#~builtin":
+ version: 5.7.2
+ resolution: "typescript@patch:typescript@npm%3A5.7.2#~builtin::version=5.7.2&hash=379a07"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: ade87bce2363ee963eed0e4ca8a312ea02c81873ebd53609bc3f6dc0a57f6e61ad7e3fb8cbb7f7ab8b5081cbee801b023f7c4823ee70b1c447eae050e6c7622b
+ checksum: 803430c6da2ba73c25a21880d8d4f08a56d9d2444e6db2ea949ac4abceeece8e4a442b7b9b585db7d8a0b47ebda2060e45fe8ee8b8aca23e27ec1d4844987ee6
languageName: node
linkType: hard