1
0
forked from nikkuss/pkgs

fix(grimoire): electron 41 with sqlite3 patch

This commit is contained in:
2026-07-20 14:28:22 +01:00
parent d5c2b45a90
commit eef6db3224
2 changed files with 139 additions and 89 deletions
+12 -9
View File
@@ -9,13 +9,14 @@
gnumake, gnumake,
pkg-config, pkg-config,
makeWrapper, makeWrapper,
electron_40, electron_41,
vpkmerge, vpkmerge,
sqlite, sqlite,
callPackage, callPackage,
makeDesktopItem, makeDesktopItem,
copyDesktopItems, copyDesktopItems,
}: let }:
let
sources = callPackage ../../../../_sources/generated.nix { }; sources = callPackage ../../../../_sources/generated.nix { };
src = sources.grimoire.src; src = sources.grimoire.src;
@@ -32,8 +33,9 @@
pnpmDeps = pnpm.fetchDeps { pnpmDeps = pnpm.fetchDeps {
pname = "grimoire"; pname = "grimoire";
inherit version src; inherit version src;
fetcherVersion = 3; fetcherVersion = 4;
hash = "sha256-X7KLUag9HPHVit0l/tA3BxQZ2/Cj0A5KiG4Oevx2268="; hash = "sha256-Mqvvemc3oDCiuY/UnDOc73P+dLqMEFnwQotodVhrPao=";
# hash = lib.fakeHash;
}; };
desktopItem = makeDesktopItem { desktopItem = makeDesktopItem {
@@ -57,7 +59,7 @@ in
gnumake gnumake
pkg-config pkg-config
makeWrapper makeWrapper
electron_40 electron_41
copyDesktopItems copyDesktopItems
]; ];
@@ -96,10 +98,11 @@ in
# network fetch of Electron headers is needed inside the sandbox. # network fetch of Electron headers is needed inside the sandbox.
( (
cd node_modules/better-sqlite3 cd node_modules/better-sqlite3
patch -p1 < ${./patches/better-sqlite3-thistogetthis.patch}
HOME="$TMPDIR" node \ HOME="$TMPDIR" node \
"${nodejs_22}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" \ "${nodejs_22}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" \
rebuild \ rebuild \
--nodedir="${electron_40.headers}" --nodedir="${electron_41.headers}"
) )
# Package the app the same way upstream CI does (release.yml): # Package the app the same way upstream CI does (release.yml):
@@ -113,8 +116,8 @@ in
pnpm exec electron-vite build pnpm exec electron-vite build
pnpm exec electron-builder --linux dir \ pnpm exec electron-builder --linux dir \
--config.npmRebuild=false \ --config.npmRebuild=false \
--config.electronDist=${electron_40.dist} \ --config.electronDist=${electron_41.dist} \
--config.electronVersion=${electron_40.version} --config.electronVersion=${electron_41.version}
runHook postBuild runHook postBuild
''; '';
@@ -131,7 +134,7 @@ in
# resolves to the directory holding app.asar, so the bundled vpkmerge at # resolves to the directory holding app.asar, so the bundled vpkmerge at
# resources/vpkmerge/ is found at runtime. # resources/vpkmerge/ is found at runtime.
mkdir -p $out/bin mkdir -p $out/bin
makeWrapper ${electron_40}/bin/electron $out/bin/grimoire \ makeWrapper ${electron_41}/bin/electron $out/bin/grimoire \
--add-flags "$out/lib/grimoire/resources/app.asar" \ --add-flags "$out/lib/grimoire/resources/app.asar" \
--set NODE_ENV production --set NODE_ENV production
@@ -0,0 +1,47 @@
--- a/src/util/macros.cpp 2026-07-20 13:25:03.226579751 +0100
+++ b/src/util/macros.cpp 2026-07-20 13:25:43.980692531 +0100
@@ -11,6 +11,19 @@
#define GET_PROTOTYPE(obj) ((obj)->GetPrototype())
#endif
+// PropertyCallbackInfo::This() and Holder() were removed; use HolderV2().
+// Tracking bug for V8 API removals: http://crbug.com/333672197
+// V8 head has since restored Holder() and deprecated HolderV2():
+// https://chromium.googlesource.com/v8/v8/+/main/include/v8-function-callback.h
+// V8_INLINE Local<Object> Holder() const;
+// V8_DEPRECATE_SOON("Use Holder().")
+// V8_INLINE Local<Object> HolderV2() const;
+#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >= 13
+#define PROPERTY_HOLDER(info) (info).HolderV2()
+#else
+#define PROPERTY_HOLDER(info) (info).This()
+#endif
+
#define EasyIsolate v8::Isolate* isolate = v8::Isolate::GetCurrent()
#define OnlyIsolate info.GetIsolate()
#define OnlyContext isolate->GetCurrentContext()
--- a/src/objects/database.cpp 2026-07-20 13:25:03.229579774 +0100
+++ b/src/objects/database.cpp 2026-07-20 13:25:52.605028002 +0100
@@ -408,10 +408,10 @@
}
NODE_GETTER(Database::JS_open) {
- info.GetReturnValue().Set(Unwrap<Database>(info.This())->open);
+ info.GetReturnValue().Set(Unwrap<Database>(PROPERTY_HOLDER(info))->open);
}
NODE_GETTER(Database::JS_inTransaction) {
- Database* db = Unwrap<Database>(info.This());
+ Database* db = Unwrap<Database>(PROPERTY_HOLDER(info));
info.GetReturnValue().Set(db->open && !static_cast<bool>(sqlite3_get_autocommit(db->db_handle)));
}
--- a/src/objects/statement.cpp 2026-07-20 13:25:03.231579789 +0100
+++ b/src/objects/statement.cpp 2026-07-20 13:25:52.606984847 +0100
@@ -378,6 +378,6 @@
}
NODE_GETTER(Statement::JS_busy) {
- Statement* stmt = Unwrap<Statement>(info.This());
+ Statement* stmt = Unwrap<Statement>(PROPERTY_HOLDER(info));
info.GetReturnValue().Set(stmt->alive && stmt->locked);
}