From 974f0dade5fdba470956fd10f761e0414d5b4beb Mon Sep 17 00:00:00 2001 From: Slixe Date: Sat, 2 Nov 2024 18:42:20 +0100 Subject: [PATCH] try implement hash concat for wasm pkg --- frb_dart/lib/src/cli/build_web/executor.dart | 14 +++++++++++--- frb_dart/lib/src/loader/_io.dart | 3 ++- frb_dart/lib/src/loader/_web.dart | 6 ++++-- frb_dart/lib/src/main_components/entrypoint.dart | 3 +-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/frb_dart/lib/src/cli/build_web/executor.dart b/frb_dart/lib/src/cli/build_web/executor.dart index 0d44b61d67..455af74ecc 100644 --- a/frb_dart/lib/src/cli/build_web/executor.dart +++ b/frb_dart/lib/src/cli/build_web/executor.dart @@ -67,7 +67,11 @@ Future executeBuildWeb(BuildWebArgs args) async { final rustCrateName = await _getRustCreateName(rustCrateDir: args.rustCrateDir); - await _executeWasmPack(args, rustCrateName: rustCrateName); + final contentHash = + await _getRustContentHash(rustCrateDir: args.rustCrateDir); + + await _executeWasmPack(args, + rustCrateName: rustCrateName, contentHash: contentHash); if (args.enableWasmBindgen) { await _executeWasmBindgen(args, rustCrateName: rustCrateName); @@ -149,8 +153,12 @@ Future _getRustCreateName({required String rustCrateDir}) async { return rustCrateName; } +Future _getRustContentHash({required String rustCrateDir}) async { + throw UnimplementedError(); +} + Future _executeWasmPack(BuildWebArgs args, - {required String rustCrateName}) async { + {required String rustCrateName, required int contentHash}) async { await runCommand('wasm-pack', [ 'build', '-t', @@ -159,7 +167,7 @@ Future _executeWasmPack(BuildWebArgs args, args.outputWasm, '--no-typescript', '--out-name', - rustCrateName, + '${rustCrateName}${contentHash.toRadixString(16)}', if (!args.release) '--dev', args.rustCrateDir, '--', diff --git a/frb_dart/lib/src/loader/_io.dart b/frb_dart/lib/src/loader/_io.dart index 63236daf32..d75e1ab038 100644 --- a/frb_dart/lib/src/loader/_io.dart +++ b/frb_dart/lib/src/loader/_io.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'package:flutter_rust_bridge/src/loader/_common.dart'; +import 'package:flutter_rust_bridge/src/main_components/entrypoint.dart'; import 'package:flutter_rust_bridge/src/platform_types/_io.dart'; /// Load the [ExternalLibrary], with the following cases in mind: @@ -9,7 +10,7 @@ import 'package:flutter_rust_bridge/src/platform_types/_io.dart'; /// 2. When running Flutter widget tests. /// 3. When `dart test`, `dart run`, `dart compile exe`, etc. FutureOr loadExternalLibrary( - ExternalLibraryLoaderConfig config) async { + BaseEntrypoint _, ExternalLibraryLoaderConfig config) async { final ioDirectory = config.ioDirectory; return loadExternalLibraryRaw( nativeLibDirWhenNonPackaged: diff --git a/frb_dart/lib/src/loader/_web.dart b/frb_dart/lib/src/loader/_web.dart index 5d43c71874..776d52b492 100644 --- a/frb_dart/lib/src/loader/_web.dart +++ b/frb_dart/lib/src/loader/_web.dart @@ -1,14 +1,16 @@ import 'dart:async'; import 'package:flutter_rust_bridge/src/loader/_common.dart'; +import 'package:flutter_rust_bridge/src/main_components/entrypoint.dart'; import 'package:flutter_rust_bridge/src/platform_types/_web.dart'; import 'package:flutter_rust_bridge/src/wasm_module/_web.dart'; /// See `loadExternalLibrary` in the counterpart `_io.dart` for doc FutureOr loadExternalLibrary( - ExternalLibraryLoaderConfig config) async { + BaseEntrypoint entrypoint, ExternalLibraryLoaderConfig config) async { + var hex = entrypoint.rustContentHash.toRadixString(16); return loadExternalLibraryRaw( - moduleRoot: '${config.webPrefix}${config.stem}'); + moduleRoot: '${config.webPrefix}${config.stem}${hex}'); } /// Please see `loadExternalLibrary` for details diff --git a/frb_dart/lib/src/main_components/entrypoint.dart b/frb_dart/lib/src/main_components/entrypoint.dart index 3e00a2589d..dd5e598912 100644 --- a/frb_dart/lib/src/main_components/entrypoint.dart +++ b/frb_dart/lib/src/main_components/entrypoint.dart @@ -130,7 +130,6 @@ abstract class BaseEntrypoint executeRustInitializers(); Future _loadDefaultExternalLibrary() async => - await loadExternalLibrary(defaultExternalLibraryLoaderConfig); + await loadExternalLibrary(this, defaultExternalLibraryLoaderConfig); A _createDefaultApi( BaseHandler handler,