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 @@ + \ 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(/[/]?>$/, `>`); + } + 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