diff --git a/.agents/skills/esm-cjs-risk-scan/SKILL.md b/.agents/skills/esm-cjs-risk-scan/SKILL.md index 9b8542da3b..cc1bcc5a83 100644 --- a/.agents/skills/esm-cjs-risk-scan/SKILL.md +++ b/.agents/skills/esm-cjs-risk-scan/SKILL.md @@ -183,7 +183,7 @@ In the actual Electron runtime, the `electron` module IS the framework, so `Brow **How the scanner detects this:** If every probe failure contains `'electron'` in the error message (the named-export failure pattern), the package is reclassified from `module-unloadable` → `module-electron-dep` and from MEDIUM/HIGH → **OK**. Probe column shows `ERR(e-dep)` to mark the probe location. -**When to verify manually:** If a new package shows `esm-edep` unexpectedly, inspect its source — it should contain `import ... from 'electron'` or use Electron APIs directly. You can also check the compiled `static/shadow-cljs/` shim files after a build to confirm `require("pkg")` is generated. +**When to verify manually:** If a new package shows `esm-edep` unexpectedly, inspect its source — it should contain `import ... from 'electron'` or use Electron APIs directly. You can also check the compiled Electron shim cache at `.shadow-cljs/builds/electron/dev/goog-js/` (Transit JSON, dev build) or `.shadow-cljs/builds/electron/release/closure-inputs/` (plain JS, release build) for `shadow.js.shim.module$.js` files — their content will show `require("pkg")` if shadow-cljs successfully resolved the package for the Node/Electron target. ### Understanding the plain-Node probe limitation @@ -192,7 +192,9 @@ The scanner runs `require()` and `import()` probes in a plain Node.js process (` - The scanner uses the `module-electron-dep` heuristic to handle this case automatically - For packages that use Electron APIs in unusual ways (not just `import ... from 'electron'`), a manual check may be needed -If a build has already been compiled, you can inspect `static/shadow-cljs/` for `shadow.js.shim.module$` files. The presence of `require("pkg")` in a shim confirms shadow-cljs successfully resolved the package for Electron. This is the definitive ground truth; the scanner's probe is a pre-build approximation. +If a build has already been compiled, you can inspect `.shadow-cljs/builds/electron/release/closure-inputs/` for `shadow.js.shim.module$.js` files (plain JS, immediately readable). The presence of `require("pkg")` in the shim content confirms shadow-cljs successfully resolved the package for the Electron Node target. This is the definitive ground truth; the scanner's probe is a pre-build approximation. + +> **Note:** `static/js/cljs-runtime/` contains shims for browser worker targets that use `:js-provider :external` (currently `:db-worker` and `:inference-worker`). Those shims use `shadow$bridge("pkg")` — not `require()` — delegating actual module loading to the Webpack-bundled worker bundle. The `:app` target does not use `:js-provider :external` and its missing modules throw `"Module not provided"` at runtime instead. Electron (`:node-script`) shims never appear in this directory either. ## Recommended Fixes diff --git a/.agents/skills/logseq-dependency-upgrade/SKILL.md b/.agents/skills/logseq-dependency-upgrade/SKILL.md index ed6bfca348..6a5acbb0ac 100644 --- a/.agents/skills/logseq-dependency-upgrade/SKILL.md +++ b/.agents/skills/logseq-dependency-upgrade/SKILL.md @@ -16,10 +16,12 @@ node .agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies. --output-json \ --output-md \ [--stale-months ] \ + [--max-update-interval ] \ [--include-prerelease] ``` - `--stale-months` — number of months since last publish to flag a package as stale (default: `36`). +- `--max-update-interval` — maximum number of months between the current version's publish date and the latest version's publish date. If the interval is within this threshold, the package is NOT considered outdated and is excluded from upgrade batches (default: `6`). - `--include-prerelease` — boolean flag (no value). When present, the Risk column annotates any newer upstream pre-release version (SNAPSHOT / RC / alpha / beta / nightly / canary etc.). The **target version is always the latest stable release** regardless of this flag. When absent (default), pre-release versions are neither fetched nor shown. 2. Read the generated Markdown report — it is the primary planning document, structured for batch-wise execution. diff --git a/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs b/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs index d2fadfc54d..962aef1eaa 100644 --- a/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs +++ b/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs @@ -29,6 +29,9 @@ const staleMonths = Number(args.get('--stale-months') || 36); // When true (pass --include-prerelease flag), annotate in Risk column if a newer // pre-release exists upstream. Target version is ALWAYS the latest stable release. const includePrerelease = args.get('--include-prerelease') === 'true'; +// Maximum number of months between latest and current version publish dates. +// If the interval is within this threshold, the package is NOT considered outdated. +const maxUpdateInterval = Number(args.get('--max-update-interval') || 6); // --------------------------------------------------------------------------- // Classification helpers @@ -374,6 +377,14 @@ async function fetchCljPackageMeta(pkg) { if (entry?.created) publishedAt = entry.created; } const result = { latest, latestPublishedAt: publishedAt }; + // Build a version -> date map from recent_versions for looking up current version publish date + const versionDates = {}; + if (clojars.recent_versions && Array.isArray(clojars.recent_versions)) { + for (const v of clojars.recent_versions) { + if (v.version && v.created) versionDates[v.version] = v.created; + } + } + result.versionDates = versionDates; // Only annotate pre-release info when --include-prerelease flag is set if (includePrerelease && absoluteLatest && absoluteLatest !== latest && isPrerelease(absoluteLatest)) { result.absoluteLatest = absoluteLatest; @@ -435,6 +446,14 @@ function monthsBetween(iso) { return (Date.now() - ts) / (1000 * 60 * 60 * 24 * 30.4375); } +function monthsBetweenDates(iso1, iso2) { + if (!iso1 || !iso2) return null; + const ts1 = new Date(iso1).getTime(); + const ts2 = new Date(iso2).getTime(); + if (Number.isNaN(ts1) || Number.isNaN(ts2)) return null; + return Math.abs(ts1 - ts2) / (1000 * 60 * 60 * 24 * 30.4375); +} + function normalizeCurrent(entry) { if (entry.ecosystem === 'npm') return coerceVersion(entry.current); if (entry.ecosystem === 'bb-pod') return coerceVersion(entry.current); @@ -657,6 +676,11 @@ async function main() { aliases: aliases.length > 0 ? aliases : undefined, currents, currentsNormalized, latest, latestPublishedAt: meta.latestPublishedAt || null, + currentPublishedAt: (() => { + if (ecosystem === 'npm' && meta.raw?.time && currentBase) return meta.raw.time[currentBase] || null; + if (ecosystem === 'clj' && meta.versionDates && currentBase) return meta.versionDates[currentBase] || null; + return null; + })(), staleMonths: monthsBetween(meta.latestPublishedAt), deprecatedCurrent: currentMeta?.deprecated || null, latestDeprecated: meta.latestDeprecated || null, @@ -668,6 +692,7 @@ async function main() { if (latest && currents.length > 0) item.target = formatTarget(currents[0], latest); item.absoluteLatest = meta.absoluteLatest || null; + item.updateIntervalMonths = monthsBetweenDates(item.currentPublishedAt, item.latestPublishedAt); // latestStatus is always based on declared version vs upstream stable latest // (alreadyResolved only marks zero install-risk, does not count as "up to date") item.latestStatus = latestStatus(item.latest, item.currentsNormalized, item.currents); @@ -677,7 +702,15 @@ async function main() { } // Categorize - const outdated = items.filter(i => i.latestStatus === 'outdated').sort((a, b) => a.package.localeCompare(b.package)); + const withinInterval = []; + const outdated = items.filter(i => { + if (i.latestStatus !== 'outdated') return false; + if (i.updateIntervalMonths !== null && i.updateIntervalMonths <= maxUpdateInterval) { + withinInterval.push(i); + return false; + } + return true; + }).sort((a, b) => a.package.localeCompare(b.package)); const latestRisky = items.filter(i => i.latestStatus === 'latest' && i.riskNotesList.length > 0).sort((a, b) => a.package.localeCompare(b.package)); const manual = items.filter(i => i.manualReview || i.latestStatus === 'manual' || i.latestStatus === 'unknown').sort((a, b) => a.package.localeCompare(b.package)); const inconsistent = items.filter(i => i.inconsistent).sort((a, b) => a.package.localeCompare(b.package)); @@ -702,6 +735,7 @@ async function main() { }, summary: { outdated: outdated.length, + withinInterval: withinInterval.length, latestRisky: latestRisky.length, inconsistent: inconsistent.length, manualReview: manual.length, @@ -747,6 +781,7 @@ async function main() { L.push(row(['Manifests scanned', String(packageFiles.length + depsFiles.length + bbFiles.length)])); L.push(row(['Unique libraries', String(items.length)])); L.push(row(['Outdated', String(outdated.length)])); + L.push(row([`Within update interval (≤ ${maxUpdateInterval} months)`, String(withinInterval.length)])); L.push(row(['Already resolved via lockfile', String(alreadyResolvedItems.length)])); L.push(row(['Latest but risky', String(latestRisky.length)])); L.push(row(['Cross-root inconsistent', String(inconsistent.length)])); diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 6eb8d2270d..57bec6bd8c 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -41,8 +41,8 @@ on: required: true env: - CLOJURE_VERSION: '1.11.1.1413' - NODE_VERSION: '22' + CLOJURE_VERSION: '1.12.4.1618' + NODE_VERSION: '24' JAVA_VERSION: '21' jobs: diff --git a/.github/workflows/build-desktop-release.yml b/.github/workflows/build-desktop-release.yml index 09787166c6..34dd47dcbb 100644 --- a/.github/workflows/build-desktop-release.yml +++ b/.github/workflows/build-desktop-release.yml @@ -47,9 +47,9 @@ on: # - cron: '0 14 * * MON-FRI' env: - CLOJURE_VERSION: '1.11.1.1413' - NODE_VERSION: '22' - JAVA_VERSION: '11' + CLOJURE_VERSION: '1.12.4.1618' + NODE_VERSION: '24' + JAVA_VERSION: '21' jobs: compile-cljs: @@ -170,6 +170,7 @@ jobs: with: name: static path: static + build-linux-x64: runs-on: ubuntu-22.04 needs: [ compile-cljs ] @@ -206,9 +207,15 @@ jobs: run: | mkdir -p builds # NOTE: save VERSION file to builds directory - cp static/VERSION ./builds/VERSION - mv static/out/make/*-*.AppImage ./builds/Logseq-linux-x64-${{ steps.ref.outputs.version }}.AppImage - mv static/out/make/zip/linux/x64/*-linux-x64-*.zip ./builds/Logseq-linux-x64-${{ steps.ref.outputs.version }}.zip + cp static/VERSION ./builds/VERSION + mv static/dist/*.AppImage ./builds/ + shopt -s nullglob + blockmaps=(static/dist/*.blockmap) + if [ ${#blockmaps[@]} -gt 0 ]; then + mv static/dist/*.blockmap ./builds/ + fi + mv static/dist/latest-linux.yml ./builds/latest-linux.yml + mv static/dist/*.zip ./builds/Logseq-linux-x86_64-${{ steps.ref.outputs.version }}.zip - name: Upload Artifact uses: actions/upload-artifact@v4 @@ -252,9 +259,15 @@ jobs: run: | mkdir -p builds # NOTE: save VERSION file to builds directory - cp static/VERSION ./builds/VERSION - # mv static/out/make/*-*.AppImage ./builds/Logseq-linux-arm64-${{ steps.ref.outputs.version }}.AppImage - mv static/out/make/zip/linux/arm64/*-linux-arm64-*.zip ./builds/Logseq-linux-arm64-${{ steps.ref.outputs.version }}.zip + cp static/VERSION ./builds/VERSION + mv static/dist/*.AppImage ./builds/Logseq-linux-arm64-${{ steps.ref.outputs.version }}.AppImage + shopt -s nullglob + blockmaps=(static/dist/*.blockmap) + if [ ${#blockmaps[@]} -gt 0 ]; then + mv static/dist/*.blockmap ./builds/ + fi + mv static/dist/latest-linux-arm64.yml ./builds/latest-linux-arm64.yml + mv static/dist/*.zip ./builds/Logseq-linux-arm64-${{ steps.ref.outputs.version }}.zip - name: Upload Artifact uses: actions/upload-artifact@v4 @@ -293,34 +306,37 @@ jobs: working-directory: ./static - name: Build/Release Electron app - run: yarn electron:make + shell: pwsh + run: | + $signCfg = @' + { + "extends": "./electron-builder.yml", + "win": { + "azureSignOptions": { + "publisherName": "Logseq, Inc.", + "endpoint": "https://eus.codesigning.azure.net/", + "certificateProfileName": "Logseq", + "codeSigningAccountName": "logseqwin" + } + } + } + '@ + $signCfgPath = Join-Path $PWD "electron-builder.sign-win.json" + $signCfg | Out-File -FilePath $signCfgPath -Encoding utf8NoBOM + node_modules/.bin/electron-builder --config $signCfgPath --publish never working-directory: ./static env: - DEBUG: electron-packager + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} - name: Save Artifact run: | mkdir builds - mv static\out\make\squirrel.windows\x64\*.nupkg builds\Logseq-win-x64-${{ steps.ref.outputs.version }}-full.nupkg - mv static\out\make\squirrel.windows\x64\*.exe builds\Logseq-win-x64-${{ steps.ref.outputs.version }}.exe - mv static\out\make\zip\win32\x64\*.zip builds\Logseq-win-x64-${{ steps.ref.outputs.version }}.zip - mv static\out\make\wix\x64\Logseq.msi builds\Logseq-win-x64-${{ steps.ref.outputs.version }}.msi - mv static\out\make\squirrel.windows\x64\RELEASES builds\RELEASES - - - name: Sign - uses: azure/trusted-signing-action@v0.5.9 - with: - azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }} - azure-client-id: ${{ secrets.AZURE_CLIENT_ID }} - azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - endpoint: https://eus.codesigning.azure.net/ - trusted-signing-account-name: logseqwin - certificate-profile-name: Logseq - files-folder: builds - files-folder-filter: exe,msi - file-digest: SHA256 - timestamp-rfc3161: http://timestamp.acs.microsoft.com - timestamp-digest: SHA256 + mv static\dist\*-nsis.exe builds\Logseq-win-x64-${{ steps.ref.outputs.version }}-nsis.exe + mv static\dist\*.blockmap builds\ + mv static\dist\latest.yml builds\latest-x64.yml + mv static\dist\*.zip builds\Logseq-win-x64-${{ steps.ref.outputs.version }}.zip - name: Upload Artifact uses: actions/upload-artifact@v4 @@ -359,34 +375,37 @@ jobs: working-directory: ./static - name: Build/Release Electron app - run: yarn electron:make-win-arm64 + shell: pwsh + run: | + $signCfg = @' + { + "extends": "./electron-builder.yml", + "win": { + "azureSignOptions": { + "publisherName": "Logseq, Inc.", + "endpoint": "https://eus.codesigning.azure.net/", + "certificateProfileName": "Logseq", + "codeSigningAccountName": "logseqwin" + } + } + } + '@ + $signCfgPath = Join-Path $PWD "electron-builder.sign-win.json" + $signCfg | Out-File -FilePath $signCfgPath -Encoding utf8NoBOM + node_modules/.bin/electron-builder --config $signCfgPath --win nsis zip --arm64 --publish never working-directory: ./static env: - DEBUG: electron-packager + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} - name: Save Artifact run: | mkdir builds - mv static\out\make\squirrel.windows\arm64\*.nupkg builds\Logseq-win-arm64-${{ steps.ref.outputs.version }}-full.nupkg - mv static\out\make\squirrel.windows\arm64\*.exe builds\Logseq-win-arm64-${{ steps.ref.outputs.version }}.exe - mv static\out\make\zip\win32\arm64\*.zip builds\Logseq-win-arm64-${{ steps.ref.outputs.version }}.zip - mv static\out\make\wix\arm64\Logseq.msi builds\Logseq-win-arm64-${{ steps.ref.outputs.version }}.msi - mv static\out\make\squirrel.windows\arm64\RELEASES builds\RELEASES - - - name: Sign - uses: azure/trusted-signing-action@v0.5.9 - with: - azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }} - azure-client-id: ${{ secrets.AZURE_CLIENT_ID }} - azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - endpoint: https://eus.codesigning.azure.net/ - trusted-signing-account-name: logseqwin - certificate-profile-name: Logseq - files-folder: builds - files-folder-filter: exe,msi - file-digest: SHA256 - timestamp-rfc3161: http://timestamp.acs.microsoft.com - timestamp-digest: SHA256 + mv static\dist\*-nsis.exe builds\Logseq-win-arm64-${{ steps.ref.outputs.version }}-nsis.exe + mv static\dist\*.blockmap builds\ + mv static\dist\latest.yml builds\latest-arm64.yml + mv static\dist\*.zip builds\Logseq-win-arm64-${{ steps.ref.outputs.version }}.zip - name: Upload Artifact uses: actions/upload-artifact@v4 @@ -397,7 +416,6 @@ jobs: build-macos-x64: needs: [ compile-cljs ] runs-on: macos-15-intel - steps: - name: Download The Static Asset uses: actions/download-artifact@v4 @@ -427,6 +445,7 @@ jobs: - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + - name: Cache yarn cache directory uses: actions/cache@v4 id: yarn-cache @@ -455,14 +474,17 @@ jobs: working-directory: ./static env: APPLE_ID: ${{ secrets.APPLE_ID_EMAIL }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - name: Save x64 artifacts run: | mkdir -p builds - mv static/out/make/Logseq.dmg ./builds/Logseq-darwin-x64-${{ steps.ref.outputs.version }}.dmg - mv static/out/make/zip/darwin/x64/*.zip ./builds/Logseq-darwin-x64-${{ steps.ref.outputs.version }}.zip + cp static/VERSION ./builds/VERSION + mv static/dist/*.dmg ./builds/Logseq-darwin-x64-${{ steps.ref.outputs.version }}.dmg + mv static/dist/*.zip ./builds/Logseq-darwin-x64-${{ steps.ref.outputs.version }}.zip + mv static/dist/*.blockmap ./builds/ + mv static/dist/latest-mac.yml ./builds/latest-x64-mac.yml - name: Upload Artifact uses: actions/upload-artifact@v4 @@ -473,7 +495,6 @@ jobs: build-macos-arm64: needs: [ compile-cljs ] runs-on: macos-14 - steps: - name: Download The Static Asset uses: actions/download-artifact@v4 @@ -495,6 +516,7 @@ jobs: - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + - name: Cache yarn cache directory uses: actions/cache@v4 id: yarn-cache @@ -532,14 +554,17 @@ jobs: working-directory: ./static env: APPLE_ID: ${{ secrets.APPLE_ID_EMAIL }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - name: Save arm64 artifacts run: | mkdir -p builds - mv static/out/make/Logseq.dmg ./builds/Logseq-darwin-arm64-${{ steps.ref.outputs.version }}.dmg - mv static/out/make/zip/darwin/arm64/*.zip ./builds/Logseq-darwin-arm64-${{ steps.ref.outputs.version }}.zip + cp static/VERSION ./builds/VERSION + mv static/dist/*.dmg ./builds/Logseq-darwin-arm64-${{ steps.ref.outputs.version }}.dmg + mv static/dist/*.zip ./builds/Logseq-darwin-arm64-${{ steps.ref.outputs.version }}.zip + mv static/dist/*.blockmap ./builds/ + mv static/dist/latest-mac.yml ./builds/latest-arm64-mac.yml - name: Upload Artifact uses: actions/upload-artifact@v4 @@ -635,14 +660,15 @@ jobs: ./*.zip ./*.dmg ./*.exe - ./*.msi + ./*.yml + ./*.blockmap ./*.AppImage ./*.apk release: # NOTE: For now, we only have beta channel to be released on GitHub if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.build-target == 'beta' }} - needs: [ build-macos-x64, build-macos-arm64, build-linux-x64, build-linux-arm64, build-windows-x64, build-windows-arm64] + needs: [ build-macos-x64, build-macos-arm64, build-linux-x64, build-linux-arm64, build-windows-x64, build-windows-arm64 ] runs-on: ubuntu-22.04 steps: - name: Download MacOS x64 Artifacts @@ -697,17 +723,12 @@ jobs: pkgver=$(cat VERSION) echo "version=$pkgver" >> $GITHUB_OUTPUT - - name: Fix .nupkg name in RELEASES file - run: | - sed -i "s/Logseq-.*.nupkg/Logseq-win-x64-${{ steps.ref.outputs.version }}-full.nupkg/g" RELEASES - - name: Generate SHA256 checksums run: | sha256sum *-darwin-* > SHA256SUMS.txt sha256sum *-win-* >> SHA256SUMS.txt sha256sum *-linux-* >> SHA256SUMS.txt sha256sum *.apk >> SHA256SUMS.txt - sha256sum RELEASES >> SHA256SUMS.txt cat SHA256SUMS.txt - name: Create Release Draft @@ -726,8 +747,7 @@ jobs: ./*.zip ./*.dmg ./*.exe - ./*.msi - ./*.nupkg - ./RELEASES + ./*.yml + ./*.blockmap ./*.AppImage ./*.apk diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index a4a2325252..99587a29c0 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -7,7 +7,7 @@ on: types: [released] env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' jobs: diff --git a/.github/workflows/build-ios-release.yml b/.github/workflows/build-ios-release.yml index f97fd25afd..068e05226b 100644 --- a/.github/workflows/build-ios-release.yml +++ b/.github/workflows/build-ios-release.yml @@ -11,9 +11,9 @@ on: default: "master" env: - CLOJURE_VERSION: '1.11.1.1413' - NODE_VERSION: '22' - JAVA_VERSION: '11' + CLOJURE_VERSION: '1.12.4.1618' + NODE_VERSION: '24' + JAVA_VERSION: '21' jobs: build-app: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f4651167b7..be4c02100f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,10 +11,10 @@ on: - '*.md' env: - CLOJURE_VERSION: '1.11.1.1413' - JAVA_VERSION: '11' + CLOJURE_VERSION: '1.12.4.1618' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/clj-e2e.yml b/.github/workflows/clj-e2e.yml index d4af9983e0..32d0044123 100644 --- a/.github/workflows/clj-e2e.yml +++ b/.github/workflows/clj-e2e.yml @@ -19,9 +19,10 @@ on: - packages/** env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: @@ -40,6 +41,12 @@ jobs: cache-dependency-path: | yarn.lock + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: ${{ env.JAVA_VERSION }} + - name: Set up Clojure uses: DeLaGuardo/setup-clojure@13.5 with: diff --git a/.github/workflows/clj-rtc-e2e.yml b/.github/workflows/clj-rtc-e2e.yml index ee3c4bedf9..8444fb44d2 100644 --- a/.github/workflows/clj-rtc-e2e.yml +++ b/.github/workflows/clj-rtc-e2e.yml @@ -19,9 +19,10 @@ on: - packages/** env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: @@ -41,6 +42,12 @@ jobs: cache-dependency-path: | yarn.lock + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: ${{ env.JAVA_VERSION }} + - name: Set up Clojure uses: DeLaGuardo/setup-clojure@13.5 with: @@ -106,6 +113,12 @@ jobs: with: node-version: ${{ env.NODE_VERSION }} + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: ${{ env.JAVA_VERSION }} + - name: Set up Clojure uses: DeLaGuardo/setup-clojure@13.5 with: diff --git a/.github/workflows/deploy-db-test-pages.yml b/.github/workflows/deploy-db-test-pages.yml index 96d8073b27..94436a6f3e 100644 --- a/.github/workflows/deploy-db-test-pages.yml +++ b/.github/workflows/deploy-db-test-pages.yml @@ -6,7 +6,7 @@ on: env: CLOJURE_VERSION: "1.11.1.1413" - NODE_VERSION: '22' + NODE_VERSION: '24' JAVA_VERSION: "11" jobs: diff --git a/.github/workflows/deps-cli.yml b/.github/workflows/deps-cli.yml index f8a333dc07..e3f5367fb9 100644 --- a/.github/workflows/deps-cli.yml +++ b/.github/workflows/deps-cli.yml @@ -45,11 +45,11 @@ defaults: working-directory: deps/cli env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' # This is the same as 1.8. - JAVA_VERSION: '11' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-common.yml b/.github/workflows/deps-common.yml index aa30c0a75a..ca70502ac1 100644 --- a/.github/workflows/deps-common.yml +++ b/.github/workflows/deps-common.yml @@ -20,10 +20,10 @@ defaults: working-directory: deps/common env: - CLOJURE_VERSION: '1.11.1.1413' - JAVA_VERSION: '11' + CLOJURE_VERSION: '1.12.4.1618' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-db-sync.yml b/.github/workflows/deps-db-sync.yml index e2c70d2a69..e7e854b28b 100644 --- a/.github/workflows/deps-db-sync.yml +++ b/.github/workflows/deps-db-sync.yml @@ -27,10 +27,10 @@ defaults: working-directory: deps/db-sync env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-db.yml b/.github/workflows/deps-db.yml index 700f526896..bf3bce2c6e 100644 --- a/.github/workflows/deps-db.yml +++ b/.github/workflows/deps-db.yml @@ -24,10 +24,10 @@ defaults: working-directory: deps/db env: - CLOJURE_VERSION: '1.11.1.1413' - JAVA_VERSION: '11' + CLOJURE_VERSION: '1.12.4.1618' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-graph-parser.yml b/.github/workflows/deps-graph-parser.yml index dc0a034f6a..db1da33413 100644 --- a/.github/workflows/deps-graph-parser.yml +++ b/.github/workflows/deps-graph-parser.yml @@ -27,11 +27,11 @@ defaults: working-directory: deps/graph-parser env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' # This is the same as 1.8. - JAVA_VERSION: '11' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-outliner.yml b/.github/workflows/deps-outliner.yml index ea5253dbbb..fbf95646b3 100644 --- a/.github/workflows/deps-outliner.yml +++ b/.github/workflows/deps-outliner.yml @@ -29,11 +29,11 @@ defaults: working-directory: deps/outliner env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' # This is the same as 1.8. - JAVA_VERSION: '11' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-publish.yml b/.github/workflows/deps-publish.yml index f412f8fd3d..80f54dd39f 100644 --- a/.github/workflows/deps-publish.yml +++ b/.github/workflows/deps-publish.yml @@ -29,10 +29,10 @@ defaults: working-directory: deps/publish env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/.github/workflows/deps-publishing.yml b/.github/workflows/deps-publishing.yml index 81408b464b..f4a5c84eec 100644 --- a/.github/workflows/deps-publishing.yml +++ b/.github/workflows/deps-publishing.yml @@ -27,11 +27,11 @@ defaults: working-directory: deps/publishing env: - CLOJURE_VERSION: '1.11.1.1413' + CLOJURE_VERSION: '1.12.4.1618' # This is the same as 1.8. - JAVA_VERSION: '11' + JAVA_VERSION: '21' # This is the latest node version we can run. - NODE_VERSION: '22' + NODE_VERSION: '24' BABASHKA_VERSION: '1.12.215' jobs: diff --git a/Dockerfile b/Dockerfile index 1cef94d345..afd0615109 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev # install NodeJS & yarn -RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - +RUN curl -sL https://deb.nodesource.com/setup_24.x | bash - RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | \ tee /etc/apt/trusted.gpg.d/yarn.gpg && \ @@ -32,7 +32,7 @@ RUN git clone -b master https://github.com/logseq/logseq.git . RUN yarn config set network-timeout 240000 -g && yarn install -RUN yarn release +RUN yarn release # Web App Runner image FROM nginx:1.24.0-alpine3.17 diff --git a/android/app/build.gradle b/android/app/build.gradle index 5eda8e9979..6cf101204d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -12,7 +12,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 88 - versionName "2.0.0" + versionName "2.0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/bb.edn b/bb.edn index 0789d68556..14081b249f 100644 --- a/bb.edn +++ b/bb.edn @@ -1,7 +1,8 @@ {:paths ["scripts/src" "src/main" "src/resources"] :deps {metosin/malli - {:mvn/version "0.16.1"} + {:git/url "https://github.com/metosin/malli" + :sha "52ea58a36ff5172b38dfc526ca638afa7226a4a0"} borkdude/rewrite-edn {:mvn/version "0.5.9"} logseq/bb-tasks #_{:local/root "../bb-tasks"} @@ -14,7 +15,7 @@ cheshire/cheshire {:mvn/version "6.2.0"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"} + {clj-kondo/clj-kondo {:version "2026.04.15"} org.babashka/fswatcher {:version "0.0.7"} org.babashka/go-sqlite3 {:version "0.3.13"}} :tasks diff --git a/clj-e2e/deps.edn b/clj-e2e/deps.edn index 04c6efc153..93e16f4e80 100644 --- a/clj-e2e/deps.edn +++ b/clj-e2e/deps.edn @@ -1,5 +1,5 @@ {:paths ["src" "resources"] - :deps {org.clojure/clojure {:mvn/version "1.12.0"} + :deps {org.clojure/clojure {:mvn/version "1.12.4"} ;; io.github.pfeodrippe/wally {:local/root "../../../wally"} io.github.pfeodrippe/wally {:git/url "https://github.com/logseq/wally" :sha "8571fae7c51400ac61c8b1026cbfba68279bc461" diff --git a/deps.edn b/deps.edn index 4b29a1cc31..a75ca1655f 100644 --- a/deps.edn +++ b/deps.edn @@ -1,6 +1,6 @@ {:paths ["src/main" "src/electron" "src/resources"] :deps - {org.clojure/clojure {:mvn/version "1.11.1"} + {org.clojure/clojure {:mvn/version "1.12.4"} rum/rum {:git/url "https://github.com/logseq/rum" ;; fork :sha "5d672bf84ed944414b9f61eeb83808ead7be9127"} @@ -12,7 +12,8 @@ borkdude/rewrite-edn {:mvn/version "0.5.9"} funcool/promesa {:mvn/version "11.0.678"} medley/medley {:mvn/version "1.4.0"} - metosin/reitit-frontend {:mvn/version "0.10.1"} + metosin/reitit-frontend {:mvn/version "0.10.1" + :exclusions [metosin/malli]} cljs-bean/cljs-bean {:mvn/version "1.9.0"} prismatic/dommy {:mvn/version "1.1.0"} org.clojure/core.match {:mvn/version "1.1.0"} @@ -26,7 +27,7 @@ hiccups/hiccups {:mvn/version "0.3.0"} tongue/tongue {:mvn/version "0.4.4"} org.clojure/core.async {:mvn/version "1.8.741"} - thheller/shadow-cljs {:mvn/version "2.28.23"} + thheller/shadow-cljs {:mvn/version "3.4.4"} expound/expound {:mvn/version "0.9.0"} com.lambdaisland/glogi {:git/url "https://github.com/lambdaisland/glogi" :git/sha "30328a045141717aadbbb693465aed55f0904976"} @@ -41,7 +42,8 @@ logseq/publishing {:local/root "deps/publishing"} logseq/cli {:local/root "deps/cli"} logseq/shui {:local/root "deps/shui"} - metosin/malli {:mvn/version "0.16.1"} + metosin/malli {:git/url "https://github.com/metosin/malli" + :sha "52ea58a36ff5172b38dfc526ca638afa7226a4a0"} com.cognitect/transit-cljs {:mvn/version "0.8.280"} missionary/missionary {:mvn/version "b.47"} @@ -75,5 +77,5 @@ :main-opts ["-m" "cljs-test-runner.main" "-d" "src/bench" "-n" "frontend.benchmark-test-runner"]} ;; Use :replace-deps for tools. See https://github.com/clj-kondo/clj-kondo/issues/1536#issuecomment-1013006889 - :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/cli/bb.edn b/deps/cli/bb.edn index eeec14e6d9..5dd52791c0 100644 --- a/deps/cli/bb.edn +++ b/deps/cli/bb.edn @@ -6,7 +6,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {build:vendor-nbb-deps diff --git a/deps/cli/deps.edn b/deps/cli/deps.edn index 90af385983..6f2529a2e2 100644 --- a/deps/cli/deps.edn +++ b/deps/cli/deps.edn @@ -3,5 +3,5 @@ {logseq/outliner {:local/root "../outliner"}} :aliases - {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/cli/src/logseq/cli/commands/export_edn.cljs b/deps/cli/src/logseq/cli/commands/export_edn.cljs index 032e2c605b..be9b0b76fa 100644 --- a/deps/cli/src/logseq/cli/commands/export_edn.cljs +++ b/deps/cli/src/logseq/cli/commands/export_edn.cljs @@ -55,7 +55,7 @@ (-> (p/let [resp (cli-util/api-fetch api-server-token "logseq.cli.export_edn" [(clj->js opts)])] (if (= 200 (.-status resp)) (p/let [body (.json resp) - export-map (sqlite-util/transit-read (aget body "export-body"))] + export-map (sqlite-util/read-transit-str (aget body "export-body"))] (when validate (validate-export export-map options)) (write-export-edn-map export-map (assoc options :graph (.-graph body)))) @@ -65,4 +65,4 @@ (defn export [{opts :opts :as m}] (if (cli-util/api-command? opts) (api-export m) - (local-export m))) \ No newline at end of file + (local-export m))) diff --git a/deps/cli/src/logseq/cli/commands/import_edn.cljs b/deps/cli/src/logseq/cli/commands/import_edn.cljs index ab74723c0d..0270de4ca1 100644 --- a/deps/cli/src/logseq/cli/commands/import_edn.cljs +++ b/deps/cli/src/logseq/cli/commands/import_edn.cljs @@ -14,7 +14,7 @@ (println (str "Imported " (cli-util/summarize-build-edn import-map) "!"))) (defn- api-import [{:keys [api-server-token]} import-map] - (-> (p/let [resp (cli-util/api-fetch api-server-token "logseq.cli.import_edn" [(sqlite-util/transit-write import-map)])] + (-> (p/let [resp (cli-util/api-fetch api-server-token "logseq.cli.import_edn" [(sqlite-util/write-transit-str import-map)])] (if (= 200 (.-status resp)) (print-success import-map) (cli-util/api-handle-error-response resp))) @@ -37,4 +37,4 @@ (let [edn (edn/read-string (str (fs/readFileSync file)))] (if (cli-util/api-command? opts) (api-import opts edn) - (local-import opts edn)))) \ No newline at end of file + (local-import opts edn)))) diff --git a/deps/common/bb.edn b/deps/common/bb.edn index 96a0f0d5e6..e3a8496994 100644 --- a/deps/common/bb.edn +++ b/deps/common/bb.edn @@ -6,7 +6,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/common/deps.edn b/deps/common/deps.edn index cda2b5a658..605f6309f7 100644 --- a/deps/common/deps.edn +++ b/deps/common/deps.edn @@ -5,8 +5,8 @@ :aliases {:test {:extra-paths ["test"] :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.1"} - org.clojure/clojurescript {:mvn/version "1.11.132"}} + org.clojure/clojurescript {:mvn/version "1.12.134"}} :main-opts ["-m" "cljs-test-runner.main"]} :clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/db-sync/bb.edn b/deps/db-sync/bb.edn index 4a11fb5570..98756e598b 100644 --- a/deps/db-sync/bb.edn +++ b/deps/db-sync/bb.edn @@ -6,7 +6,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {lint:large-vars diff --git a/deps/db-sync/deps.edn b/deps/db-sync/deps.edn index 4798d10ecb..2d2f886267 100644 --- a/deps/db-sync/deps.edn +++ b/deps/db-sync/deps.edn @@ -1,24 +1,25 @@ {:paths ["src" "test" "../../resources"] :deps - {org.clojure/clojure {:mvn/version "1.11.1"} + {org.clojure/clojure {:mvn/version "1.12.4"} datascript/datascript {:git/url "https://github.com/logseq/datascript" :sha "f91fec561ee2c11d6bf323feae365e9033585411"} datascript-transit/datascript-transit {:mvn/version "0.3.0" :exclusions [datascript/datascript]} com.cognitect/transit-cljs {:mvn/version "0.8.280"} cljs-bean/cljs-bean {:mvn/version "1.9.0"} - thheller/shadow-cljs {:mvn/version "3.3.4"} + thheller/shadow-cljs {:mvn/version "3.4.4"} com.lambdaisland/glogi {:git/url "https://github.com/lambdaisland/glogi" :git/sha "30328a045141717aadbbb693465aed55f0904976"} - metosin/reitit {:mvn/version "0.10.1"} + metosin/reitit {:mvn/version "0.10.1" + :exclusions [metosin/malli]} logseq/common {:local/root "../common"} logseq/db {:local/root "../db"}} :aliases {:cljs {:extra-deps {org.clojure/tools.namespace {:mvn/version "1.5.0"} - cider/cider-nrepl {:mvn/version "0.58.0"} + cider/cider-nrepl {:mvn/version "0.59.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} tortue/spy {:mvn/version "2.15.0"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/db-sync/package.json b/deps/db-sync/package.json index e166306f07..47ef71099f 100644 --- a/deps/db-sync/package.json +++ b/deps/db-sync/package.json @@ -29,7 +29,7 @@ "@sentry/cloudflare": "^10.45.0", "@sentry/node": "^10.45.0", "better-sqlite3": "^12.8.0", - "shadow-cljs": "^3.3.4", + "shadow-cljs": "^3.4.4", "transit-js": "^0.8.874", "ws": "^8.19.0" }, diff --git a/deps/db-sync/yarn.lock b/deps/db-sync/yarn.lock index a9b710e18c..921962d48c 100644 --- a/deps/db-sync/yarn.lock +++ b/deps/db-sync/yarn.lock @@ -868,10 +868,10 @@ shadow-cljs-jar@1.3.4: resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz#0939d91c468b4bc5eab5a958f79e7ef5696fdf62" integrity sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA== -shadow-cljs@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-3.3.4.tgz#d1593c1ad4eee1ed34f57aa68cdfc5caaf5696d9" - integrity sha512-xZV+Ek5TeQtqcY++Otpto5DW+gXu/znIJjtTZjhfQl1yYxnfQNSyC2pS9/XoI3kmmQza3oY5WA0b45gS7W7W5g== +shadow-cljs@^3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-3.4.4.tgz#e76e97192f6809af3734dcf1fa5acb55d3611e21" + integrity sha512-6/Z4XVWBavdDSbAR+ECbZTnq22Gws1zy+Ilfwcdl5SMf3ZdOYiYczqykfg/rLjlU0Ap9BvX8cEZGBExK4PGDaw== dependencies: buffer "^6.0.3" process "^0.11.10" diff --git a/deps/db/bb.edn b/deps/db/bb.edn index 597e24b36d..276934bcf7 100644 --- a/deps/db/bb.edn +++ b/deps/db/bb.edn @@ -7,7 +7,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/db/deps.edn b/deps/db/deps.edn index c11109168a..7c7c683092 100644 --- a/deps/db/deps.edn +++ b/deps/db/deps.edn @@ -14,10 +14,11 @@ logseq/clj-fractional-indexing {:git/url "https://github.com/logseq/clj-fractional-indexing" :sha "1087f0fb18aa8e25ee3bbbb0db983b7a29bce270"} borkdude/rewrite-edn {:mvn/version "0.5.9"} - metosin/malli {:mvn/version "0.16.1"} + metosin/malli {:git/url "https://github.com/metosin/malli" + :sha "52ea58a36ff5172b38dfc526ca638afa7226a4a0"} medley/medley {:mvn/version "1.4.0"}} :aliases {:clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/db/nbb.edn b/deps/db/nbb.edn index 088fd80ed4..2b6f669e3b 100644 --- a/deps/db/nbb.edn +++ b/deps/db/nbb.edn @@ -3,7 +3,8 @@ {logseq/common {:local/root "../common"} medley/medley {:mvn/version "1.4.0"} - metosin/malli {:mvn/version "0.16.1"} + metosin/malli {:git/url "https://github.com/metosin/malli" + :sha "52ea58a36ff5172b38dfc526ca638afa7226a4a0"} ;; Used by db scripts with outliner.cli borkdude/rewrite-edn {:mvn/version "0.5.9"} logseq/clj-fractional-indexing {:git/url "https://github.com/logseq/clj-fractional-indexing" diff --git a/deps/db/src/logseq/db/common/sqlite_cli.cljs b/deps/db/src/logseq/db/common/sqlite_cli.cljs index 200f5b6a95..778e6a970b 100644 --- a/deps/db/src/logseq/db/common/sqlite_cli.cljs +++ b/deps/db/src/logseq/db/common/sqlite_cli.cljs @@ -37,7 +37,7 @@ (let [{:keys [content addresses]} (bean/->clj result) addresses (when addresses (js/JSON.parse addresses)) - data (sqlite-util/transit-read content)] + data (sqlite-util/read-transit-str content)] (if (and addresses (map? data)) (assoc data :addresses addresses) data)))) @@ -55,7 +55,7 @@ (when-let [addresses (:addresses data)] (js/JSON.stringify (bean/->js addresses))))] #js {:addr addr - :content (sqlite-util/transit-write data') + :content (sqlite-util/write-transit-str data') :addresses addresses})) addr+data-seq)] (upsert-addr-content! db data))) diff --git a/deps/db/src/logseq/db/sqlite/debug.cljs b/deps/db/src/logseq/db/sqlite/debug.cljs index b4c487a97c..3973e5fcc4 100644 --- a/deps/db/src/logseq/db/sqlite/debug.cljs +++ b/deps/db/src/logseq/db/sqlite/debug.cljs @@ -11,7 +11,7 @@ :rowMode "array"}) bean/->clj ffirst - sqlite-util/transit-read) + sqlite-util/read-transit-str) result (->> (.exec db #js {:sql "select addr, addresses from kvs" :rowMode "array"}) bean/->clj @@ -26,7 +26,7 @@ [^Object db] (let [schema (let [stmt (.prepare db "select content from kvs where addr = ?") content (.-content (.get stmt 0))] - (sqlite-util/transit-read content)) + (sqlite-util/read-transit-str content)) stmt (.prepare db "select addr, addresses from kvs") result (->> (.all ^Object stmt) bean/->clj diff --git a/deps/db/src/logseq/db/sqlite/gc.cljs b/deps/db/src/logseq/db/sqlite/gc.cljs index 20d6227eb9..996603e8ee 100644 --- a/deps/db/src/logseq/db/sqlite/gc.cljs +++ b/deps/db/src/logseq/db/sqlite/gc.cljs @@ -30,7 +30,7 @@ :rowMode "array"}) bean/->clj ffirst - sqlite-util/transit-read) + sqlite-util/read-transit-str) ;; 0: Datascript sets 0 as the address to store the db's meta, including addresses for :eavt, :avet, and aevt index. ;; 1: Datascript sets 1 for tail, to improve the performance internal-addrs (set [0 1 (:eavt schema) (:avet schema) (:aevt schema)]) @@ -60,7 +60,7 @@ [^object db] (let [schema (let [^object stmt (.prepare db "select content from kvs where addr = ?") content (.-content (.get ^object stmt 0))] - (sqlite-util/transit-read content)) + (sqlite-util/read-transit-str content)) internal-addrs (set [0 1 (:eavt schema) (:avet schema) (:aevt schema)]) non-refed-addrs (let [^object stmt (.prepare db get-non-refed-addrs-sql)] (->> (.all stmt) @@ -73,7 +73,7 @@ [^object db] (let [schema (let [^object stmt (.prepare db "select content from kvs where addr = ?") content (.-content (.get ^object stmt 0))] - (sqlite-util/transit-read content)) + (sqlite-util/read-transit-str content)) set-addresses #{(:eavt schema) (:avet schema) (:aevt schema)} internal-addresses (conj set-addresses 0 1) parent->children (let [^object stmt (.prepare db "select addr, addresses from kvs")] diff --git a/deps/db/src/logseq/db/sqlite/util.cljs b/deps/db/src/logseq/db/sqlite/util.cljs index 2e8d540e3f..db8a163001 100644 --- a/deps/db/src/logseq/db/sqlite/util.cljs +++ b/deps/db/src/logseq/db/sqlite/util.cljs @@ -17,17 +17,6 @@ (def ^:private write-handlers (cljs-bean.transit/writer-handlers)) (def ^:private read-handlers {}) - -(def transit-w (transit/writer :json {:handlers write-handlers})) -(def transit-r (transit/reader :json {:handlers read-handlers})) -(defn transit-write - [data] - (transit/write transit-w data)) - -(defn transit-read - [s] - (transit/read transit-r s)) - (def write-transit-str (let [write-handlers* (->> (assoc dt/write-handlers de/Entity (transit/write-handler (constantly "datascript/Entity") diff --git a/deps/graph-parser/bb.edn b/deps/graph-parser/bb.edn index 7bcfe3bf0f..807ff61d67 100644 --- a/deps/graph-parser/bb.edn +++ b/deps/graph-parser/bb.edn @@ -4,9 +4,9 @@ #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} - + :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/graph-parser/deps.edn b/deps/graph-parser/deps.edn index 26003397b2..86154561a8 100644 --- a/deps/graph-parser/deps.edn +++ b/deps/graph-parser/deps.edn @@ -20,9 +20,9 @@ ;; with karma, shadow-cljs.edn and headless mode on CI {:test {:extra-paths ["test"] :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.1"} - org.clojure/clojurescript {:mvn/version "1.11.132"} + org.clojure/clojurescript {:mvn/version "1.12.134"} logseq/outliner {:local/root "../outliner"}} :main-opts ["-m" "cljs-test-runner.main"]} - :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/outliner/bb.edn b/deps/outliner/bb.edn index 8fb92e312d..2a19a8d91a 100644 --- a/deps/outliner/bb.edn +++ b/deps/outliner/bb.edn @@ -6,7 +6,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/outliner/deps.edn b/deps/outliner/deps.edn index 3f707cd699..57982cc60d 100644 --- a/deps/outliner/deps.edn +++ b/deps/outliner/deps.edn @@ -1,18 +1,19 @@ {:deps ;; These nbb-logseq deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn - {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork - :sha "f91fec561ee2c11d6bf323feae365e9033585411"} + {datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork + :sha "f91fec561ee2c11d6bf323feae365e9033585411"} ;; datascript/datascript {:local/root "../../../../datascript"} - com.cognitect/transit-cljs {:mvn/version "0.8.280"} + com.cognitect/transit-cljs {:mvn/version "0.8.280"} ;; Any other deps should be added here and to nbb.edn - logseq/db {:local/root "../db"} - logseq/graph-parser {:local/root "../graph-parser"} - metosin/malli {:mvn/version "0.16.1"} + logseq/db {:local/root "../db"} + logseq/graph-parser {:local/root "../graph-parser"} + metosin/malli {:git/url "https://github.com/metosin/malli" + :sha "52ea58a36ff5172b38dfc526ca638afa7226a4a0"} ;; stubbed via logseq.common.log com.lambdaisland/glogi {:git/url "https://github.com/lambdaisland/glogi" :git/sha "30328a045141717aadbbb693465aed55f0904976"}} :aliases {:clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/outliner/nbb.edn b/deps/outliner/nbb.edn index be96398d0a..9b910604b5 100644 --- a/deps/outliner/nbb.edn +++ b/deps/outliner/nbb.edn @@ -4,7 +4,6 @@ {:local/root "../db"} logseq/graph-parser {:local/root "../graph-parser"} - metosin/malli - {:mvn/version "0.16.1"} - io.github.nextjournal/nbb-test-runner - {:git/sha "b379325cfa5a3306180649da5de3bf5166414e71"}}} + metosin/malli {:git/url "https://github.com/metosin/malli" + :sha "52ea58a36ff5172b38dfc526ca638afa7226a4a0"} + io.github.nextjournal/nbb-test-runner {:git/sha "b379325cfa5a3306180649da5de3bf5166414e71"}}} diff --git a/deps/outliner/src/logseq/outliner/op.cljs b/deps/outliner/src/logseq/outliner/op.cljs index 49eac988f5..cd6fbd8500 100644 --- a/deps/outliner/src/logseq/outliner/op.cljs +++ b/deps/outliner/src/logseq/outliner/op.cljs @@ -388,7 +388,7 @@ *result (atom nil)] (outliner-tx/transact! - opts' + opts' (doseq [op-entry ops] (apply-op! conn opts' *result op-entry))) diff --git a/deps/publish/bb.edn b/deps/publish/bb.edn index 45d101ce73..a4942a8301 100644 --- a/deps/publish/bb.edn +++ b/deps/publish/bb.edn @@ -6,7 +6,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/publish/deps.edn b/deps/publish/deps.edn index 4a426f558e..a16b052345 100644 --- a/deps/publish/deps.edn +++ b/deps/publish/deps.edn @@ -1,6 +1,6 @@ {:paths ["src" "../../resources"] :deps - {org.clojure/clojure {:mvn/version "1.12.0"} + {org.clojure/clojure {:mvn/version "1.12.4"} rum/rum {:git/url "https://github.com/logseq/rum" ;; fork :sha "5d672bf84ed944414b9f61eeb83808ead7be9127"} @@ -9,7 +9,7 @@ datascript-transit/datascript-transit {:mvn/version "0.3.0" :exclusions [datascript/datascript]} funcool/promesa {:mvn/version "11.0.678"} - thheller/shadow-cljs {:mvn/version "3.3.4"} + thheller/shadow-cljs {:mvn/version "3.4.4"} logseq/common {:local/root "../common"} logseq/graph-parser {:local/root "../graph-parser"} logseq/db {:local/root "../db"} @@ -18,10 +18,10 @@ hiccups/hiccups {:mvn/version "0.3.0"}} :aliases {:cljs {:extra-deps {org.clojure/tools.namespace {:mvn/version "1.5.0"} - cider/cider-nrepl {:mvn/version "0.58.0"} + cider/cider-nrepl {:mvn/version "0.59.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} tortue/spy {:mvn/version "2.15.0"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/publish/package.json b/deps/publish/package.json index e79315febb..2b66b6dc8f 100644 --- a/deps/publish/package.json +++ b/deps/publish/package.json @@ -11,6 +11,6 @@ "deploy": "yarn bump-publish-version && yarn clean && yarn release && cd ./worker && wrangler deploy --env prod" }, "dependencies": { - "shadow-cljs": "^3.3.4" + "shadow-cljs": "^3.4.4" } } diff --git a/deps/publish/yarn.lock b/deps/publish/yarn.lock index bef063c8df..2f3e50bc1a 100644 --- a/deps/publish/yarn.lock +++ b/deps/publish/yarn.lock @@ -45,10 +45,10 @@ shadow-cljs-jar@1.3.4: resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz#0939d91c468b4bc5eab5a958f79e7ef5696fdf62" integrity sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA== -shadow-cljs@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-3.3.4.tgz#d1593c1ad4eee1ed34f57aa68cdfc5caaf5696d9" - integrity sha512-xZV+Ek5TeQtqcY++Otpto5DW+gXu/znIJjtTZjhfQl1yYxnfQNSyC2pS9/XoI3kmmQza3oY5WA0b45gS7W7W5g== +shadow-cljs@^3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-3.4.4.tgz#e76e97192f6809af3734dcf1fa5acb55d3611e21" + integrity sha512-6/Z4XVWBavdDSbAR+ECbZTnq22Gws1zy+Ilfwcdl5SMf3ZdOYiYczqykfg/rLjlU0Ap9BvX8cEZGBExK4PGDaw== dependencies: buffer "^6.0.3" process "^0.11.10" diff --git a/deps/publishing/bb.edn b/deps/publishing/bb.edn index 125d75b24f..6784ccb473 100644 --- a/deps/publishing/bb.edn +++ b/deps/publishing/bb.edn @@ -6,7 +6,7 @@ :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2026.01.19"}} + {clj-kondo/clj-kondo {:version "2026.04.15"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/publishing/deps.edn b/deps/publishing/deps.edn index 1e681765b4..186e0decbf 100644 --- a/deps/publishing/deps.edn +++ b/deps/publishing/deps.edn @@ -3,5 +3,5 @@ {logseq/db {:local/root "../db"}} :aliases - {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} + {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.04.15"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/shui/deps.edn b/deps/shui/deps.edn index 1635b2a5d1..f126352245 100644 --- a/deps/shui/deps.edn +++ b/deps/shui/deps.edn @@ -1,7 +1,7 @@ {:paths ["src"] :deps - {org.clojure/clojure {:mvn/version "1.11.1"} - org.clojure/clojurescript {:mvn/version "1.11.132"} + {org.clojure/clojure {:mvn/version "1.12.4"} + org.clojure/clojurescript {:mvn/version "1.12.134"} funcool/promesa {:mvn/version "11.0.678"} rum/rum {:git/url "https://github.com/logseq/rum" ;; fork :sha "5d672bf84ed944414b9f61eeb83808ead7be9127"} diff --git a/gulpfile.js b/gulpfile.js index aea200f330..bd73ece9af 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -19,7 +19,6 @@ const rawCopySrc = (globs, options = {}) => gulp.src(globs, { encoding: false, ...options }) const staticCleanKeep = new Set([ 'entitlements.plist', - 'forge.config.js', 'node_modules', 'package.json', 'yarn.lock', diff --git a/libs/cljs-sdk/deps.edn b/libs/cljs-sdk/deps.edn index c765259585..2dcb8bfc41 100644 --- a/libs/cljs-sdk/deps.edn +++ b/libs/cljs-sdk/deps.edn @@ -1,5 +1,5 @@ {:paths ["src" "test"] - :deps {org.clojure/clojurescript {:mvn/version "1.12.42"} + :deps {org.clojure/clojurescript {:mvn/version "1.12.134"} cljs-bean/cljs-bean {:mvn/version "1.9.0"}} :npm-deps {"@logseq/libs" "0.2.3"} diff --git a/package.json b/package.json index 43383f3c77..2916d83f13 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "postcss-nested": "7.0.2", "process": "^0.11.10", "semver": "7.7.4", - "shadow-cljs": "2.28.23", + "shadow-cljs": "^3.4.4", "source-map-loader": "^5.0.0", "stylelint": "^13.8.0", "stylelint-config-standard": "^20.0.0", diff --git a/resources/electron-builder.yml b/resources/electron-builder.yml new file mode 100644 index 0000000000..d9b9aebdc6 --- /dev/null +++ b/resources/electron-builder.yml @@ -0,0 +1,52 @@ +appId: com.logseq.logseq +electronUpdaterCompatibility: ">=2.16" + +directories: + buildResources: . + output: dist + +protocols: + - name: logseq + schemes: + - logseq + +publish: + - provider: github + owner: logseq + repo: logseq + +mac: + artifactName: ${productName}-darwin-${arch}-${version}.${ext} + icon: icons/logseq_big_sur.icns + target: + - dmg + - zip + hardenedRuntime: true + entitlements: entitlements.plist + entitlementsInherit: entitlements.plist + +dmg: + format: ULFO + +win: + icon: icons/logseq.ico + target: + - nsis + - zip + +nsis: + artifactName: ${productName}-win-${arch}-${version}-nsis.${ext} + oneClick: false + allowToChangeInstallationDirectory: true + installerIcon: icons/logseq.ico + uninstallerIcon: icons/logseq.ico + +linux: + artifactName: ${productName}-linux-${arch}-${version}.${ext} + icon: icons/logseq.png + category: Office + target: + - AppImage + - zip + mimeTypes: + - x-scheme-handler/logseq diff --git a/resources/forge.config.js b/resources/forge.config.js deleted file mode 100644 index 00da941ff1..0000000000 --- a/resources/forge.config.js +++ /dev/null @@ -1,108 +0,0 @@ -const path = require('path') -const fs = require('fs') - -module.exports = { - packagerConfig: { - name: 'Logseq', - icon: './icons/logseq_big_sur.icns', - buildVersion: "88", - appBundleId: "com.logseq.logseq", - protocols: [ - { - "protocol": "logseq", - "name": "logseq", - "schemes": "logseq" - } - ], - osxSign: { - identity: 'Developer ID Application: Logseq Inc. (K378MFWK59)', - 'hardened-runtime': true, - entitlements: 'entitlements.plist', - 'entitlements-inherit': 'entitlements.plist', - 'signature-flags': 'library' - }, - osxNotarize: process.env['APPLE_ID'] ? { - tool: 'notarytool', - appleId: process.env['APPLE_ID'], - appleIdPassword: process.env['APPLE_ID_PASSWORD'], - teamId: process.env['APPLE_TEAM_ID'] - } : undefined, - }, - makers: [ - { - 'name': '@electron-forge/maker-squirrel', - 'config': { - 'name': 'Logseq', - 'setupIcon': './icons/logseq.ico', - 'loadingGif': './icons/installing.gif', - 'certificateFile': process.env.CODE_SIGN_CERTIFICATE_FILE, - 'certificatePassword': process.env.CODE_SIGN_CERTIFICATE_PASSWORD, - "rfc3161TimeStampServer": "http://timestamp.digicert.com" - } - }, - { - 'name': '@electron-forge/maker-wix', - 'config': { - name: 'Logseq', - icon: path.join(__dirname, './icons/logseq.ico'), - language: 1033, - manufacturer: 'Logseq', - appUserModelId: 'com.logseq.logseq', - upgradeCode: "3778eb84-a0ce-4109-9120-5d4315e0d7de", - ui: { - enabled: false, - chooseDirectory: true, - images: { - banner: path.join(__dirname, './windows/banner.jpg'), - background: path.join(__dirname, './windows/background.jpg') - }, - }, - // Standard WiX template appends the unsightly "(Machine - WSI)" to the name, so use our own template - beforeCreate: (msiCreator) => { - return new Promise((resolve, reject) => { - fs.readFile(path.join(__dirname,"./windows/wix.xml"), "utf8" , (err, content) => { - if (err) { - reject (err); - } - msiCreator.wixTemplate = content; - resolve(); - }); - }); - } - } - }, - { - name: '@electron-forge/maker-dmg', - config: { - format: 'ULFO', - icon: './icons/logseq_big_sur.icns', - name: 'Logseq' - } - }, - { - name: '@electron-forge/maker-zip', - platforms: ['darwin', 'linux', 'win32'], - }, - - { - name: 'electron-forge-maker-appimage', - platforms: ['linux'], - config: { - mimeType: ["x-scheme-handler/logseq"] - } - } - ], - - publishers: [ - { - name: '@electron-forge/publisher-github', - config: { - repository: { - owner: 'logseq', - name: 'logseq' - }, - prerelease: true - } - } - ] -} diff --git a/resources/icons/installing.gif b/resources/icons/installing.gif deleted file mode 100644 index c6e545b13d..0000000000 Binary files a/resources/icons/installing.gif and /dev/null differ diff --git a/resources/icons/logseq.ico b/resources/icons/logseq.ico index c00cb0387b..eb063c41fe 100644 Binary files a/resources/icons/logseq.ico and b/resources/icons/logseq.ico differ diff --git a/resources/icons/logseq.png b/resources/icons/logseq.png index 5c75fb722a..8643e21ae4 100644 Binary files a/resources/icons/logseq.png and b/resources/icons/logseq.png differ diff --git a/resources/package.json b/resources/package.json index bb6eabafe4..8400997bc4 100644 --- a/resources/package.json +++ b/resources/package.json @@ -8,19 +8,16 @@ "description": "A privacy-first, open-source platform for knowledge management and collaboration.", "repository": "https://github.com/logseq/logseq", "scripts": { - "electron:dev": "electron-forge start", - "electron:debug": "electron-forge start --inspect-electron", - "electron:make": "electron-forge make", - "electron:make-linux-arm64": "electron-forge make --platform=linux --arch=arm64", - "electron:make-macos-arm64": "electron-forge make --platform=darwin --arch=arm64", - "electron:make-win-arm64": "electron-forge make --platform=win32 --arch=arm64", - "electron:publish:github": "electron-forge publish", - "rebuild:all": "electron-rebuild -v 38.4.0 -f", + "electron:dev": "electron .", + "electron:debug": "electron --inspect=9229 .", + "electron:make": "electron-builder --config electron-builder.yml --publish never", + "electron:make-linux-arm64": "electron-builder --config electron-builder.yml --linux AppImage zip --arm64 --publish never", + "electron:make-macos-arm64": "electron-builder --config electron-builder.yml --mac dmg zip --arm64 --publish never", + "electron:make-win-arm64": "electron-builder --config electron-builder.yml --win nsis zip --arm64 --publish never", + "electron:publish:github": "electron-builder --config electron-builder.yml --publish always", + "rebuild:all": "install-app-deps", "postinstall": "install-app-deps" }, - "config": { - "forge": "./forge.config.js" - }, "dependencies": { "@fastify/cors": "11.2.0", "@modelcontextprotocol/sdk": "^1.27.1", @@ -29,7 +26,6 @@ "diff-match-patch": "1.0.5", "electron-dl": "4.0.0", "electron-log": "5.4.3", - "electron-squirrel-startup": "1.0.1", "electron-window-state": "5.0.3", "extract-zip": "2.0.1", "fastify": "5.8.2", @@ -39,22 +35,16 @@ "open": "11.0.0", "semver": "7.7.4", "socks-proxy-agent": "9.0.0", - "update-electron-app": "3.1.2", + "electron-updater": "6.8.3", "zod": "^4.3.6", "keytar": "^7.9.0" }, "devDependencies": { - "@electron-forge/cli": "^7.8.3", - "@electron-forge/maker-deb": "^7.8.3", - "@electron-forge/maker-dmg": "^7.8.3", - "@electron-forge/maker-rpm": "^7.8.3", - "@electron-forge/maker-squirrel": "^7.8.3", - "@electron-forge/maker-wix": "^7.8.3", - "@electron-forge/maker-zip": "^7.8.3", - "@electron/rebuild": "4.0.1", - "electron": "38.4.0", - "electron-builder": "26.0.12", - "electron-devtools-installer": "4.0.0", - "electron-forge-maker-appimage": "https://github.com/logseq/electron-forge-maker-appimage.git" + "electron": "41.2.1", + "electron-builder": "26.8.2", + "electron-devtools-installer": "4.0.0" + }, + "resolutions": { + "node-abi": "4.28.0" } } diff --git a/scripts/bump-version.sh b/scripts/bump-version.sh index 801807f58d..612ea6dee4 100755 --- a/scripts/bump-version.sh +++ b/scripts/bump-version.sh @@ -34,7 +34,7 @@ V_PATCH=${BASE_LIST[2]} echo -e "${NOTICE_FLAG} Current version: ${WHITE}$BASE_VERSION" echo -e "${NOTICE_FLAG} Latest commit hash: ${WHITE}$LATEST_HASH" -echo -e "${NOTICE_FLAG} Current versionCode(Android) / buildVersion(MacOS): ${WHITE}$VERSION_CODE" +echo -e "${NOTICE_FLAG} Current versionCode(Android): ${WHITE}$VERSION_CODE" # V_MINOR=$((V_MINOR + 1)) # V_PATCH=0 @@ -58,7 +58,6 @@ $SED -i 's/defonce version ".*"/defonce version "'${NEW_VERSION}'"/g' src/main/f $SED -i 's/"version": ".*"/"version": "'${NEW_VERSION}'"/g' resources/package.json $SED -i 's/versionName ".*"/versionName "'${NEW_VERSION}'"/g' android/app/build.gradle $SED -i 's/versionCode .*/versionCode '${NEW_VERSION_CODE}'/g' android/app/build.gradle -$SED -i 's/buildVersion: .*/buildVersion: "'${NEW_VERSION_CODE}'",/g' resources/forge.config.js $SED -i 's/MARKETING_VERSION = .*;/MARKETING_VERSION = '${NEW_VERSION}';/g' ios/App/App.xcodeproj/project.pbxproj git --no-pager diff -U0 diff --git a/src/electron/electron/core.cljs b/src/electron/electron/core.cljs index 01a9ee6216..a75cdcedf6 100644 --- a/src/electron/electron/core.cljs +++ b/src/electron/electron/core.cljs @@ -14,7 +14,7 @@ [electron.server :as server] [electron.updater :refer [init-updater] :as updater] [electron.url :refer [logseq-url-handler]] - [electron.utils :refer [*win mac? linux? dev? get-win-from-sender + [electron.utils :refer [*win mac? dev? get-win-from-sender decode-protected-assets-schema-path send-to-renderer] :as utils] [electron.window :as win] @@ -34,14 +34,10 @@ (defonce *teardown-fn (volatile! nil)) (defonce *quit-dirty? (volatile! true)) -;; Handle creating/removing shortcuts on Windows when installing/uninstalling. -(when (js/require "electron-squirrel-startup") (.quit app)) - (defn setup-updater! [^js win] ;; manual/auto updater - (when-not linux? - (init-updater {:repo "logseq/logseq" - :win win}))) + (init-updater {:repo "logseq/logseq" + :win win})) (defn open-url-handler "win - the main window instance (first renderer process) diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index 820d960817..ba2fe8c643 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -5,7 +5,8 @@ ["abort-controller" :as AbortController] ["buffer" :as buffer] ["diff-match-patch" :as google-diff] - ["electron" :refer [app autoUpdater dialog ipcMain shell]] + ["electron" :refer [app dialog ipcMain shell]] + ["electron-updater" :refer [autoUpdater]] ["electron-window-state" :as windowStateKeeper] ["fs" :as fs] ["fs-extra" :as fs-extra] @@ -393,7 +394,8 @@ (defmethod handle :quitAndInstall [] (logger/info ::quick-and-install) - (.quitAndInstall autoUpdater)) + ;; https://www.electron.build/electron-updater.class.appupdater#quitandinstall + (.quitAndInstall autoUpdater false true)) ;; The graphHas* events are not used but maybe useful later? (defmethod handle :graphHasOtherWindow [^js win [_ graph]] diff --git a/src/electron/electron/updater.cljs b/src/electron/electron/updater.cljs index d4bc39609a..fdcfd6d196 100644 --- a/src/electron/electron/updater.cljs +++ b/src/electron/electron/updater.cljs @@ -1,161 +1,163 @@ (ns electron.updater - (:require [electron.utils :refer [mac? win32? prod? open fetch *win]] - [electron.logger :as logger] - [frontend.version :refer [version]] - [clojure.string :as string] - [promesa.core :as p] - [cljs-bean.core :as bean] + (:require [cljs-bean.core :as bean] [electron.configs :as cfgs] - ["semver" :as semver] - ["os" :as os] - ["fs" :as fs] - ["path" :as node-path] - ["electron" :refer [ipcMain app autoUpdater]])) + [electron.logger :as logger] + [electron.utils :refer [*win prod?]] + [frontend.version :refer [version]] + ["electron" :refer [ipcMain]] + ["electron-updater" :refer [autoUpdater]])) -(def *update-ready-to-install (atom nil)) (def *update-pending (atom nil)) +(def *downloaded-update (atom nil)) (def debug (partial logger/debug "[updater]")) +(def electron-version version) -;Event: 'error' -;Event: 'checking-for-update' -;Event: 'update-available' -;Event: 'update-not-available' -;Event: 'download-progress' -;Event: 'update-downloaded' -;Event: 'completed' +(defn- updater-channel + [] + (let [platform (.-platform js/process) + arch (.-arch js/process)] + (case platform + "win32" (when (#{"x64" "arm64"} arch) + (str "latest-" arch)) + "darwin" (when (#{"x64" "arm64"} arch) + (str "latest-" arch)) + nil))) -(def electron-version - (let [parts (string/split version #"\.") - parts (take 3 parts)] - (string/join "." parts))) +(defn- emit-update! + [^js win type payload] + (when-let [web-contents (and win (. ^js win -webContents))] + (.send web-contents "updates-callback" + (bean/->js {:type type :payload payload})))) -(defn get-latest-artifact-info - [repo] - (let [endpoint (str "https://update.electronjs.org/" repo "/" js/process.platform "-" js/process.arch "/" electron-version)] - (debug "checking" endpoint) - (p/catch - (p/let [res (fetch endpoint) - status (.-status res) - text (.text res)] - (if (.-ok res) - (let [info (when-not (string/blank? text) (js/JSON.parse text))] - (bean/->clj info)) - (throw (js/Error. (str "[" status "] " text))))) - (fn [e] - (logger/warn "[update server error]" e) - (throw e))))) +(defn- emit-completed! + [^js win] + (emit-update! win "completed" nil)) -(defn check-for-updates - [{:keys [repo ^js win] - [auto-download] :args}] - (let [emit (fn [type payload] - (.. win -webContents - (send "updates-callback" (bean/->js {:type type :payload payload}))))] - (debug "check for updates #" repo version) - (p/create - (fn [resolve reject] - (emit "checking-for-update" nil) - (-> (p/let - [artifact (get-latest-artifact-info repo) +(defn- normalize-payload + [payload] + (when payload + (bean/->clj payload))) - artifact (when-let [remote-version (and artifact (re-find #"\d+\.\d+\.\d+" (:url artifact)))] - (when (and (. semver valid remote-version) - (. semver lt electron-version remote-version)) artifact)) +(defn- normalize-error + [^js e] + {:message (or (.-message e) (str e))}) - url (if-not artifact (do (emit "update-not-available" nil) (throw (js/Error. "update not available"))) (:url artifact)) - _ (if url (emit "update-available" (bean/->js artifact)) (throw (js/Error. "download url not exists"))) - ;; start download FIXME: user's preference about auto download - _ (when-not auto-download (throw (js/Error. "no auto download"))) - ^js dl-res (fetch url) - _ (when-not (.-ok dl-res) (throw (js/Error. "download resource not available"))) - dest-info (p/create - (fn [resolve1 reject1] - (let [headers (. dl-res -headers) - total-size (js/parseInt (.get headers "content-length")) - body (.-body dl-res) - start-at (.now js/Date) - *downloaded (atom 0) - dest-basename (node-path/basename url) - tmp-dest-file (node-path/join (os/tmpdir) (str dest-basename ".pending")) - dest-file (.createWriteStream fs tmp-dest-file)] - (doto body - (.on "data" (fn [chunk] - (let [downloaded (+ @*downloaded (.-length chunk)) - percent (.toFixed (/ (* 100 downloaded) total-size) 2) - elapsed (/ (- (js/Date.now) start-at) 1000)] - (.write dest-file chunk) - (emit "download-progress" {:total total-size - :downloaded downloaded - :percent percent - :elapsed elapsed}) - (reset! *downloaded downloaded)))) - (.on "error" (fn [e] - (reject1 e))) - (.on "end" (fn [_e] - (.close dest-file) - (let [dest-file (string/replace tmp-dest-file ".pending" "")] - (fs/renameSync tmp-dest-file dest-file) - (resolve1 (merge artifact {:dest-file dest-file})))))))))] - (reset! *update-ready-to-install dest-info) - (emit "update-downloaded" dest-info) - (resolve nil)) - (p/catch - (fn [e] - (if e - (do - (emit "error" e) - (reject e)) - (resolve nil)))) - (p/finally - (fn [] - (emit "completed" nil)))))))) - -(defn- new-version-downloaded-cb - [_ notes name date url] - (logger/info "[update-downloaded]" name notes date url) +(defn- emit-update-downloaded! + [payload] (when-let [web-contents (and @*win (. ^js @*win -webContents))] - (.send web-contents "auto-updater-downloaded" - (bean/->js {:notes notes :name name :date date :url url})))) + (.send web-contents "auto-updater-downloaded" (bean/->js payload)))) -(defn init-auto-updater - [repo] - (when (.valid semver electron-version) - (p/let [info (get-latest-artifact-info repo)] - (when-let [remote-version (and info (re-find #"\d+\.\d+\.\d+" (:url info)))] - (if (and (. semver valid remote-version) - (. semver lt electron-version remote-version)) +(defn- configure-auto-updater! + [] + (let [channel (updater-channel)] + (when channel + (set! (.-channel autoUpdater) channel) + ;; Keep the original downgrade policy even though setting channel flips it on. + (set! (.-allowDowngrade autoUpdater) false)) + (debug "configure-auto-updater" {:platform (.-platform js/process) + :arch (.-arch js/process) + :channel channel})) + (set! (.-autoInstallOnAppQuit autoUpdater) false) + (set! (.-autoDownload autoUpdater) false)) - ;; start auto updater - (do - (debug "Found remote version" remote-version) - (when (or mac? win32?) - (debug "forward update to autoUpdater") - ;; FIXME: It seems that update-electron-app doesn't work on linux - (when-let [f (js/require "update-electron-app")] - (f #js{:notifyUser false}) - (.once autoUpdater "update-downloaded" - new-version-downloaded-cb)))) +(defn- register-auto-updater-listeners! + [^js win] + (let [checking-handler + (fn [] + (emit-update! win "checking-for-update" nil)) - (debug "Skip remote version [ahead of pre-release]" remote-version)))))) + available-handler + (fn [info] + (emit-update! win "update-available" (normalize-payload info))) + + not-available-handler + (fn [info] + (emit-update! win "update-not-available" (normalize-payload info)) + (emit-completed! win)) + + progress-handler + (fn [progress] + (emit-update! win "download-progress" (normalize-payload progress))) + + downloaded-handler + (fn [info] + (let [payload (normalize-payload info)] + (reset! *downloaded-update payload) + (logger/info "[update-downloaded]" payload) + (emit-update! win "update-downloaded" payload) + (emit-update-downloaded! payload) + (emit-completed! win))) + + error-handler + (fn [error] + (logger/warn "[updater/error]" error) + (emit-update! win "error" (normalize-error error)) + (emit-completed! win))] + (.on autoUpdater "checking-for-update" checking-handler) + (.on autoUpdater "update-available" available-handler) + (.on autoUpdater "update-not-available" not-available-handler) + (.on autoUpdater "download-progress" progress-handler) + (.on autoUpdater "update-downloaded" downloaded-handler) + (.on autoUpdater "error" error-handler) + #(do + (.off autoUpdater "checking-for-update" checking-handler) + (.off autoUpdater "update-available" available-handler) + (.off autoUpdater "update-not-available" not-available-handler) + (.off autoUpdater "download-progress" progress-handler) + (.off autoUpdater "update-downloaded" downloaded-handler) + (.off autoUpdater "error" error-handler)))) + +(defn- (.checkForUpdates autoUpdater) + (.then + (fn [_] + ;; Manual checks without auto download need an explicit terminal event. + (when-not auto-download? + (emit-completed! win)))) + (.catch + (fn [error] + (logger/warn "[updater/check]" error) + (emit-update! win "error" (normalize-error error)) + (emit-completed! win))))) + +(defn- init-auto-updater! + [^js win] + (when (and prod? (not= false (cfgs/get-item :auto-update))) + (debug "init-auto-updater") + (set! (.-autoDownload autoUpdater) true) + (-> (.checkForUpdates autoUpdater) + (.catch (fn [error] + (logger/warn "[updater/auto-check]" error) + (emit-update! win "error" (normalize-error error)) + (emit-completed! win)))))) (defn init-updater - [{:keys [repo ^js _win] :as opts}] - (and prod? (not= false (cfgs/get-item :auto-update)) (init-auto-updater repo)) - (let [check-channel "check-for-updates" + [{:keys [^js win] :as _opts}] + (configure-auto-updater!) + (let [dispose-listeners! (register-auto-updater-listeners! win) + check-channel "check-for-updates" install-channel "install-updates" + get-downloaded-channel "get-downloaded-update" check-listener (fn [_e & args] (when-not @*update-pending (reset! *update-pending true) - (p/finally - (check-for-updates (merge opts {:args args})) - #(reset! *update-pending nil)))) - install-listener (fn [_e quit-app?] - (when-let [dest-file (:dest-file @*update-ready-to-install)] - (open dest-file) - (and quit-app? (js/setTimeout #(.quit app) 1000))))] + (let [auto-download? (true? (first args))] + (-> ( @*downloaded-update bean/->js))] + (init-auto-updater! win) (.handle ipcMain check-channel check-listener) (.handle ipcMain install-channel install-listener) + (.handle ipcMain get-downloaded-channel get-downloaded-listener) #(do + (dispose-listeners!) (.removeHandler ipcMain install-channel) (.removeHandler ipcMain check-channel) + (.removeHandler ipcMain get-downloaded-channel) (reset! *update-pending nil)))) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 268ea94998..2d3be879b4 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -2137,8 +2137,6 @@ item-content (.. target -nextSibling -data)] (editor-handler/toggle-list-checkbox block item-content)))})) -(declare block-content) - (declare src-cp) (rum/defc ^:large-vars/cleanup-todo text-block-title @@ -3795,8 +3793,6 @@ (gp-mldoc/inline->edn title (mldoc/get-default-config :markdown)))) -(declare ->hiccup) - (defn- get-code-mode-by-lang [lang] (some (fn [m] (when (= (.-name m) lang) (.-mode m))) js/window.CodeMirror.modeInfo)) diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index a7c0e915e2..47de27a509 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -224,7 +224,6 @@ (rum/defc help-menu-popup [] - (hooks/use-effect! (fn [] (state/set-state! :ui/handbooks-open? false)) diff --git a/src/main/frontend/components/header.cljs b/src/main/frontend/components/header.cljs index 7a744b6a90..b4cb8556af 100644 --- a/src/main/frontend/components/header.cljs +++ b/src/main/frontend/components/header.cljs @@ -4,6 +4,7 @@ [cljs-time.core :as t] [clojure.string :as string] [dommy.core :as d] + [electron.ipc :as ipc] [frontend.common.missionary :as c.m] [frontend.components.block :as component-block] [frontend.components.export :as export] @@ -35,6 +36,7 @@ [logseq.shui.ui :as shui] [logseq.shui.util :as shui-util] [missionary.core :as m] + [promesa.core :as p] [reitit.frontend.easy :as rfe] [rum.core :as rum])) @@ -248,8 +250,17 @@ (let [[downloaded, set-downloaded] (rum/use-state nil) _ (hooks/use-effect! (fn [] - (when-let [channel (and (util/electron?) "auto-updater-downloaded")] - (let [callback (fn [_ args] + (when (util/electron?) + (-> (ipc/invoke "get-downloaded-update") + (p/then + (fn [args] + (when args + (let [args (bean/->clj args)] + (set-downloaded args) + (state/set-state! :electron/auto-updater-downloaded args))))) + (p/catch (fn [_] nil))) + (let [channel "auto-updater-downloaded" + callback (fn [_ args] (js/console.debug "[new-version downloaded] args:" args) (let [args (bean/->clj args)] (set-downloaded args) diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index 0a6798db4b..b622108d4a 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -74,7 +74,7 @@ (if update-pending? (t :settings.general/checking) (t :settings.general/check-for-updates)) :class "text-sm mr-1" :disabled update-pending? - :on-click #(js/window.apis.checkForUpdates false)) + :on-click #(js/window.apis.checkForUpdates true)) :else nil)] @@ -101,6 +101,9 @@ (string/blank? type)) [:div.update-state.text-sm (case type + "checking-for-update" + [:p (t :settings-page/checking)] + "update-not-available" [:p (t :settings.general/app-updated)] @@ -116,6 +119,21 @@ :style {:margin-inline-start "0.25rem"}} svg/external-link name " 🎉"]]) + "download-progress" + (let [percent (some-> payload :percent js/Math.round)] + [:p (str "Downloading update" + (when (number? percent) + (str " " percent "%")) + "...")]) + + "update-downloaded" + [:div.flex.items-center.gap-2.flex-wrap + [:p (t :updater/new-version-install)] + (ui/button + (t :updater/quit-and-install) + :class "text-sm" + :on-click #(ipc/ipc :quitAndInstall))] + "error" (let [release-channel-link [:a.link.inline-flex.items-center.gap-1 diff --git a/src/main/frontend/handler/common/page.cljs b/src/main/frontend/handler/common/page.cljs index db31a9d07f..bb487043af 100644 --- a/src/main/frontend/handler/common/page.cljs +++ b/src/main/frontend/handler/common/page.cljs @@ -160,8 +160,8 @@ (config-handler/set-config! :feature/enable-journals? true) (notification/show! (t :settings.features/journals-enabled) :success))) (-> (p/let [res (ui-outliner-tx/transact! - {:outliner-op :delete-page} - (outliner-op/delete-page! page-uuid))] + {:outliner-op :delete-page} + (outliner-op/delete-page! page-uuid))] (if res (when ok-handler (ok-handler)) (when error-handler (error-handler)))) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 3ea9ac0d48..4cfa47338b 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -1084,8 +1084,6 @@ (:db/id page) :page)))))) -(declare save-current-block!) - ;; FIXME: shortcut `mod+.` doesn't work on Web (Chrome) (defn zoom-in! [] (if (state/editing?) diff --git a/src/main/frontend/ui.cljs b/src/main/frontend/ui.cljs index fef1451ebb..e4287a4d82 100644 --- a/src/main/frontend/ui.cljs +++ b/src/main/frontend/ui.cljs @@ -300,8 +300,6 @@ (notification/clear! uid)) :icon "x"})]]]]]]))) -(declare button) - (rum/defc notification-clear-all [] [:div.ui__notifications-content diff --git a/src/main/frontend/worker/db_worker.cljs b/src/main/frontend/worker/db_worker.cljs index 373e123259..6d8f4d5c91 100644 --- a/src/main/frontend/worker/db_worker.cljs +++ b/src/main/frontend/worker/db_worker.cljs @@ -192,7 +192,7 @@ (let [[content addresses] (bean/->clj result) addresses (when addresses (js/JSON.parse addresses)) - data (sqlite-util/transit-read content)] + data (sqlite-util/read-transit-str content)] (if (and addresses (map? data)) (assoc data :addresses addresses) data)))) @@ -209,7 +209,7 @@ (when-let [addresses (:addresses data)] (js/JSON.stringify (bean/->js addresses))))] #js {:$addr addr - :$content (sqlite-util/transit-write data') + :$content (sqlite-util/write-transit-str data') :$addresses addresses})) addr+data-seq)] (upsert-addr-content! db data))) diff --git a/src/main/frontend/worker/sync/apply_txs.cljs b/src/main/frontend/worker/sync/apply_txs.cljs index ebe3675bb9..367dd98e98 100644 --- a/src/main/frontend/worker/sync/apply_txs.cljs +++ b/src/main/frontend/worker/sync/apply_txs.cljs @@ -284,8 +284,7 @@ [repo] (mark-pending-txs-false! repo (mapv :tx-id (pending-txs repo)))) -(declare replay-canonical-outliner-op! - history-action-error-reason) +(declare history-action-error-reason) (defn- inline-history-action [tx-meta] diff --git a/src/main/frontend/worker/sync/client_op.cljs b/src/main/frontend/worker/sync/client_op.cljs index dfbf8b950e..0ed5685dfa 100644 --- a/src/main/frontend/worker/sync/client_op.cljs +++ b/src/main/frontend/worker/sync/client_op.cljs @@ -311,15 +311,15 @@ {:tx-id tx-id :outliner-op (str->kw (aget row "outliner_op")) :forward-outliner-ops (or (normalize-op-entries - (sqlite-util/transit-read (aget row "forward_outliner_ops"))) + (sqlite-util/read-transit-str (aget row "forward_outliner_ops"))) []) :inverse-outliner-ops (or (normalize-op-entries - (sqlite-util/transit-read (aget row "inverse_outliner_ops"))) + (sqlite-util/read-transit-str (aget row "inverse_outliner_ops"))) []) :inferred-outliner-ops? (int->bool (aget row "inferred_outliner_ops")) :db-sync/undo-redo (str->kw (aget row "undo_redo")) - :tx (sqlite-util/transit-read (aget row "normalized_tx_data")) - :reversed-tx (sqlite-util/transit-read (aget row "reversed_tx_data"))}))) + :tx (sqlite-util/read-transit-str (aget row "normalized_tx_data")) + :reversed-tx (sqlite-util/read-transit-str (aget row "reversed_tx_data"))}))) (defn upsert-local-tx-entry! [repo {:keys [tx-id created-at pending? failed? outliner-op undo-redo @@ -362,11 +362,11 @@ (bool->int failed?) (kw->str outliner-op) (kw->str undo-redo) - (sqlite-util/transit-write forward-outliner-ops') - (sqlite-util/transit-write inverse-outliner-ops') + (sqlite-util/write-transit-str forward-outliner-ops') + (sqlite-util/write-transit-str inverse-outliner-ops') (bool->int inferred-outliner-ops?) - (sqlite-util/transit-write (or normalized-tx-data [])) - (sqlite-util/transit-write (or reversed-tx-data []))]) + (sqlite-util/write-transit-str (or normalized-tx-data [])) + (sqlite-util/write-transit-str (or reversed-tx-data []))]) {:tx-id tx-id :created-at created-at' :should-inc-pending? should-inc-pending?}))) @@ -458,7 +458,7 @@ [(str block-uuid)])] (let [op-type (str->kw (aget row "asset_op")) t (aget row "asset_t") - value (or (some-> (aget row "asset_value") sqlite-util/transit-read) + value (or (some-> (aget row "asset_value") sqlite-util/read-transit-str) {:block-uuid block-uuid})] (local-asset-op-map op-type t value)))) @@ -478,7 +478,7 @@ (str block-uuid) (kw->str op-type) t - (sqlite-util/transit-write value)]))))) + (sqlite-util/write-transit-str value)]))))) ;;; asset ops (defn add-asset-ops @@ -538,7 +538,7 @@ (keep (fn [row] (let [op-type (str->kw (aget row "asset_op")) t (aget row "asset_t") - value (some-> (aget row "asset_value") sqlite-util/transit-read)] + value (some-> (aget row "asset_value") sqlite-util/read-transit-str)] (when (and op-type (map? value) (:block-uuid value)) (local-asset-op-map op-type t value))))) vec))) diff --git a/src/main/frontend/worker/sync/temp_sqlite.cljs b/src/main/frontend/worker/sync/temp_sqlite.cljs index deb226b45e..835ec2dd35 100644 --- a/src/main/frontend/worker/sync/temp_sqlite.cljs +++ b/src/main/frontend/worker/sync/temp_sqlite.cljs @@ -26,7 +26,7 @@ first)] (let [[content addresses] (bean/->clj result) addresses (when addresses (js/JSON.parse addresses)) - data (sqlite-util/transit-read content)] + data (sqlite-util/read-transit-str content)] (if (and addresses (map? data)) (assoc data :addresses addresses) data)))) @@ -42,7 +42,7 @@ (when-let [addresses (:addresses data)] (js/JSON.stringify (bean/->js addresses))))] #js {:$addr addr - :$content (sqlite-util/transit-write data') + :$content (sqlite-util/write-transit-str data') :$addresses addresses})) addr+data-seq)] (upsert-addr-content! db data))) diff --git a/src/main/logseq/api/db_based/cli.cljs b/src/main/logseq/api/db_based/cli.cljs index 774a429169..af248956d0 100644 --- a/src/main/logseq/api/db_based/cli.cljs +++ b/src/main/logseq/api/db_based/cli.cljs @@ -56,7 +56,7 @@ (defn import-edn "Given EDN data as a transitized string, converts to EDN and imports it." [edn-data*] - (p/let [edn-data (sqlite-util/transit-read edn-data*) + (p/let [edn-data (sqlite-util/read-transit-str edn-data*) {:keys [error]} (ui-outliner-tx/transact! {:outliner-op :batch-import-edn} (outliner-op/batch-import-edn! edn-data {}))] @@ -72,5 +72,5 @@ result (state/= 2.1.2 < 3.0.0" -ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4126,7 +3837,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4376,7 +4087,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.14, is-typed-array@^1.1.3: +is-typed-array@^1.1.3: version "1.1.15" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== @@ -4417,16 +4128,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4818,15 +4524,6 @@ mathml-tag-names@^2.1.3: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - mdast-util-from-markdown@^0.8.0: version "0.8.5" resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" @@ -4949,14 +4646,6 @@ micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -4994,16 +4683,6 @@ mini-svg-data-uri@^1.2.3: resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939" integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - minimatch@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" @@ -5222,35 +4901,6 @@ node-html-parser@5.4.2: css-select "^4.2.1" he "1.2.0" -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - node-releases@^2.0.27: version "2.0.36" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" @@ -5373,23 +5023,6 @@ object-inspect@^1.13.3: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -5428,11 +5061,6 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -5514,7 +5142,7 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pako@~1.0.2, pako@~1.0.5: +pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -5526,18 +5154,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" - integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== - dependencies: - asn1.js "^4.10.1" - browserify-aes "^1.2.0" - evp_bytestokey "^1.0.3" - hash-base "~3.0" - pbkdf2 "^3.1.2" - safe-buffer "^5.2.1" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -5582,11 +5198,6 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-complete-extname@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b" @@ -5675,18 +5286,6 @@ path@0.12.7: process "^0.11.1" util "^0.10.3" -pbkdf2@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b" - integrity sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA== - dependencies: - create-hash "~1.1.3" - create-hmac "^1.1.7" - ripemd160 "=2.0.1" - safe-buffer "^5.2.1" - sha.js "^2.4.11" - to-buffer "^1.2.0" - pdfjs-dist@4.2.67: version "4.2.67" resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-4.2.67.tgz#dd2a65a4b00d95cd4bc2c1f6a27c5e9eb31d512a" @@ -6317,18 +5916,6 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -public-encrypt@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - pump@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" @@ -6337,7 +5924,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== @@ -6354,11 +5941,6 @@ qs@^6.12.3: dependencies: side-channel "^1.1.0" -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -6369,21 +5951,6 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -6503,7 +6070,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: +readable-stream@^2.0.2, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -6523,7 +6090,7 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -readline-sync@^1.4.7: +readline-sync@^1.4.10: version "1.4.10" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== @@ -6702,22 +6269,6 @@ rimraf@^6.0.1: glob "^11.0.0" package-json-from-dist "^1.0.0" -ripemd160@=2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - integrity sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w== - dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6725,7 +6276,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6829,36 +6380,28 @@ set-function-length@^1.2.2: gopd "^1.0.1" has-property-descriptors "^1.0.2" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: - version "2.4.12" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" - integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== - dependencies: - inherits "^2.0.4" - safe-buffer "^5.2.1" - to-buffer "^1.2.0" - shadow-cljs-jar@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.4.tgz#0939d91c468b4bc5eab5a958f79e7ef5696fdf62" integrity sha512-cZB2pzVXBnhpJ6PQdsjO+j/MksR28mv4QD/hP/2y1fsIa9Z9RutYgh3N34FZ8Ktl4puAXaIGlct+gMCJ5BmwmA== -shadow-cljs@2.28.23: - version "2.28.23" - resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.28.23.tgz#06f2bc1f5345e35f8b0f995b4749ae4575654abe" - integrity sha512-SM7LeLctZLLCm6Y3NxWOH4GvHqHDZ6Jz9bUgfpJrk1jMADqIp3rliD6Rrd12gLX2b9/oEh6UyD7X+yw6O1++sw== +shadow-cljs@^3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-3.4.4.tgz#e76e97192f6809af3734dcf1fa5acb55d3611e21" + integrity sha512-6/Z4XVWBavdDSbAR+ECbZTnq22Gws1zy+Ilfwcdl5SMf3ZdOYiYczqykfg/rLjlU0Ap9BvX8cEZGBExK4PGDaw== dependencies: - node-libs-browser "^2.2.1" - readline-sync "^1.4.7" + buffer "^6.0.3" + process "^0.11.10" + readline-sync "^1.4.10" shadow-cljs-jar "1.3.4" - source-map-support "^0.4.15" - which "^1.3.1" - ws "^7.4.6" + source-map-support "^0.5.21" + which "^5.0.0" + ws "^8.18.1" shallow-clone@^3.0.0: version "3.0.1" @@ -7036,14 +6579,7 @@ source-map-loader@^5.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@~0.5.20: +source-map-support@^0.5.21, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -7051,7 +6587,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.1, source-map@^0.5.6: +source-map@^0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== @@ -7116,14 +6652,6 @@ split@^1.0.0: dependencies: through "2" -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - stream-buffers@2.2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" @@ -7141,17 +6669,6 @@ stream-exhaust@^1.0.2: resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - streamx@^2.12.0, streamx@^2.12.5, streamx@^2.13.2, streamx@^2.14.0: version "2.23.0" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" @@ -7215,7 +6732,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -7655,13 +7172,6 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - tiny-typed-emitter@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" @@ -7680,20 +7190,6 @@ tmp@^0.2.1: resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== - -to-buffer@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0" - integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ== - dependencies: - isarray "^2.0.5" - safe-buffer "^5.2.1" - typed-array-buffer "^1.0.3" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -7769,11 +7265,6 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7801,15 +7292,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -7943,20 +7425,13 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.10.3, util@^0.10.4: +util@^0.10.3: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" @@ -8083,11 +7558,6 @@ vinyl@^3.0.0, vinyl@^3.0.1: replace-ext "^2.0.0" teex "^1.0.1" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - watchpack@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" @@ -8284,10 +7754,10 @@ write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.6: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== +ws@^8.18.1: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" + integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA== ws@^8.19.0: version "8.19.0" @@ -8345,7 +7815,7 @@ xpath@^0.0.32: resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.32.tgz#1b73d3351af736e17ec078d6da4b8175405c48af" integrity sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw== -xtend@^4.0.0, xtend@~4.0.1: +xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==