From 8f8e17ea5650a6ce5145f17609033678fb598be9 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Wed, 3 Sep 2025 10:44:44 +0200 Subject: [PATCH] pagefind: 1.3.0 -> 1.4.0 Changelog: https://github.com/Pagefind/pagefind/releases/tag/v1.4.0 Diff: https://github.com/cloudcannon/pagefind/compare/v1.3.0...v1.4.0 --- .../misc/pagefind/cargo-lock.patch | 281 ++++++++++++++++++ pkgs/applications/misc/pagefind/default.nix | 152 +++++++--- .../lindera-assets-support-file-paths.patch | 30 -- ...indera-dictionary-support-file-paths.patch | 41 +++ 4 files changed, 437 insertions(+), 67 deletions(-) create mode 100644 pkgs/applications/misc/pagefind/cargo-lock.patch delete mode 100644 pkgs/applications/misc/pagefind/lindera-assets-support-file-paths.patch create mode 100644 pkgs/applications/misc/pagefind/lindera-dictionary-support-file-paths.patch diff --git a/pkgs/applications/misc/pagefind/cargo-lock.patch b/pkgs/applications/misc/pagefind/cargo-lock.patch new file mode 100644 index 000000000000..f0fbd420e61f --- /dev/null +++ b/pkgs/applications/misc/pagefind/cargo-lock.patch @@ -0,0 +1,281 @@ +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -8,7 +8,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "bytes", + "futures-core", + "futures-sink", +@@ -29,7 +29,7 @@ + "actix-service", + "actix-utils", + "actix-web", +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "bytes", + "derive_more 2.0.1", + "futures-core", +@@ -53,7 +53,7 @@ + "actix-service", + "actix-utils", + "base64 0.22.1", +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "brotli", + "bytes", + "bytestring", +@@ -335,15 +335,13 @@ + + [[package]] + name = "async-compression" +-version = "0.4.29" ++version = "0.4.30" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "5bee399cc3a623ec5a2db2c5b90ee0190a2260241fbe0c023ac8f7bab426aaf8" ++checksum = "977eb15ea9efd848bb8a4a1a2500347ed7f0bf794edf0dc3ddcf439f43d36b23" + dependencies = [ + "compression-codecs", + "compression-core", +- "flate2", + "futures-core", +- "memchr", + "pin-project-lite", + "tokio", + ] +@@ -430,9 +428,9 @@ + + [[package]] + name = "bitflags" +-version = "2.9.3" ++version = "2.9.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" ++checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + + [[package]] + name = "block-buffer" +@@ -513,10 +511,11 @@ + + [[package]] + name = "cc" +-version = "1.2.34" ++version = "1.2.35" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" ++checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" + dependencies = [ ++ "find-msvc-tools", + "jobserver", + "libc", + "shlex", +@@ -566,9 +565,9 @@ + + [[package]] + name = "clap" +-version = "4.5.46" ++version = "4.5.47" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" ++checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" + dependencies = [ + "clap_builder", + "clap_derive", +@@ -576,9 +575,9 @@ + + [[package]] + name = "clap_builder" +-version = "4.5.46" ++version = "4.5.47" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" ++checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" + dependencies = [ + "anstream", + "anstyle", +@@ -588,9 +587,9 @@ + + [[package]] + name = "clap_derive" +-version = "4.5.45" ++version = "4.5.47" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" ++checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" + dependencies = [ + "heck 0.5.0", + "proc-macro2", +@@ -612,15 +611,13 @@ + + [[package]] + name = "compression-codecs" +-version = "0.4.29" ++version = "0.4.30" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "c7eea68f0e02c2b0aa8856e9a9478444206d4b6828728e7b0697c0f8cca265cb" ++checksum = "485abf41ac0c8047c07c87c72c8fb3eb5197f6e9d7ded615dfd1a00ae00a0f64" + dependencies = [ + "compression-core", + "flate2", +- "futures-core", + "memchr", +- "pin-project-lite", + ] + + [[package]] +@@ -828,9 +825,9 @@ + + [[package]] + name = "deranged" +-version = "0.4.0" ++version = "0.5.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" ++checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" + dependencies = [ + "powerfmt", + ] +@@ -1077,6 +1074,12 @@ + ] + + [[package]] ++name = "find-msvc-tools" ++version = "0.1.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" ++ ++[[package]] + name = "flate2" + version = "1.1.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -1675,7 +1678,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "cfg-if", + "libc", + ] +@@ -1813,9 +1816,9 @@ + + [[package]] + name = "lexical-core" +-version = "1.0.0" ++version = "1.0.5" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "c26c7da389462e0173a0e9580b3cf7b6a10074e93df78b2768d3ee9fa6d54fc4" ++checksum = "b765c31809609075565a70b4b71402281283aeda7ecaf4818ac14a7b2ade8958" + dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", +@@ -1911,7 +1914,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "libc", + "redox_syscall", + ] +@@ -2096,7 +2099,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "1610d7994d67a05bb35861cd733b069b1171de8693bc8452849c59361a1bb87b" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "cfg-if", + "cssparser", + "encoding_rs", +@@ -2152,22 +2155,22 @@ + + [[package]] + name = "minicbor" +-version = "0.19.1" ++version = "2.1.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "d7005aaf257a59ff4de471a9d5538ec868a21586534fff7f85dd97d4043a6139" ++checksum = "4f182275033b808ede9427884caa8e05fa7db930801759524ca7925bd8aa7a82" + dependencies = [ + "minicbor-derive", + ] + + [[package]] + name = "minicbor-derive" +-version = "0.13.0" ++version = "0.18.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "1154809406efdb7982841adb6311b3d095b46f78342dd646736122fe6b19e267" ++checksum = "b17290c95158a760027059fe3f511970d6857e47ff5008f9e09bffe3d3e1c6af" + dependencies = [ + "proc-macro2", + "quote", +- "syn 1.0.109", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2728,7 +2731,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + ] + + [[package]] +@@ -2878,7 +2881,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys", +@@ -3291,12 +3294,11 @@ + + [[package]] + name = "time" +-version = "0.3.41" ++version = "0.3.43" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" ++checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" + dependencies = [ + "deranged", +- "itoa 1.0.15", + "num-conv", + "powerfmt", + "serde", +@@ -3306,15 +3308,15 @@ + + [[package]] + name = "time-core" +-version = "0.1.4" ++version = "0.1.6" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" ++checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + + [[package]] + name = "time-macros" +-version = "0.2.22" ++version = "0.2.24" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" ++checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" + dependencies = [ + "num-conv", + "time-core", +@@ -3429,7 +3431,7 @@ + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" + dependencies = [ +- "bitflags 2.9.3", ++ "bitflags 2.9.4", + "bytes", + "futures-util", + "http 1.3.1", diff --git a/pkgs/applications/misc/pagefind/default.nix b/pkgs/applications/misc/pagefind/default.nix index 301c2c6d5ca6..f54060700337 100644 --- a/pkgs/applications/misc/pagefind/default.nix +++ b/pkgs/applications/misc/pagefind/default.nix @@ -23,53 +23,96 @@ let # the lindera-unidic v0.32.2 crate uses [1] an outdated unidic-mecab fork [2] and builds it in pure rust # [1] https://github.com/lindera/lindera/blob/v0.32.2/lindera-unidic/build.rs#L5-L11 # [2] https://github.com/lindera/unidic-mecab - lindera-unidic-src = fetchurl { - url = "https://dlwqk3ibdg1xh.cloudfront.net/unidic-mecab-2.1.2.tar.gz"; - hash = "sha256-JKx1/k5E2XO1XmWEfDX6Suwtt6QaB7ScoSUUbbn8EYk="; + # To find these urls: + # rg -A5 download_urls $(nix-build . -A pagefind.cargoDeps --no-out-link)/lindera-*/build.rs + lindera-srcs = { + unidic-mecab = fetchurl { + passthru.vendorDir = "lindera-unidic-*"; + url = "https://Lindera.dev/unidic-mecab-2.1.2.tar.gz"; + hash = "sha256-JKx1/k5E2XO1XmWEfDX6Suwtt6QaB7ScoSUUbbn8EYk="; + }; + mecab-ko-dic = fetchurl { + passthru.vendorDir = "lindera-ko-dic-*"; + url = "https://Lindera.dev/mecab-ko-dic-2.1.1-20180720.tar.gz"; + hash = "sha256-cCztIcYWfp2a68Z0q17lSvWNREOXXylA030FZ8AgWRo="; + }; + ipadic = fetchurl { + passthru.vendorDir = "lindera-ipadic-0.*"; + url = "https://Lindera.dev/mecab-ipadic-2.7.0-20070801.tar.gz"; + hash = "sha256-CZ5G6A1V58DWkGeDr/cTdI4a6Q9Gxe+W7BU7vwm/VVA="; + }; + cc-cedict = fetchurl { + passthru.vendorDir = "lindera-cc-cedict-*"; + url = "https://lindera.dev/CC-CEDICT-MeCab-0.1.0-20200409.tar.gz"; + hash = "sha256-7Tz54+yKgGR/DseD3Ana1DuMytLplPXqtv8TpB0JFsg="; + }; + ipadic-neologd = fetchurl { + passthru.vendorDir = "lindera-ipadic-neologd-*"; + url = "https://lindera.dev/mecab-ipadic-neologd-0.0.7-20200820.tar.gz"; + hash = "sha256-1VwCwgSTKFixeQUFVCdqMzZKne/+FTgM56xT7etqjqI="; + }; }; in -rustPlatform.buildRustPackage rec { +rustPlatform.buildRustPackage (finalAttrs: { pname = "pagefind"; - version = "1.3.0"; + version = "1.4.0"; src = fetchFromGitHub { - owner = "cloudcannon"; + owner = "Pagefind"; repo = "pagefind"; - tag = "v${version}"; - hash = "sha256-NIEiXwuy8zuUDxPsD4Hiq3x4cOG3VM+slfNIBSJU2Mk="; + tag = "v${finalAttrs.version}"; + hash = "sha256-+jArZueDqpJQKg3fKdJjeQQL+egyR6Zi6wqPMZoFgyk="; }; - cargoHash = "sha256-e1JSK8RnBPGcAmgxJZ7DaYhMMaUqO412S9YvaqXll3E="; + cargoPatches = [ ./cargo-lock.patch ]; + cargoHash = "sha256-zbo8NkB9umpNDvkhKXpOdt8hJn+d+nrTXMaUghmIPrg="; + env.cargoDeps_web = rustPlatform.fetchCargoVendor { + name = "cargo-deps-web-${finalAttrs.version}"; + inherit (finalAttrs) src; + sourceRoot = "${finalAttrs.src.name}/pagefind_web"; + hash = "sha256-DaipINtwePA03YdbSzh6EjH4Q13P3CB9lwcmTOR54dM="; + }; env.npmDeps_web_js = fetchNpmDeps { - name = "npm-deps-web-js"; - src = "${src}/pagefind_web_js"; - hash = "sha256-1gdVBCxxLEGFihIxoSSgxw/tMyVgwe7HFG/JjEfYVnQ="; + name = "pagefind-npm-deps-web-js-${finalAttrs.version}"; + inherit (finalAttrs) src; + sourceRoot = "${finalAttrs.src.name}/pagefind_web_js"; + hash = "sha256-whpmjNKdiMxNfg7fRIWUPdyRWqsEphhqvQfiM65GYDs="; }; env.npmDeps_ui_default = fetchNpmDeps { - name = "npm-deps-ui-default"; - src = "${src}/pagefind_ui/default"; + name = "pagefind-npm-deps-ui-default-${finalAttrs.version}"; + inherit (finalAttrs) src; + sourceRoot = "${finalAttrs.src.name}/pagefind_ui/default"; hash = "sha256-voCs49JneWYE1W9U7aB6G13ypH6JqathVDeF58V57U8="; }; env.npmDeps_ui_modular = fetchNpmDeps { - name = "npm-deps-ui-modular"; - src = "${src}/pagefind_ui/modular"; - hash = "sha256-O0RqZUsRFtByxMQdwNGNcN38Rh+sDqqNo9YlBcrnsF4="; + name = "pagefind-npm-deps-ui-modular-${finalAttrs.version}"; + inherit (finalAttrs) src; + sourceRoot = "${finalAttrs.src.name}/pagefind_ui/modular"; + hash = "sha256-4d85V2X1doq3G8okgYSXOMuQDoAXCgtAtegFEPr+Wno="; }; - env.cargoDeps_web = rustPlatform.fetchCargoVendor { - name = "cargo-deps-web"; - src = "${src}/pagefind_web/"; - hash = "sha256-xFVMWX3q3za1w8v58Eysk6vclPd4qpCuQMjMcwwHoh0="; + env.npmDeps_playground = fetchNpmDeps { + name = "pagefind-npm-deps-playground-${finalAttrs.version}"; + inherit (finalAttrs) src; + sourceRoot = "${finalAttrs.src.name}/pagefind_playground"; + hash = "sha256-npo8MV6AAuQ/mGC9iu3bR7pjGoI7NgxuIeh+H3oz7Y8="; }; - env.GIT_VERSION = version; + env.GIT_VERSION = finalAttrs.version; postPatch = '' # Set the correct version, e.g. for `pagefind --version` node .backstage/version.cjs + # Tricky way to run the cargo setup a second time + ( + cd pagefind_web + cargoDeps=$cargoDeps_web cargoSetupPostUnpackHook + cargoDeps=$cargoDeps_web cargoSetupPostPatchHook + ) + # Tricky way to run npmConfigHook multiple times ( local postPatchHooks=() # written to by npmConfigHook @@ -77,21 +120,41 @@ rustPlatform.buildRustPackage rec { npmRoot=pagefind_web_js npmDeps=$npmDeps_web_js npmConfigHook npmRoot=pagefind_ui/default npmDeps=$npmDeps_ui_default npmConfigHook npmRoot=pagefind_ui/modular npmDeps=$npmDeps_ui_modular npmConfigHook - ) - ( - cd pagefind_web - cargoDeps=$cargoDeps_web cargoSetupPostUnpackHook - cargoDeps=$cargoDeps_web cargoSetupPostPatchHook + npmRoot=pagefind_playground npmDeps=$npmDeps_playground npmConfigHook ) - # patch a build-time dependency download + # patch build-time dependency downloads ( - patch -d $cargoDepsCopy/lindera-assets-*/ -p1 < ${./lindera-assets-support-file-paths.patch} + # add support for file:// urls + patch -d $cargoDepsCopy/lindera-dictionary-*/ -p1 < ${./lindera-dictionary-support-file-paths.patch} - substituteInPlace $cargoDepsCopy/lindera-unidic-*/build.rs --replace-fail \ - "${lindera-unidic-src.url}" \ - "file://${lindera-unidic-src}" + # patch urls + ${lib.pipe finalAttrs.passthru.lindera-srcs [ + (lib.mapAttrsToList ( + key: src: '' + # compgen is only in bashInteractive + declare -a expanded_glob=($cargoDepsCopy/${src.vendorDir}/build.rs) + if [[ "''${#expanded_glob[@]}" -eq 0 ]]; then + echo >&2 "ERROR: '$cargoDepsCopy/${src.vendorDir}/build.rs' not found! (pagefind.passthru.lindera-srcs.${key})" + false + elif [[ "''${#expanded_glob[@]}" -gt 1 ]]; then + echo >&2 "ERROR: '$cargoDepsCopy/${src.vendorDir}/build.rs' matches more than one file! (pagefind.passthru.lindera-srcs.${key})" + printf >&2 "match: %s\n" "''${expanded_glob[@]}" + false + fi + echo "patching $cargoDepsCopy/${src.vendorDir}/build.rs..." + substituteInPlace $cargoDepsCopy/${src.vendorDir}/build.rs --replace-fail "${src.url}" "file://${src}" + unset expanded_glob + '' + )) + lib.concatLines + ]} ) + + # nightly-only feature + substituteInPlace pagefind_web/local_build.sh \ + --replace-fail ' -Z build-std=panic_abort,std' "" \ + --replace-fail ' -Z build-std-features=panic_immediate_abort' "" ''; __darwinAllowLocalNetworking = true; @@ -114,31 +177,38 @@ rustPlatform.buildRustPackage rec { preBuild = '' export HOME=$(mktemp -d) - echo entering pagefind_web_js... + echo Entering ./pagefind_web_js ( cd pagefind_web_js npm run build-coupled ) - echo entering pagefind_web... + echo Entering ./pagefind_web ( cd pagefind_web bash ./local_build.sh ) - echo entering pagefind_ui/default... + echo Entering ./pagefind_ui/default ( cd pagefind_ui/default npm run build ) - echo entering pagefind_ui/modular... + echo Entering ./pagefind_ui/modular ( cd pagefind_ui/modular npm run build ) + + echo Entering ./pagefind_playground + ( + cd pagefind_playground + npm run build + ) ''; + # always build extended buildFeatures = [ "extended" ]; doInstallCheck = true; @@ -147,12 +217,20 @@ rustPlatform.buildRustPackage rec { versionCheckHook ]; + passthru = { + inherit lindera-srcs; + tests.non-extended = finalAttrs.finalPackage.overrideAttrs { + buildFeatures = [ ]; + }; + }; + meta = { description = "Generate low-bandwidth search index for your static website"; homepage = "https://pagefind.app/"; + changelog = "https://github.com/Pagefind/pagefind/releases/tag/v${finalAttrs.version}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ pbsds ]; platforms = lib.platforms.unix; mainProgram = "pagefind"; }; -} +}) diff --git a/pkgs/applications/misc/pagefind/lindera-assets-support-file-paths.patch b/pkgs/applications/misc/pagefind/lindera-assets-support-file-paths.patch deleted file mode 100644 index 57462c07ecf4..000000000000 --- a/pkgs/applications/misc/pagefind/lindera-assets-support-file-paths.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/src/lib.rs b/src/lib.rs -index 6f86cc4..a9ca418 100644 ---- a/src/lib.rs -+++ b/src/lib.rs -@@ -128,12 +128,17 @@ pub fn fetch(params: FetchParams, builder: impl DictionaryBuilder) -> Result<(), - // copy(&source_path, &source_path_for_build)?; - let tmp_path = Path::new(&build_dir).join(params.file_name.to_owned() + ".download"); - -+ if let Some(path) = params.download_url.strip_prefix("file://") { -+ std::fs::copy(path, &tmp_path)?; -+ } -+ else { - // Download a tarball - let resp = ureq::get(params.download_url).call()?; - let mut dest = File::create(&tmp_path)?; - - io::copy(&mut resp.into_reader(), &mut dest)?; - dest.flush()?; -+ } - - rename(tmp_path, source_path_for_build).expect("Failed to rename temporary file"); - -@@ -153,7 +158,6 @@ pub fn fetch(params: FetchParams, builder: impl DictionaryBuilder) -> Result<(), - archive.unpack(&tmp_extract_path)?; - rename(tmp_extracted_path, &input_dir).expect("Failed to rename archive directory"); - let _ = std::fs::remove_dir_all(&tmp_extract_path); -- drop(dest); - let _ = std::fs::remove_file(source_path_for_build); - } - diff --git a/pkgs/applications/misc/pagefind/lindera-dictionary-support-file-paths.patch b/pkgs/applications/misc/pagefind/lindera-dictionary-support-file-paths.patch new file mode 100644 index 000000000000..6837793eae1c --- /dev/null +++ b/pkgs/applications/misc/pagefind/lindera-dictionary-support-file-paths.patch @@ -0,0 +1,41 @@ +diff --git a/src/assets.rs b/src/assets.rs +index 58afc4c..d5813e6 100644 +--- a/src/assets.rs ++++ b/src/assets.rs +@@ -93,6 +93,28 @@ async fn download_with_retry( + + for url in urls { + debug!("Attempting to download from {}", url); ++ if let Some(path) = url.strip_prefix("file://") { ++ let content = std::fs::read(path)?; ++ ++ // Calculate MD5 hash ++ let mut context = Context::new(); ++ context.consume(&content); ++ let actual_md5 = format!("{:x}", context.compute()); ++ debug!("Expected MD5: {}", expected_md5); ++ debug!("Actual MD5: {}", actual_md5); ++ ++ if actual_md5 == expected_md5 { ++ debug!("MD5 check passed from {}", url); ++ return Ok(content); ++ } else { ++ warn!( ++ "MD5 mismatch from {}! Expected {}, got {}", ++ url, expected_md5, actual_md5 ++ ); ++ // continue to next url ++ } ++ } ++ else { + match client.get(url).send().await { + Ok(resp) if resp.status().is_success() => { + debug!("HTTP download successful from {}", url); +@@ -127,6 +149,7 @@ async fn download_with_retry( + // continue to next url + } + } ++ } + } + + sleep(Duration::from_secs(1)).await;