From afe1df61e169fe7969ef54db97f9e6e94033026d Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Mon, 22 Jan 2024 22:32:09 +0100 Subject: [PATCH 01/31] add wasm experimental support --- experiments/wasm_test/.gitignore | 3 + experiments/wasm_test/lib/app.dart | 23 + experiments/wasm_test/lib/main.dart | 10 + experiments/wasm_test/pubspec.lock | 580 ++++++++++++++++++ experiments/wasm_test/pubspec.yaml | 21 + experiments/wasm_test/web/index.html | 16 + experiments/wasm_test/web/main.dart | 6 + experiments/wasm_test/web/main.dart.js | 20 + experiments/wasm_test/web/main.mjs | 295 +++++++++ experiments/wasm_test/web/main.wasm | Bin 0 -> 160247 bytes experiments/wasm_test/web/main.wasm.unopt | Bin 0 -> 392968 bytes experiments/wasm_test/web/styles.css | 14 + packages/jaspr/lib/jaspr.dart | 2 +- .../lib/src/browser/browser_binding.dart | 16 +- .../lib/src/browser/dom_render_object.dart | 127 ++-- packages/jaspr/lib/src/browser/js_data.dart | 28 +- .../lib/src/foundation/events/events.dart | 21 +- .../lib/src/foundation/events/events_vm.dart | 40 +- .../lib/src/foundation/events/events_web.dart | 1 - .../jaspr/lib/src/server/server_handler.dart | 3 +- packages/jaspr/pubspec.yaml | 1 + .../lib/src/commands/serve_command.dart | 99 +-- 22 files changed, 1200 insertions(+), 126 deletions(-) create mode 100644 experiments/wasm_test/.gitignore create mode 100644 experiments/wasm_test/lib/app.dart create mode 100644 experiments/wasm_test/lib/main.dart create mode 100644 experiments/wasm_test/pubspec.lock create mode 100644 experiments/wasm_test/pubspec.yaml create mode 100644 experiments/wasm_test/web/index.html create mode 100644 experiments/wasm_test/web/main.dart create mode 100644 experiments/wasm_test/web/main.dart.js create mode 100644 experiments/wasm_test/web/main.mjs create mode 100644 experiments/wasm_test/web/main.wasm create mode 100644 experiments/wasm_test/web/main.wasm.unopt create mode 100644 experiments/wasm_test/web/styles.css delete mode 100644 packages/jaspr/lib/src/foundation/events/events_web.dart diff --git a/experiments/wasm_test/.gitignore b/experiments/wasm_test/.gitignore new file mode 100644 index 00000000..3a857904 --- /dev/null +++ b/experiments/wasm_test/.gitignore @@ -0,0 +1,3 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ diff --git a/experiments/wasm_test/lib/app.dart b/experiments/wasm_test/lib/app.dart new file mode 100644 index 00000000..496506bd --- /dev/null +++ b/experiments/wasm_test/lib/app.dart @@ -0,0 +1,23 @@ +import 'package:jaspr/jaspr.dart'; + +class App extends StatefulComponent { + const App({super.key}); + + @override + State createState() => _AppState(); +} + +class _AppState extends State { + int count = 0; + + @override + Iterable build(BuildContext context) sync* { + yield text('Count: $count'); + + yield button(onClick: () { + setState(() => count++); + }, [ + text('Increment'), + ]); + } +} diff --git a/experiments/wasm_test/lib/main.dart b/experiments/wasm_test/lib/main.dart new file mode 100644 index 00000000..fc7ebee0 --- /dev/null +++ b/experiments/wasm_test/lib/main.dart @@ -0,0 +1,10 @@ +import 'package:jaspr/server.dart'; + +import 'app.dart'; + +void main() { + runApp(Document( + scriptName: 'main', + body: App(), + )); +} diff --git a/experiments/wasm_test/pubspec.lock b/experiments/wasm_test/pubspec.lock new file mode 100644 index 00000000..1917334f --- /dev/null +++ b/experiments/wasm_test/pubspec.lock @@ -0,0 +1,580 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "36a321c3d2cbe01cbcb3540a87b8843846e0206df3e691fa7b23e19e78de6d49" + url: "https://pub.dev" + source: hosted + version: "65.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: dfe03b90ec022450e22513b5e5ca1f01c0c01de9c3fba2f7fd233cb57a6b9a07 + url: "https://pub.dev" + source: hosted + version: "6.3.0" + archive: + dependency: transitive + description: + name: archive + sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" + url: "https://pub.dev" + source: hosted + version: "3.4.10" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + bazel_worker: + dependency: transitive + description: + name: bazel_worker + sha256: "6f306845d941808bed2fdbd7db3a39de273a8248a9303cfebf0cfa861372616e" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + binary_codec: + dependency: transitive + description: + name: binary_codec + sha256: "368144225d749e1e33f2f4628d0c70bffff99b99b1d6c0777b039f8967365b07" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_modules: + dependency: transitive + description: + name: build_modules + sha256: "66f0f746a239ff6cceba9d235a679ec70a6d9037ddddb36a24a0791a639a8486" + url: "https://pub.dev" + source: hosted + version: "5.0.7" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" + url: "https://pub.dev" + source: hosted + version: "2.4.8" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "30859c90e9ddaccc484f56303931f477b1f1ba2bab74aa32ed5d6ce15870f8cf" + url: "https://pub.dev" + source: hosted + version: "7.2.8" + build_web_compilers: + dependency: "direct dev" + description: + name: build_web_compilers + sha256: aad1d705faa53d060e7ccb7855ee74705a8e3d9ea1634e63e362cc2c1bd47afa + url: "https://pub.dev" + source: hosted + version: "4.0.9" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c9aabae0718ec394e5bc3c7272e6bb0dc0b32201a08fe185ec1d8401d3e39309 + url: "https://pub.dev" + source: hosted + version: "8.8.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + url: "https://pub.dev" + source: hosted + version: "2.3.4" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + hotreloader: + dependency: transitive + description: + name: hotreloader + sha256: "94ee21a60ea2836500799f3af035dc3212b1562027f1e0031c14e087f0231449" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + jaspr: + dependency: "direct main" + description: + path: "../../packages/jaspr" + relative: true + source: path + version: "0.10.0" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" + lints: + dependency: "direct dev" + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + meta: + dependency: transitive + description: + name: meta + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" + url: "https://pub.dev" + source: hosted + version: "3.7.4" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + protobuf: + dependency: transitive + description: + name: protobuf + sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + url: "https://pub.dev" + source: hosted + version: "1.2.3" + scratch_space: + dependency: transitive + description: + name: scratch_space + sha256: "8510fbff458d733a58fc427057d1ac86303b376d609d6e1bc43f240aad9aa445" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_gzip: + dependency: transitive + description: + name: shelf_gzip + sha256: "4f4b793c0f969f348aece1ab4cc05fceba9fea431c1ce76b1bc0fa369cecfc15" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + shelf_proxy: + dependency: transitive + description: + name: shelf_proxy + sha256: a71d2307f4393211930c590c3d2c00630f6c5a7a77edc1ef6436dfd85a6a7ee3 + url: "https://pub.dev" + source: hosted + version: "1.0.4" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: "direct main" + description: + name: web + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + url: "https://pub.dev" + source: hosted + version: "0.4.2" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" + url: "https://pub.dev" + source: hosted + version: "2.4.3" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.3.0-279.0.dev <3.5.0" diff --git a/experiments/wasm_test/pubspec.yaml b/experiments/wasm_test/pubspec.yaml new file mode 100644 index 00000000..70cf3924 --- /dev/null +++ b/experiments/wasm_test/pubspec.yaml @@ -0,0 +1,21 @@ +name: wasm_test +description: An absolute bare-bones web app. +version: 1.0.0 +# repository: https://github.com/my_org/my_repo + +environment: + sdk: ^3.3.0-279.0.dev + +# Add regular dependencies here. +dependencies: + jaspr: + path: ../../packages/jaspr + web: ^0.4.0 + +dev_dependencies: + build_runner: ^2.4.0 + build_web_compilers: ^4.0.0 + lints: ^3.0.0 + +jaspr: + use-ssr: true diff --git a/experiments/wasm_test/web/index.html b/experiments/wasm_test/web/index.html new file mode 100644 index 00000000..218d315f --- /dev/null +++ b/experiments/wasm_test/web/index.html @@ -0,0 +1,16 @@ + + + + + + + + + wasm_test + + + + + + + diff --git a/experiments/wasm_test/web/main.dart b/experiments/wasm_test/web/main.dart new file mode 100644 index 00000000..f5d41c4c --- /dev/null +++ b/experiments/wasm_test/web/main.dart @@ -0,0 +1,6 @@ +import 'package:jaspr/jaspr.dart'; +import 'package:wasm_test/app.dart'; + +void main() { + runApp(App()); +} diff --git a/experiments/wasm_test/web/main.dart.js b/experiments/wasm_test/web/main.dart.js new file mode 100644 index 00000000..98c72cfb --- /dev/null +++ b/experiments/wasm_test/web/main.dart.js @@ -0,0 +1,20 @@ +(async function () { + let dart2wasm_runtime; + let moduleInstance; + try { + const dartModulePromise = WebAssembly.compileStreaming(fetch('main.wasm')); + const imports = {}; + dart2wasm_runtime = await import('./main.mjs'); + moduleInstance = await dart2wasm_runtime.instantiate(dartModulePromise, imports); + } catch (exception) { + console.error(`Failed to fetch and instantiate wasm module: ${exception}`); + } + + if (moduleInstance) { + try { + await dart2wasm_runtime.invoke(moduleInstance); + } catch (exception) { + console.error(`Exception while invoking test: ${exception}`); + } + } +})(); diff --git a/experiments/wasm_test/web/main.mjs b/experiments/wasm_test/web/main.mjs new file mode 100644 index 00000000..f27c4b6f --- /dev/null +++ b/experiments/wasm_test/web/main.mjs @@ -0,0 +1,295 @@ + let buildArgsList; + +// `modulePromise` is a promise to the `WebAssembly.module` object to be +// instantiated. +// `importObjectPromise` is a promise to an object that contains any additional +// imports needed by the module that aren't provided by the standard runtime. +// The fields on this object will be merged into the importObject with which +// the module will be instantiated. +// This function returns a promise to the instantiated module. +export const instantiate = async (modulePromise, importObjectPromise) => { + let dartInstance; + + function stringFromDartString(string) { + const totalLength = dartInstance.exports.$stringLength(string); + let result = ''; + let index = 0; + while (index < totalLength) { + let chunkLength = Math.min(totalLength - index, 0xFFFF); + const array = new Array(chunkLength); + for (let i = 0; i < chunkLength; i++) { + array[i] = dartInstance.exports.$stringRead(string, index++); + } + result += String.fromCharCode(...array); + } + return result; + } + + function stringToDartString(string) { + const length = string.length; + let range = 0; + for (let i = 0; i < length; i++) { + range |= string.codePointAt(i); + } + if (range < 256) { + const dartString = dartInstance.exports.$stringAllocate1(length); + for (let i = 0; i < length; i++) { + dartInstance.exports.$stringWrite1(dartString, i, string.codePointAt(i)); + } + return dartString; + } else { + const dartString = dartInstance.exports.$stringAllocate2(length); + for (let i = 0; i < length; i++) { + dartInstance.exports.$stringWrite2(dartString, i, string.charCodeAt(i)); + } + return dartString; + } + } + + // Converts a Dart List to a JS array. Any Dart objects will be converted, but + // this will be cheap for JSValues. + function arrayFromDartList(constructor, list) { + const length = dartInstance.exports.$listLength(list); + const array = new constructor(length); + for (let i = 0; i < length; i++) { + array[i] = dartInstance.exports.$listRead(list, i); + } + return array; + } + + buildArgsList = function(list) { + const dartList = dartInstance.exports.$makeStringList(); + for (let i = 0; i < list.length; i++) { + dartInstance.exports.$listAdd(dartList, stringToDartString(list[i])); + } + return dartList; + } + + // A special symbol attached to functions that wrap Dart functions. + const jsWrappedDartFunctionSymbol = Symbol("JSWrappedDartFunction"); + + function finalizeWrapper(dartFunction, wrapped) { + wrapped.dartFunction = dartFunction; + wrapped[jsWrappedDartFunctionSymbol] = true; + return wrapped; + } + + if (WebAssembly.String === undefined) { + console.log("WebAssembly.String is undefined, adding polyfill"); + WebAssembly.String = { + "charCodeAt": (s, i) => s.charCodeAt(i), + "compare": (s1, s2) => { + if (s1 < s2) return -1; + if (s1 > s2) return 1; + return 0; + }, + "concat": (s1, s2) => s1 + s2, + "equals": (s1, s2) => s1 === s2, + "fromCharCode": (i) => String.fromCharCode(i), + "length": (s) => s.length, + "substring": (s, a, b) => s.substring(a, b), + }; + } + + // Imports + const dart2wasm = { + + _18170: s => stringToDartString(JSON.stringify(stringFromDartString(s))), +_18171: s => console.log(stringFromDartString(s)), +_18274: o => o === undefined, +_18275: o => typeof o === 'boolean', +_18276: o => typeof o === 'number', +_18278: o => typeof o === 'string', +_18281: o => o instanceof Int8Array, +_18282: o => o instanceof Uint8Array, +_18283: o => o instanceof Uint8ClampedArray, +_18284: o => o instanceof Int16Array, +_18285: o => o instanceof Uint16Array, +_18286: o => o instanceof Int32Array, +_18287: o => o instanceof Uint32Array, +_18288: o => o instanceof Float32Array, +_18289: o => o instanceof Float64Array, +_18290: o => o instanceof ArrayBuffer, +_18291: o => o instanceof DataView, +_18292: o => o instanceof Array, +_18293: o => typeof o === 'function' && o[jsWrappedDartFunctionSymbol] === true, +_18296: o => o instanceof RegExp, +_18297: (l, r) => l === r, +_18298: o => o, +_18299: o => o, +_18300: o => o, +_18301: b => !!b, +_18302: o => o.length, +_18305: (o, i) => o[i], +_18306: f => f.dartFunction, +_18307: l => arrayFromDartList(Int8Array, l), +_18308: l => arrayFromDartList(Uint8Array, l), +_18309: l => arrayFromDartList(Uint8ClampedArray, l), +_18310: l => arrayFromDartList(Int16Array, l), +_18311: l => arrayFromDartList(Uint16Array, l), +_18312: l => arrayFromDartList(Int32Array, l), +_18313: l => arrayFromDartList(Uint32Array, l), +_18314: l => arrayFromDartList(Float32Array, l), +_18315: l => arrayFromDartList(Float64Array, l), +_18316: (data, length) => { + const view = new DataView(new ArrayBuffer(length)); + for (let i = 0; i < length; i++) { + view.setUint8(i, dartInstance.exports.$byteDataGetUint8(data, i)); + } + return view; + }, +_18317: l => arrayFromDartList(Array, l), +_18318: stringFromDartString, +_18319: stringToDartString, +_18326: (o, p) => o[p], +_18263: (s, m) => { + try { + return new RegExp(s, m); + } catch (e) { + return String(e); + } + }, +_18264: (x0,x1) => x0.exec(x1), +_18322: l => new Array(l), +_18330: o => String(o), +_18337: x0 => x0.length, +_18339: (x0,x1) => x0[x1], +_18343: x0 => x0.flags, +_18223: Object.is, +_18225: WebAssembly.String.concat, +_18233: (o) => new DataView(o.buffer, o.byteOffset, o.byteLength), +_18183: (a, i) => a.push(i), +_18194: a => a.length, +_18196: (a, i) => a[i], +_18197: (a, i, v) => a[i] = v, +_18199: a => a.join(''), +_18203: s => s.toLowerCase(), +_18205: s => s.trim(), +_18209: (s, p, i) => s.indexOf(p, i), +_18212: (o, start, length) => new Uint8Array(o.buffer, o.byteOffset + start, length), +_18213: (o, start, length) => new Int8Array(o.buffer, o.byteOffset + start, length), +_18214: (o, start, length) => new Uint8ClampedArray(o.buffer, o.byteOffset + start, length), +_18215: (o, start, length) => new Uint16Array(o.buffer, o.byteOffset + start, length), +_18216: (o, start, length) => new Int16Array(o.buffer, o.byteOffset + start, length), +_18217: (o, start, length) => new Uint32Array(o.buffer, o.byteOffset + start, length), +_18218: (o, start, length) => new Int32Array(o.buffer, o.byteOffset + start, length), +_18221: (o, start, length) => new Float32Array(o.buffer, o.byteOffset + start, length), +_18222: (o, start, length) => new Float64Array(o.buffer, o.byteOffset + start, length), +_18224: WebAssembly.String.charCodeAt, +_18226: WebAssembly.String.substring, +_18227: WebAssembly.String.length, +_18228: WebAssembly.String.equals, +_18229: WebAssembly.String.compare, +_18230: WebAssembly.String.fromCharCode, +_18237: Function.prototype.call.bind(Object.getOwnPropertyDescriptor(DataView.prototype, 'byteLength').get), +_18238: (b, o) => new DataView(b, o), +_18240: Function.prototype.call.bind(DataView.prototype.getUint8), +_18242: Function.prototype.call.bind(DataView.prototype.getInt8), +_18244: Function.prototype.call.bind(DataView.prototype.getUint16), +_18246: Function.prototype.call.bind(DataView.prototype.getInt16), +_18248: Function.prototype.call.bind(DataView.prototype.getUint32), +_18250: Function.prototype.call.bind(DataView.prototype.getInt32), +_18256: Function.prototype.call.bind(DataView.prototype.getFloat32), +_18258: Function.prototype.call.bind(DataView.prototype.getFloat64), +_18181: (c) => + queueMicrotask(() => dartInstance.exports.$invokeCallback(c)), +_18261: s => stringToDartString(stringFromDartString(s).toLowerCase()), +_18146: v => stringToDartString(v.toString()), +_18160: s => { + const jsSource = stringFromDartString(s); + if (!/^\s*[+-]?(?:Infinity|NaN|(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(jsSource)) { + return NaN; + } + return parseFloat(jsSource); + }, +_18161: () => { + let stackString = new Error().stack.toString(); + let frames = stackString.split('\n'); + let drop = 2; + if (frames[0] === 'Error') { + drop += 1; + } + return frames.slice(drop).join('\n'); + }, +_101: (x0,x1) => x0.item(x1), +_90: (x0,x1) => x0.querySelector(x1), +_92: f => finalizeWrapper(f,x0 => dartInstance.exports._92(f,x0)), +_93: (x0,x1) => x0.requestAnimationFrame(x1), +_48: (x0,x1) => x0.createElement(x1), +_72: (x0,x1,x2) => x0.createElementNS(x1,x2), +_73: (x0,x1) => x0.item(x1), +_74: (x0,x1) => x0.replaceWith(x1), +_75: (x0,x1) => x0.replaceWith(x1), +_76: (x0,x1) => x0.append(x1), +_77: (x0,x1) => x0.item(x1), +_78: (x0,x1) => x0.removeAttribute(x1), +_80: x0 => new Text(x0), +_81: (x0,x1) => x0.replaceWith(x1), +_82: (x0,x1) => x0.item(x1), +_83: (x0,x1) => x0.item(x1), +_84: (x0,x1,x2) => x0.insertBefore(x1,x2), +_85: (x0,x1,x2) => x0.insertBefore(x1,x2), +_86: (x0,x1) => x0.getAttribute(x1), +_87: (x0,x1) => x0.removeAttribute(x1), +_88: (x0,x1,x2) => x0.setAttribute(x1,x2), +_89: (x0,x1) => x0.item(x1), +_94: () => globalThis.jaspr, +_95: x0 => globalThis.JSON.stringify(x0), +_96: x0 => x0.sync, +_3121: x0 => x0.target, +_3162: x0 => x0.length, +_3165: x0 => x0.length, +_3212: x0 => x0.parentNode, +_3214: x0 => x0.childNodes, +_3217: x0 => x0.previousSibling, +_3218: x0 => x0.nextSibling, +_3221: (x0,x1) => x0.textContent = x1, +_3222: x0 => x0.textContent, +_3225: () => globalThis.document, +_3705: x0 => x0.tagName, +_3713: x0 => x0.attributes, +_3842: x0 => x0.length, +_3846: x0 => x0.name, +_1344: x0 => x0.checked, +_1351: x0 => x0.files, +_1394: x0 => x0.type, +_1397: (x0,x1) => x0.value = x1, +_1398: x0 => x0.value, +_1400: x0 => x0.valueAsDate, +_1402: x0 => x0.valueAsNumber, +_1478: x0 => x0.selectedOptions, +_1502: x0 => x0.value, +_1542: x0 => x0.value, +_2115: () => globalThis.window, +_51: f => finalizeWrapper(f,x0 => dartInstance.exports._51(f,x0)), +_53: (x0,x1,x2,x3) => x0.addEventListener(x1,x2,x3), +_68: (x0,x1) => x0.appendChild(x1) + }; + + const baseImports = { + dart2wasm: dart2wasm, + + + Math: Math, + Date: Date, + Object: Object, + Array: Array, + Reflect: Reflect, + }; + dartInstance = await WebAssembly.instantiate(await modulePromise, { + ...baseImports, + ...(await importObjectPromise), + }); + + return dartInstance; +} + +// Call the main function for the instantiated module +// `moduleInstance` is the instantiated dart2wasm module +// `args` are any arguments that should be passed into the main function. +export const invoke = (moduleInstance, ...args) => { + const dartMain = moduleInstance.exports.$getMain(); + const dartArgs = buildArgsList(args); + moduleInstance.exports.$invokeMain(dartMain, dartArgs); +} + diff --git a/experiments/wasm_test/web/main.wasm b/experiments/wasm_test/web/main.wasm new file mode 100644 index 0000000000000000000000000000000000000000..4bfa6e884d158550aad33c317120639bc9c4ff72 GIT binary patch literal 160247 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 MDBk literal 0 HcmV?d00001 diff --git a/experiments/wasm_test/web/styles.css b/experiments/wasm_test/web/styles.css new file mode 100644 index 00000000..cc035c95 --- /dev/null +++ b/experiments/wasm_test/web/styles.css @@ -0,0 +1,14 @@ +@import url(https://fonts.googleapis.com/css?family=Roboto); + +html, body { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + font-family: 'Roboto', sans-serif; +} + +#output { + padding: 20px; + text-align: center; +} diff --git a/packages/jaspr/lib/jaspr.dart b/packages/jaspr/lib/jaspr.dart index 902f6437..e09a6545 100644 --- a/packages/jaspr/lib/jaspr.dart +++ b/packages/jaspr/lib/jaspr.dart @@ -19,5 +19,5 @@ export 'src/foundation/sync.dart'; export 'src/foundation/synchronous_future.dart'; export 'src/framework/framework.dart'; export 'src/stub/run_app_stub.dart' - if (dart.library.html) 'src/browser/run_app.dart' + if (dart.library.js) 'src/browser/run_app.dart' if (dart.library.io) 'src/server/run_app.dart' show runApp; diff --git a/packages/jaspr/lib/src/browser/browser_binding.dart b/packages/jaspr/lib/src/browser/browser_binding.dart index e1f47861..be503e0d 100644 --- a/packages/jaspr/lib/src/browser/browser_binding.dart +++ b/packages/jaspr/lib/src/browser/browser_binding.dart @@ -1,8 +1,9 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:html'; +import 'dart:js_interop'; import 'package:meta/meta.dart'; +import 'package:web/web.dart'; import '../foundation/basic_types.dart'; import '../foundation/binding.dart'; @@ -66,10 +67,11 @@ class BrowserAppBinding extends AppBinding with ComponentsBinding { @override Future> fetchState(String url) { - return window - .fetch(url, { - 'headers': {'jaspr-mode': 'data-only'} - }) + return (window.fetch( + url as dynamic, + { + 'headers': {'jaspr-mode': 'data-only'} + } as dynamic) as dynamic) .then((result) => result.text()) .then((data) => jsonDecode(data)); } @@ -78,9 +80,9 @@ class BrowserAppBinding extends AppBinding with ComponentsBinding { void scheduleFrame(VoidCallback frameCallback) { // This seems to give the best results over futures and microtasks // Needs to be inspected in more detail - window.requestAnimationFrame((highResTime) { + window.requestAnimationFrame(((JSAny _) { frameCallback(); - }); + }).toJS); } static late Future Function({Function? runApp}) warmupFlutterEngine; diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 6d210fd7..09e49eb7 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'dart:html' as html show Element, Text; -import 'dart:html'; + +import 'package:web/web.dart' as web; import '../foundation/constants.dart'; import '../foundation/events/events.dart'; @@ -13,8 +13,8 @@ const xmlns = { class DomRenderObject extends RenderObject { DomRenderObject? parent; String? namespace; - Node? node; - List toHydrate = []; + web.Node? node; + List toHydrate = []; Map? events; void clearEvents() { @@ -31,35 +31,38 @@ class DomRenderObject extends RenderObject { ..namespace = namespace; } - html.Element _createElement(String tag) { + web.Element _createElement(String tag) { namespace = xmlns[tag] ?? namespace; if (namespace != null) { - return document.createElementNS(namespace!, tag); + return web.document.createElementNS(namespace!, tag); } - return document.createElement(tag); + return web.document.createElement(tag); } @override void updateElement(String tag, String? id, String? classes, Map? styles, Map? attributes, Map? events) { late Set attributesToRemove; - late html.Element elem; + late web.Element elem; diff: if (node == null) { var toHydrate = parent!.toHydrate; if (toHydrate.isNotEmpty) { for (var e in toHydrate) { - if (e is html.Element && e.tagName.toLowerCase() == tag) { + if (e is web.Element && e.tagName.toLowerCase() == tag) { if (kVerboseMode) { print("Hydrate html node: $e"); } elem = node = e; - attributesToRemove = elem.attributes.keys.toSet(); + attributesToRemove = {}; + for (var i = 0; i < elem.attributes.length; i++) { + attributesToRemove.add(elem.attributes.item(i)!.name); + } toHydrate.remove(e); - Iterable nodes = e.nodes; + var nodes = e.childNodes.toIterable(); if (kDebugMode) { - nodes = nodes.where((node) => node is! html.Text || (node.text ?? '').trim().isNotEmpty); + nodes = nodes.where((node) => node is! web.Text || (node.textContent ?? '').trim().isNotEmpty); } this.toHydrate = nodes.toList(); break diff; @@ -73,15 +76,19 @@ class DomRenderObject extends RenderObject { print("Create html node: $elem"); } } else { - if (node is! html.Element || (node as html.Element).tagName.toLowerCase() != tag) { + if (node is! web.Element || (node as web.Element).tagName.toLowerCase() != tag) { elem = _createElement(tag); var old = node; - node!.replaceWith(elem); + if (node case web.Element node) { + node.replaceWith(elem as dynamic); + } else if (node case web.Text node) { + node.replaceWith(elem as dynamic); + } node = elem; - if (old != null && old.childNodes.isNotEmpty) { - var oldChildren = [...old.childNodes]; + if (old != null && old.childNodes.length > 0) { + var oldChildren = old.childNodes.toIterable(); for (var child in oldChildren) { - elem.append(child); + elem.append(child as dynamic); } } attributesToRemove = {}; @@ -89,8 +96,11 @@ class DomRenderObject extends RenderObject { print("Replace html node: $elem for $old"); } } else { - elem = node as html.Element; - attributesToRemove = elem.attributes.keys.toSet(); + elem = node as web.Element; + attributesToRemove = {}; + for (var i = 0; i < elem.attributes.length; i++) { + attributesToRemove.add(elem.attributes.item(i)!.name); + } } } @@ -101,7 +111,7 @@ class DomRenderObject extends RenderObject { if (attributes != null && attributes.isNotEmpty) { for (var attr in attributes.entries) { - if (attr.key == 'value' && elem is InputElement && elem.value != attr.value) { + if (attr.key == 'value' && elem is web.HTMLInputElement && elem.value != attr.value) { if (kVerboseMode) { print("Set input value: ${attr.value}"); } @@ -130,9 +140,9 @@ class DomRenderObject extends RenderObject { prevEventTypes?.remove(type); final currentBinding = dataEvents[type]; if (currentBinding != null) { - currentBinding.fn = fn; + currentBinding.fn = fn as dynamic; } else { - dataEvents[type] = EventBinding(elem, type, fn); + dataEvents[type] = EventBinding(elem, type, fn as dynamic); } }); prevEventTypes?.forEach((type) { @@ -145,12 +155,13 @@ class DomRenderObject extends RenderObject { @override void updateText(String text, [bool rawHtml = false]) { + print("UPDATE TEXT $text"); if (rawHtml) { var parent = this.parent!.node; - if (parent is html.Element) { - if (parent.innerHtml != text) { - parent.innerHtml = text; - node = parent.childNodes.first; + if (parent is web.Element) { + if (parent.innerHTML != text) { + parent.innerHTML = text; + node = parent.childNodes.item(0); if (kVerboseMode) { print("Update inner html: $text"); } @@ -165,13 +176,13 @@ class DomRenderObject extends RenderObject { var toHydrate = parent!.toHydrate; if (toHydrate.isNotEmpty) { for (var e in toHydrate) { - if (e is html.Text) { + if (e is web.Text) { if (kVerboseMode) { print("Hydrate text node: $e"); } node = e; - if (e.text != text) { - e.text = text; + if (e.textContent != text) { + e.textContent = text; if (kVerboseMode) { print("Update text node: $text"); } @@ -182,22 +193,22 @@ class DomRenderObject extends RenderObject { } } - node = html.Text(text); + node = web.Text(text); if (kVerboseMode) { print("Create text node: $text"); } } else { - if (node is! html.Text) { - var elem = html.Text(text); - node!.replaceWith(elem); + if (node is! web.Text) { + var elem = web.Text(text); + (node as web.Element).replaceWith(elem as dynamic); node = elem; if (kVerboseMode) { print("Replace text node: $text"); } } else { - var node = this.node as html.Text; - if (node.text != text) { - node.text = text; + var node = this.node as web.Text; + if (node.textContent != text) { + node.textContent = text; if (kVerboseMode) { print("Update text node: $text"); } @@ -221,15 +232,15 @@ class DomRenderObject extends RenderObject { var parentNode = parent.node; var childNode = node; - assert(parentNode is html.Element); + assert(parentNode is web.Element); if (childNode == null) return; var afterNode = after?.node; if ((afterNode, parent) case (null, RootDomRenderObject p) when p.from != null && p.from! > 0) { - afterNode = p.container.childNodes[p.from! - 1]; + afterNode = p.container.childNodes.item(p.from! - 1); } - if (childNode.previousNode == afterNode && childNode.parentNode == parentNode) { + if (childNode.previousSibling == afterNode && childNode.parentNode == parentNode) { return; } @@ -238,13 +249,13 @@ class DomRenderObject extends RenderObject { } if (afterNode == null) { - if (parentNode!.childNodes.isEmpty) { + if (parentNode!.childNodes.length == 0) { parentNode.append(childNode); } else { - parentNode.insertBefore(childNode, parentNode.childNodes.first); + parentNode.insertBefore(childNode, parentNode.childNodes.item(0)); } } else { - parentNode!.insertBefore(childNode, afterNode.nextNode); + parentNode!.insertBefore(childNode, afterNode.nextSibling); } } finally { _finalize(); @@ -273,14 +284,14 @@ class DomRenderObject extends RenderObject { } class RootDomRenderObject extends DomRenderObject { - final html.Element container; + final web.Element container; final int? from; final int? to; RootDomRenderObject(this.container, this.from, this.to) { - Iterable nodes = container.nodes; + Iterable nodes = container.childNodes.toIterable(); if (kDebugMode) { - nodes = nodes.where((node) => node is! html.Text || (node.text ?? '').trim().isNotEmpty); + nodes = nodes.where((node) => node is! web.Text || (node.textContent ?? '').trim().isNotEmpty); } nodes = nodes.skip(from ?? 0); if (to != null) { @@ -291,15 +302,15 @@ class RootDomRenderObject extends DomRenderObject { } } -typedef DomEventCallback = void Function(Event event); +typedef DomEventCallback = void Function(web.Event event); class EventBinding { final String type; DomEventCallback fn; StreamSubscription? subscription; - EventBinding(html.Element element, this.type, this.fn) { - subscription = element.on[type].listen((event) { + EventBinding(web.Element element, this.type, this.fn) { + web.EventStreamProvider(type).forElement(element).listen((event) { fn(event); }); } @@ -310,7 +321,7 @@ class EventBinding { } } -extension on html.Element { +extension on web.Element { void clearOrSetAttribute(String name, String? value) { final current = getAttribute(name); if (current == value) return; @@ -327,3 +338,21 @@ extension on html.Element { } } } + +extension on web.Node { + void remove() { + (switch (this) { + web.Element() => remove(), + web.CharacterData() => remove(), + _ => (), + }); + } +} + +extension on web.NodeList { + Iterable toIterable() sync* { + for (var i = 0; i < length; i++) { + yield item(i)!; + } + } +} diff --git a/packages/jaspr/lib/src/browser/js_data.dart b/packages/jaspr/lib/src/browser/js_data.dart index ad9187a1..4bff5c52 100644 --- a/packages/jaspr/lib/src/browser/js_data.dart +++ b/packages/jaspr/lib/src/browser/js_data.dart @@ -2,9 +2,7 @@ library js_data; import 'dart:convert'; -import 'dart:js'; - -import 'package:js/js.dart'; +import 'dart:js_interop'; import '../foundation/sync.dart'; @@ -19,7 +17,7 @@ class JasprConfig { } List? get comp { - return _config?.comps?.map((c) => ComponentConfig._(c)).toList(); + return (_config?.comps as dynamic)?.map((c) => ComponentConfig._(c)).toList(); } } @@ -33,19 +31,25 @@ class ComponentConfig { } @JS('JSON.stringify') -external String _jsonStringify(Object obj); +external String _jsonStringify(JSAny obj); @JS() -class _JasprConfig { - external dynamic get sync; - external JsArray<_ComponentConfig>? get comps; +@staticInterop +class _JasprConfig {} + +extension _JasprConfigExtension on _JasprConfig { + external JSObject? get sync; + external JSObject? get comps; } @JS() -class _ComponentConfig { - external String id; - external String name; - external dynamic params; +@staticInterop +class _ComponentConfig {} + +extension _ComponentConfigExtension on _ComponentConfig { + external String get id; + external String get name; + external JSObject? get params; } Map? decodeConfig(dynamic config) { diff --git a/packages/jaspr/lib/src/foundation/events/events.dart b/packages/jaspr/lib/src/foundation/events/events.dart index 4e079ea0..ce2f2a62 100644 --- a/packages/jaspr/lib/src/foundation/events/events.dart +++ b/packages/jaspr/lib/src/foundation/events/events.dart @@ -1,8 +1,9 @@ +import 'package:web/web.dart' if (dart.library.ffi) 'events_vm.dart'; + import '../../components/html/html.dart'; import '../basic_types.dart'; -import 'events_web.dart' if (dart.library.ffi) 'events_vm.dart'; -export 'events_web.dart' if (dart.library.ffi) 'events_vm.dart' hide InputElement, TextAreaElement, SelectElement; +export 'package:web/web.dart' if (dart.library.ffi) 'events_vm.dart' show Event; typedef EventCallback = void Function(Event event); typedef EventCallbacks = Map; @@ -41,9 +42,8 @@ EventCallbacks events({ void Function(Event) _callWithValue(String event, void Function(V) fn) { return (e) { var target = e.target; - print(target.runtimeType); var value = switch (target) { - InputElement() => () { + HTMLInputElement() => () { var type = InputType.values.where((v) => v.name == target.type).firstOrNull; return switch (type) { InputType.checkbox || InputType.radio => target.checked, @@ -53,8 +53,9 @@ void Function(Event) _callWithValue(String event, void Function(V) fn) { _ => target.value, }; }(), - TextAreaElement() => target.value ?? '', - SelectElement() => target.selectedOptions.map((o) => o.value).toList(), + HTMLTextAreaElement() => target.value, + HTMLSelectElement() => + target.selectedOptions.toIterable().map((o) => o is HTMLOptionElement ? o.value : null).toList(), _ => null, }; assert(() { @@ -67,3 +68,11 @@ void Function(Event) _callWithValue(String event, void Function(V) fn) { fn(value as V); }; } + +extension on HTMLCollection { + Iterable toIterable() sync* { + for (var i = 0; i < length; i++) { + yield item(i)!; + } + } +} diff --git a/packages/jaspr/lib/src/foundation/events/events_vm.dart b/packages/jaspr/lib/src/foundation/events/events_vm.dart index cdfd1a40..511f6800 100644 --- a/packages/jaspr/lib/src/foundation/events/events_vm.dart +++ b/packages/jaspr/lib/src/foundation/events/events_vm.dart @@ -1,4 +1,36 @@ -typedef Event = dynamic; -typedef InputElement = dynamic; -typedef TextAreaElement = dynamic; -typedef SelectElement = dynamic; +abstract class Event { + Node get target; +} + +abstract class HTMLInputElement implements Node { + bool get checked; + + num get valueAsNumber; + + DateTime get valueAsDate; + + Object get files; + + Object get value; + + Object get type; +} + +abstract class HTMLTextAreaElement implements Node { + get value; +} + +abstract class HTMLSelectElement implements Node { + HTMLCollection get selectedOptions; +} + +abstract class HTMLOptionElement implements Node { + Object get value; +} + +abstract class HTMLCollection { + int get length; + Node? item(int index); +} + +abstract class Node {} diff --git a/packages/jaspr/lib/src/foundation/events/events_web.dart b/packages/jaspr/lib/src/foundation/events/events_web.dart deleted file mode 100644 index 43587b84..00000000 --- a/packages/jaspr/lib/src/foundation/events/events_web.dart +++ /dev/null @@ -1 +0,0 @@ -export 'dart:html' show Event, MouseEvent, InputElement, TextAreaElement, SelectElement; diff --git a/packages/jaspr/lib/src/server/server_handler.dart b/packages/jaspr/lib/src/server/server_handler.dart index 9bc40516..ee055b6f 100644 --- a/packages/jaspr/lib/src/server/server_handler.dart +++ b/packages/jaspr/lib/src/server/server_handler.dart @@ -6,7 +6,6 @@ import 'dart:io'; import 'package:http/http.dart' as http; import 'package:path/path.dart'; -import 'package:shelf_gzip/shelf_gzip.dart'; import 'package:shelf_proxy/shelf_proxy.dart'; import 'package:shelf_static/shelf_static.dart'; @@ -201,7 +200,7 @@ Handler createHandler(SetupHandler handle, {List middleware = const // We skip static file handling in generate mode to always generate fresh content on the server. if (!kGenerateMode) { - cascade = cascade.add(gzipMiddleware(staticHandler)); + cascade = cascade.add(staticHandler); } var fileLoader = _proxyFileLoader(staticHandler); diff --git a/packages/jaspr/pubspec.yaml b/packages/jaspr/pubspec.yaml index f05c1567..23e949fe 100644 --- a/packages/jaspr/pubspec.yaml +++ b/packages/jaspr/pubspec.yaml @@ -30,6 +30,7 @@ dependencies: shelf_gzip: ^4.0.0 shelf_proxy: ^1.0.1 shelf_static: ^1.1.0 + web: ^0.4.2 dev_dependencies: build_runner: ^2.4.0 diff --git a/packages/jaspr_cli/lib/src/commands/serve_command.dart b/packages/jaspr_cli/lib/src/commands/serve_command.dart index dfec3b2b..2b75c94e 100644 --- a/packages/jaspr_cli/lib/src/commands/serve_command.dart +++ b/packages/jaspr_cli/lib/src/commands/serve_command.dart @@ -50,6 +50,10 @@ class ServeCommand extends BaseCommand with SsrHelper, FlutterHelper { help: 'Serves the app in release mode.', negatable: false, ); + argParser.addFlag( + 'wasm', + negatable: false, + ); } @override @@ -75,65 +79,72 @@ class ServeCommand extends BaseCommand with SsrHelper, FlutterHelper { "Starting jaspr in ${release ? 'release' : debug ? 'debug' : 'development'} mode...", progress: ProgressState.running); - var workflow = await _runWebdev(); - guardResource(() { - logger.write('Terminating web builder...'); - return workflow.shutDown(); - }); + var wasm = argResults!['wasm'] as bool? ?? false; - logger.complete(true); - logger.write('Starting web builder...', progress: ProgressState.running); + if (!wasm) { + var workflow = await _runWebdev(); + guardResource(() { + logger.write('Terminating web builder...'); + return workflow.shutDown(); + }); - var buildCompleter = Completer(); + logger.complete(true); + logger.write('Starting web builder...', progress: ProgressState.running); - var timer = Timer(Duration(seconds: 20), () { - if (!buildCompleter.isCompleted) { - logger.write('Building web assets... (This takes longer for the initial build)', - progress: ProgressState.running); - } - }); + var buildCompleter = Completer(); - workflow.serverManager.servers.first.buildResults.listen((event) { - if (event.status == BuildStatus.succeeded) { + var timer = Timer(Duration(seconds: 20), () { if (!buildCompleter.isCompleted) { - buildCompleter.complete(); - } else { - logger.write('Rebuilt web assets.', progress: ProgressState.completed); + logger.write('Building web assets... (This takes longer for the initial build)', + progress: ProgressState.running); } - } else if (event.status == BuildStatus.failed) { - logger.write('Failed building web assets. There is probably more output above.', - level: Level.error, progress: ProgressState.completed); - } else if (event.status == BuildStatus.started) { - if (buildCompleter.isCompleted) { - logger.write('Rebuilding web assets...', progress: ProgressState.running); - } else { - logger.write('Building web assets...', progress: ProgressState.running); + }); + + workflow.serverManager.servers.first.buildResults.listen((event) { + if (event.status == BuildStatus.succeeded) { + if (!buildCompleter.isCompleted) { + buildCompleter.complete(); + } else { + logger.write('Rebuilt web assets.', progress: ProgressState.completed); + } + } else if (event.status == BuildStatus.failed) { + logger.write('Failed building web assets. There is probably more output above.', + level: Level.error, progress: ProgressState.completed); + } else if (event.status == BuildStatus.started) { + if (buildCompleter.isCompleted) { + logger.write('Rebuilding web assets...', progress: ProgressState.running); + } else { + logger.write('Building web assets...', progress: ProgressState.running); + } } - } - }); + }); - await buildCompleter.future; - timer.cancel(); + await buildCompleter.future; + timer.cancel(); - logger.write('Done building web assets.', progress: ProgressState.completed); + logger.write('Done building web assets.', progress: ProgressState.completed); - if (!useSSR) { - logger.write('Serving `web` on http://localhost:$port'); - } + if (!useSSR) { + logger.write('Serving `web` on http://localhost:$port'); + } - if (usesFlutter) { - var flutterProcess = await serveFlutter(); + if (usesFlutter) { + var flutterProcess = await serveFlutter(); - workflow.serverManager.servers.first.buildResults - .where((event) => event.status == BuildStatus.succeeded) - .listen((event) { - // trigger reload - flutterProcess.stdin.writeln('r'); - }); + workflow.serverManager.servers.first.buildResults + .where((event) => event.status == BuildStatus.succeeded) + .listen((event) { + // trigger reload + flutterProcess.stdin.writeln('r'); + }); + } + + if (!useSSR) { + await workflow.done; + } } if (!useSSR) { - await workflow.done; return ExitCode.success.code; } From 5029801252789f90d6bfcabcc0e039432b01c0e2 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 18 Feb 2024 14:12:46 +0100 Subject: [PATCH 02/31] update web implementation --- packages/jaspr/lib/jaspr.dart | 2 +- .../lib/src/browser/dom_render_object.dart | 58 +++++++------------ packages/jaspr/pubspec.yaml | 5 +- .../lib/src/testers/browser_tester.dart | 10 ++-- packages/jaspr_test/pubspec.yaml | 1 + 5 files changed, 29 insertions(+), 47 deletions(-) diff --git a/packages/jaspr/lib/jaspr.dart b/packages/jaspr/lib/jaspr.dart index e09a6545..5296ebe6 100644 --- a/packages/jaspr/lib/jaspr.dart +++ b/packages/jaspr/lib/jaspr.dart @@ -19,5 +19,5 @@ export 'src/foundation/sync.dart'; export 'src/foundation/synchronous_future.dart'; export 'src/framework/framework.dart'; export 'src/stub/run_app_stub.dart' - if (dart.library.js) 'src/browser/run_app.dart' + if (dart.library.js_interop) 'src/browser/run_app.dart' if (dart.library.io) 'src/server/run_app.dart' show runApp; diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 5675ec55..79e873a2 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:js_interop'; import 'package:web/web.dart' as web; @@ -47,10 +48,9 @@ class DomRenderObject extends RenderObject { diff: if (node == null) { - var toHydrate = parent!.toHydrate; - if (toHydrate.isNotEmpty) { - for (var e in toHydrate) { - if (e is web.Element && e.tagName.toLowerCase() == tag) { + if (parent!.toHydrate.isNotEmpty) { + for (var e in parent!.toHydrate) { + if (e.instanceOfString('Element') && (e as web.Element).tagName.toLowerCase() == tag) { if (kVerboseMode) { print("Hydrate html node: $e"); } @@ -59,12 +59,8 @@ class DomRenderObject extends RenderObject { for (var i = 0; i < elem.attributes.length; i++) { attributesToRemove.add(elem.attributes.item(i)!.name); } - toHydrate.remove(e); - var nodes = e.childNodes.toIterable(); - if (kDebugMode) { - nodes = nodes.where((node) => node is! web.Text || (node.textContent ?? '').trim().isNotEmpty); - } - this.toHydrate = nodes.toList(); + parent!.toHydrate.remove(e); + toHydrate = e.childNodes.toIterable().toList(); break diff; } } @@ -76,16 +72,12 @@ class DomRenderObject extends RenderObject { print("Create html node: $elem"); } } else { - if (node is! web.Element || (node as web.Element).tagName.toLowerCase() != tag) { + if (!node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { elem = _createElement(tag); - var old = node; - if (node case web.Element node) { - node.replaceWith(elem as dynamic); - } else if (node case web.Text node) { - node.replaceWith(elem as dynamic); - } + var old = node!; + node.parentNode!.replaceChild(elem, old); node = elem; - if (old != null && old.childNodes.length > 0) { + if (old.childNodes.length > 0) { var oldChildren = old.childNodes.toIterable(); for (var child in oldChildren) { elem.append(child as dynamic); @@ -111,7 +103,9 @@ class DomRenderObject extends RenderObject { if (attributes != null && attributes.isNotEmpty) { for (var attr in attributes.entries) { - if (attr.key == 'value' && elem is web.HTMLInputElement && elem.value != attr.value) { + if (attr.key == 'value' && + elem.instanceOfString('HTMLInputElement') && + (elem as web.HTMLInputElement).value != attr.value) { if (kVerboseMode) { print("Set input value: ${attr.value}"); } @@ -157,8 +151,8 @@ class DomRenderObject extends RenderObject { void updateText(String text, [bool rawHtml = false]) { if (rawHtml) { var parent = this.parent!.node; - if (parent is web.Element) { - if (parent.innerHTML != text) { + if (parent.instanceOfString('Element')) { + if ((parent as web.Element).innerHTML != text) { parent.innerHTML = text; node = parent.childNodes.item(0); if (kVerboseMode) { @@ -175,7 +169,7 @@ class DomRenderObject extends RenderObject { var toHydrate = parent!.toHydrate; if (toHydrate.isNotEmpty) { for (var e in toHydrate) { - if (e is web.Text) { + if (e.instanceOfString('Text')) { if (kVerboseMode) { print("Hydrate text node: $e"); } @@ -197,7 +191,7 @@ class DomRenderObject extends RenderObject { print("Create text node: $text"); } } else { - if (node is! web.Text) { + if (!node.instanceOfString('Text')) { var elem = web.Text(text); (node as web.Element).replaceWith(elem as dynamic); node = elem; @@ -231,7 +225,7 @@ class DomRenderObject extends RenderObject { var parentNode = parent.node; var childNode = node; - assert(parentNode is web.Element); + assert(parentNode.instanceOfString('Element')); if (childNode == null) return; var afterNode = after?.node; @@ -249,7 +243,7 @@ class DomRenderObject extends RenderObject { if (afterNode == null) { if (parentNode!.childNodes.length == 0) { - parentNode.append(childNode); + parentNode.appendChild(childNode); } else { parentNode.insertBefore(childNode, parentNode.childNodes.item(0)); } @@ -266,7 +260,7 @@ class DomRenderObject extends RenderObject { if (kVerboseMode) { print("Remove child $node of ${parent?.node}"); } - node?.remove(); + node?.parentNode!.removeChild(node!); parent = null; namespace = null; } @@ -276,7 +270,7 @@ class DomRenderObject extends RenderObject { print("Clear ${toHydrate.length} nodes not hydrated ($toHydrate)"); } for (var node in toHydrate) { - node.remove(); + node.parentNode!.removeChild(node); } toHydrate.clear(); } @@ -340,16 +334,6 @@ extension on web.Element { } } -extension on web.Node { - void remove() { - (switch (this) { - web.Element() => remove(), - web.CharacterData() => remove(), - _ => (), - }); - } -} - extension on web.NodeList { Iterable toIterable() sync* { for (var i = 0; i < length; i++) { diff --git a/packages/jaspr/pubspec.yaml b/packages/jaspr/pubspec.yaml index 23e949fe..fa6aa4f5 100644 --- a/packages/jaspr/pubspec.yaml +++ b/packages/jaspr/pubspec.yaml @@ -21,16 +21,13 @@ dependencies: hotreloader: ^4.1.0 html: ^0.15.0 http: '>=0.13.0 <2.0.0' - js: ^0.6.5 - # needed to resolve a bug with build_runner and logging@1.2.0 - logging: '>=1.0.0 <1.2.0' meta: ^1.7.0 path: ^1.8.0 shelf: ^1.2.0 shelf_gzip: ^4.0.0 shelf_proxy: ^1.0.1 shelf_static: ^1.1.0 - web: ^0.4.2 + web: ^0.5.0 dev_dependencies: build_runner: ^2.4.0 diff --git a/packages/jaspr_test/lib/src/testers/browser_tester.dart b/packages/jaspr_test/lib/src/testers/browser_tester.dart index f07ef97f..91e5f469 100644 --- a/packages/jaspr_test/lib/src/testers/browser_tester.dart +++ b/packages/jaspr_test/lib/src/testers/browser_tester.dart @@ -1,9 +1,9 @@ import 'dart:async'; -import 'dart:html' as html; import 'package:jaspr/browser.dart'; import 'package:meta/meta.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart' as web; import '../binding.dart'; import '../finders.dart'; @@ -20,8 +20,8 @@ void testBrowser( test( description, () async { - if (html.window.location.pathname != location) { - html.window.history.replaceState(null, 'Test', location); + if (web.window.location.pathname != location) { + web.window.history.replaceState(null, 'Test', location); } var binding = TestBrowserComponentsBinding(); @@ -63,8 +63,8 @@ class BrowserTester { var element = _findDomElement(finder); var source = (element.renderObject as DomRenderObject).node; - if (source is html.Element) { - source.dispatchEvent(html.MouseEvent('click')); + if (source is web.Element) { + source.dispatchEvent(web.MouseEvent('click')); } } diff --git a/packages/jaspr_test/pubspec.yaml b/packages/jaspr_test/pubspec.yaml index abaca73c..9571e74a 100644 --- a/packages/jaspr_test/pubspec.yaml +++ b/packages/jaspr_test/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: jaspr: ^0.10.0 meta: ^1.7.0 test: ^1.22.0 + web: ^0.5.0 dev_dependencies: lints: ^3.0.0 From fea6045fa20ac82a26f366638d89f5e15b68b021 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 18 Feb 2024 22:50:47 +0100 Subject: [PATCH 03/31] fix null type --- packages/jaspr/lib/src/browser/dom_render_object.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 79e873a2..d159bf25 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -75,7 +75,7 @@ class DomRenderObject extends RenderObject { if (!node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { elem = _createElement(tag); var old = node!; - node.parentNode!.replaceChild(elem, old); + node!.parentNode!.replaceChild(elem, old); node = elem; if (old.childNodes.length > 0) { var oldChildren = old.childNodes.toIterable(); From 28659663c37e72e5a7d7d37aa7558ab12a949695 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 18 Feb 2024 23:55:54 +0100 Subject: [PATCH 04/31] update flutter embed to js_interop --- examples/flutter_embedding/pubspec.yaml | 2 - .../lib/src/run_flutter_app.dart | 79 ++++++------------- packages/jaspr_flutter_embed/pubspec.yaml | 5 +- 3 files changed, 28 insertions(+), 58 deletions(-) diff --git a/examples/flutter_embedding/pubspec.yaml b/examples/flutter_embedding/pubspec.yaml index 5d07cc2b..87631e32 100644 --- a/examples/flutter_embedding/pubspec.yaml +++ b/examples/flutter_embedding/pubspec.yaml @@ -7,7 +7,6 @@ environment: sdk: '>=3.0.0-0 <4.0.0' dependencies: - cupertino_icons: 1.0.6 firebase_core: ^2.15.1 flutter: sdk: flutter @@ -15,7 +14,6 @@ dependencies: jaspr: ^0.9.0 jaspr_flutter_embed: ^0.1.4 jaspr_riverpod: ^0.3.6 - js: ^0.6.7 riverpod: ^2.4.0 dev_dependencies: diff --git a/packages/jaspr_flutter_embed/lib/src/run_flutter_app.dart b/packages/jaspr_flutter_embed/lib/src/run_flutter_app.dart index c1045fa3..4c2afe36 100644 --- a/packages/jaspr_flutter_embed/lib/src/run_flutter_app.dart +++ b/packages/jaspr_flutter_embed/lib/src/run_flutter_app.dart @@ -2,33 +2,29 @@ @JS() library flutter_interop; -import 'dart:html'; +import 'dart:js_interop'; import 'dart:ui_web' as ui_web; -import 'package:js/js.dart'; +import 'package:web/web.dart'; /// Starts a flutter app and attaches it to the [attachTo] dom element. void runFlutterApp({required String attachTo, required void Function() runApp}) { - var target = querySelector(attachTo); + var target = document.querySelector(attachTo); flutter ??= FlutterInterop(); flutter!.loader ??= FlutterLoader(); - flutter!.loader!.didCreateEngineInitializer = allowInterop((engineInitializer) { + flutter!.loader!.didCreateEngineInitializer = ((engineInitializer) { return engineInitializer .initializeEngine(InitializeEngineOptions(hostElement: target!)) - .then(allowInterop((runner) { - runner.runApp(); - })); + .toDart + .then((runner) => runner.runApp()) + .toJS; }); ui_web.bootstrapEngine(runApp: runApp); } -/// Handle to the [require()] function from RequireJS -@JS() -external void Function(List) require; - /// Handle to the [_flutter] object defined by the 'flutter.js' script. @JS('_flutter') external FlutterInterop? flutter; @@ -36,59 +32,34 @@ external FlutterInterop? flutter; // Below are some js bindings to interact with the flutter loader script // from dart in a type-safe way. -@JS() -@anonymous -class FlutterInterop { - external factory FlutterInterop(); +extension type FlutterInterop._(JSObject _) { + external FlutterInterop({FlutterLoader? loader}); - external FlutterLoader? loader; + external FlutterLoader? get loader; + external set loader(FlutterLoader? loader); } -@JS() -@anonymous -class FlutterLoader { - external factory FlutterLoader(); +extension type FlutterLoader._(JSObject _) { + external FlutterLoader({JSFunction? didCreateEngineInitializer}); - external Promise loadEntrypoint(LoadEntrypointOptions options); + @JS("didCreateEngineInitializer") + external set _didCreateEngineInitializer(JSFunction? fn); - external OnEntrypointLoaded? didCreateEngineInitializer; + set didCreateEngineInitializer(OnEntrypointLoaded? callback) { + _didCreateEngineInitializer = callback?.toJS; + } } -typedef OnEntrypointLoaded = Promise Function(EngineInitializer engineInitializer); +typedef OnEntrypointLoaded = JSPromise Function(EngineInitializer engineInitializer); -@JS() -@anonymous -class LoadEntrypointOptions { - external factory LoadEntrypointOptions({ - String? entrypointUrl, - OnEntrypointLoaded? onEntrypointLoaded, - }); +extension type EngineInitializer._(JSObject _) { + external JSPromise initializeEngine(InitializeEngineOptions options); } -@JS() -class EngineInitializer { - external factory EngineInitializer(); - - external Promise initializeEngine(InitializeEngineOptions options); +extension type InitializeEngineOptions._(JSObject _) { + external InitializeEngineOptions({Element? hostElement}); } -@JS() -@anonymous -class InitializeEngineOptions { - external factory InitializeEngineOptions({ - Element? hostElement, - }); -} - -@JS() -class AppRunner { - external factory AppRunner(); - - external Promise runApp(); -} - -@JS() -class Promise { - external Promise(void Function(void Function(T result) resolve, Function reject) executor); - external Promise then(void Function(T result) onFulfilled, [Function onRejected]); +extension type AppRunner._(JSObject _) implements JSObject { + external JSPromise runApp(); } diff --git a/packages/jaspr_flutter_embed/pubspec.yaml b/packages/jaspr_flutter_embed/pubspec.yaml index 5581cc88..a4e53f82 100644 --- a/packages/jaspr_flutter_embed/pubspec.yaml +++ b/packages/jaspr_flutter_embed/pubspec.yaml @@ -12,13 +12,14 @@ topics: - web environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.3.0 <4.0.0' dependencies: flutter: sdk: flutter jaspr: ^0.10.0 - js: ^0.6.5 + web: ^0.5.0 + dev_dependencies: lints: ^3.0.0 From 941fb63e7872a2b9837a6e61422029933c37f219 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Mon, 19 Feb 2024 21:16:42 +0100 Subject: [PATCH 05/31] add wasm flag to build command --- experiments/wasm_test/web/main.dart.js | 2 +- .../lib/src/commands/build_command.dart | 11 +- .../lib/src/commands/serve_command.dart | 100 ++++++++---------- 3 files changed, 57 insertions(+), 56 deletions(-) diff --git a/experiments/wasm_test/web/main.dart.js b/experiments/wasm_test/web/main.dart.js index 98c72cfb..e96f33c9 100644 --- a/experiments/wasm_test/web/main.dart.js +++ b/experiments/wasm_test/web/main.dart.js @@ -2,7 +2,7 @@ let dart2wasm_runtime; let moduleInstance; try { - const dartModulePromise = WebAssembly.compileStreaming(fetch('main.wasm')); + const dartModulePromise = WebAssembly.compileStreaming(fetch('./main.wasm')); const imports = {}; dart2wasm_runtime = await import('./main.mjs'); moduleInstance = await dart2wasm_runtime.instantiate(dartModulePromise, imports); diff --git a/packages/jaspr_cli/lib/src/commands/build_command.dart b/packages/jaspr_cli/lib/src/commands/build_command.dart index d12a1215..21ccbcf1 100644 --- a/packages/jaspr_cli/lib/src/commands/build_command.dart +++ b/packages/jaspr_cli/lib/src/commands/build_command.dart @@ -33,6 +33,7 @@ class BuildCommand extends BaseCommand with SsrHelper, FlutterHelper { }, defaultsTo: 'exe', ); + argParser.addFlag('wasm', abbr: 'w', negatable: false, help: 'Uses experimental dart2wasm compilation.'); } @override @@ -69,7 +70,15 @@ class BuildCommand extends BaseCommand with SsrHelper, FlutterHelper { await indexHtml.create(); } - var webResult = _buildWeb(true, useSSR); + var wasm = argResults!['wasm'] as bool? ?? false; + + Future webResult; + if (!wasm) { + webResult = _buildWeb(true, useSSR); + } else { + webResult = _buildWeb(true, useSSR); + } + var flutterResult = Future.value(); if (usesFlutter) { diff --git a/packages/jaspr_cli/lib/src/commands/serve_command.dart b/packages/jaspr_cli/lib/src/commands/serve_command.dart index 2b75c94e..b247c969 100644 --- a/packages/jaspr_cli/lib/src/commands/serve_command.dart +++ b/packages/jaspr_cli/lib/src/commands/serve_command.dart @@ -50,10 +50,6 @@ class ServeCommand extends BaseCommand with SsrHelper, FlutterHelper { help: 'Serves the app in release mode.', negatable: false, ); - argParser.addFlag( - 'wasm', - negatable: false, - ); } @override @@ -79,69 +75,65 @@ class ServeCommand extends BaseCommand with SsrHelper, FlutterHelper { "Starting jaspr in ${release ? 'release' : debug ? 'debug' : 'development'} mode...", progress: ProgressState.running); - var wasm = argResults!['wasm'] as bool? ?? false; + var workflow = await _runWebdev(); + guardResource(() { + logger.write('Terminating web builder...'); + return workflow.shutDown(); + }); - if (!wasm) { - var workflow = await _runWebdev(); - guardResource(() { - logger.write('Terminating web builder...'); - return workflow.shutDown(); - }); + logger.complete(true); + logger.write('Starting web builder...', progress: ProgressState.running); - logger.complete(true); - logger.write('Starting web builder...', progress: ProgressState.running); + var buildCompleter = Completer(); - var buildCompleter = Completer(); + var timer = Timer(Duration(seconds: 20), () { + if (!buildCompleter.isCompleted) { + logger.write('Building web assets... (This takes longer for the initial build)', + progress: ProgressState.running); + } + }); - var timer = Timer(Duration(seconds: 20), () { + workflow.serverManager.servers.first.buildResults.listen((event) { + if (event.status == BuildStatus.succeeded) { if (!buildCompleter.isCompleted) { - logger.write('Building web assets... (This takes longer for the initial build)', - progress: ProgressState.running); + buildCompleter.complete(); + } else { + logger.write('Rebuilt web assets.', progress: ProgressState.completed); } - }); - - workflow.serverManager.servers.first.buildResults.listen((event) { - if (event.status == BuildStatus.succeeded) { - if (!buildCompleter.isCompleted) { - buildCompleter.complete(); - } else { - logger.write('Rebuilt web assets.', progress: ProgressState.completed); - } - } else if (event.status == BuildStatus.failed) { - logger.write('Failed building web assets. There is probably more output above.', - level: Level.error, progress: ProgressState.completed); - } else if (event.status == BuildStatus.started) { - if (buildCompleter.isCompleted) { - logger.write('Rebuilding web assets...', progress: ProgressState.running); - } else { - logger.write('Building web assets...', progress: ProgressState.running); - } + } else if (event.status == BuildStatus.failed) { + logger.write('Failed building web assets. There is probably more output above.', + level: Level.error, progress: ProgressState.completed); + } else if (event.status == BuildStatus.started) { + if (buildCompleter.isCompleted) { + logger.write('Rebuilding web assets...', progress: ProgressState.running); + } else { + logger.write('Building web assets...', progress: ProgressState.running); } - }); + } + }); - await buildCompleter.future; - timer.cancel(); + await buildCompleter.future; + timer.cancel(); - logger.write('Done building web assets.', progress: ProgressState.completed); + logger.write('Done building web assets.', progress: ProgressState.completed); - if (!useSSR) { - logger.write('Serving `web` on http://localhost:$port'); - } + if (!useSSR) { + logger.write('Serving `web` on http://localhost:$port'); + } - if (usesFlutter) { - var flutterProcess = await serveFlutter(); + if (usesFlutter) { + var flutterProcess = await serveFlutter(); - workflow.serverManager.servers.first.buildResults - .where((event) => event.status == BuildStatus.succeeded) - .listen((event) { - // trigger reload - flutterProcess.stdin.writeln('r'); - }); - } + workflow.serverManager.servers.first.buildResults + .where((event) => event.status == BuildStatus.succeeded) + .listen((event) { + // trigger reload + flutterProcess.stdin.writeln('r'); + }); + } - if (!useSSR) { - await workflow.done; - } + if (!useSSR) { + await workflow.done; } if (!useSSR) { From e2e786c5b54cead4079d8836a3fa171bfb32bcbd Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 25 Feb 2024 19:10:42 +0100 Subject: [PATCH 06/31] update conditional import --- packages/jaspr/lib/src/foundation/events/events.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jaspr/lib/src/foundation/events/events.dart b/packages/jaspr/lib/src/foundation/events/events.dart index ce2f2a62..439710ca 100644 --- a/packages/jaspr/lib/src/foundation/events/events.dart +++ b/packages/jaspr/lib/src/foundation/events/events.dart @@ -1,9 +1,9 @@ -import 'package:web/web.dart' if (dart.library.ffi) 'events_vm.dart'; +import 'package:web/web.dart' if (dart.library.io) 'events_vm.dart'; import '../../components/html/html.dart'; import '../basic_types.dart'; -export 'package:web/web.dart' if (dart.library.ffi) 'events_vm.dart' show Event; +export 'package:web/web.dart' if (dart.library.io) 'events_vm.dart' show Event; typedef EventCallback = void Function(Event event); typedef EventCallbacks = Map; From bdc0b6b5c9ee75bf42948e88c8c60440ef0b5ec2 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 25 Feb 2024 19:11:01 +0100 Subject: [PATCH 07/31] pass wasm flag to jaspr_web_compilers --- .../lib/src/commands/build_command.dart | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/jaspr_cli/lib/src/commands/build_command.dart b/packages/jaspr_cli/lib/src/commands/build_command.dart index 21ccbcf1..00275543 100644 --- a/packages/jaspr_cli/lib/src/commands/build_command.dart +++ b/packages/jaspr_cli/lib/src/commands/build_command.dart @@ -33,7 +33,12 @@ class BuildCommand extends BaseCommand with SsrHelper, FlutterHelper { }, defaultsTo: 'exe', ); - argParser.addFlag('wasm', abbr: 'w', negatable: false, help: 'Uses experimental dart2wasm compilation.'); + argParser.addFlag( + 'wasm', + abbr: 'w', + negatable: false, + help: 'Uses experimental dart2wasm compilation.', + ); } @override @@ -71,14 +76,13 @@ class BuildCommand extends BaseCommand with SsrHelper, FlutterHelper { } var wasm = argResults!['wasm'] as bool? ?? false; - - Future webResult; - if (!wasm) { - webResult = _buildWeb(true, useSSR); - } else { - webResult = _buildWeb(true, useSSR); + if (wasm && !usesJasprWebCompilers) { + logger.write("Compiling to wasm is only supported when using 'jaspr_web_compilers'.", level: Level.critical); + await shutdown(1); } + Future webResult = _buildWeb(true, useSSR, wasm); + var flutterResult = Future.value(); if (usesFlutter) { @@ -135,15 +139,18 @@ class BuildCommand extends BaseCommand with SsrHelper, FlutterHelper { return ExitCode.success.code; } - Future _buildWeb(bool release, bool useSSR) async { + Future _buildWeb(bool release, bool useSSR, bool wasm) async { logger.write('Building web assets...', progress: ProgressState.running); + var entrypointArgsPath = '${usesJasprWebCompilers ? 'jaspr' : 'build'}_web_compilers:entrypoint'; + var client = await d.connectClient( Directory.current.path, [ '--release', '--verbose', '--delete-conflicting-outputs', - '--define=${usesJasprWebCompilers ? 'jaspr' : 'build'}_web_compilers:entrypoint=dart2js_args=["-Djaspr.flags.release=true"]' + '--define=$entrypointArgsPath=dart2${wasm ? 'wasm' : 'js'}_args=["-Djaspr.flags.release=true"]', + if (wasm) '--define=$entrypointArgsPath=compiler=dart2wasm', ], logger.writeServerLog, ); From 9f17952d2cef7cf68f93f6fd259caa41d37c58e5 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 25 Feb 2024 19:11:28 +0100 Subject: [PATCH 08/31] update wasm experiment --- experiments/wasm_test/pubspec.lock | 56 ++-- experiments/wasm_test/pubspec.yaml | 8 +- .../web/{main.dart.js => main.dart-temp.js} | 0 experiments/wasm_test/web/main.mjs | 295 ------------------ experiments/wasm_test/web/main.wasm | Bin 160247 -> 0 bytes experiments/wasm_test/web/main.wasm.unopt | Bin 392968 -> 0 bytes 6 files changed, 39 insertions(+), 320 deletions(-) rename experiments/wasm_test/web/{main.dart.js => main.dart-temp.js} (100%) delete mode 100644 experiments/wasm_test/web/main.mjs delete mode 100644 experiments/wasm_test/web/main.wasm delete mode 100644 experiments/wasm_test/web/main.wasm.unopt diff --git a/experiments/wasm_test/pubspec.lock b/experiments/wasm_test/pubspec.lock index 1917334f..7a9b22a9 100644 --- a/experiments/wasm_test/pubspec.lock +++ b/experiments/wasm_test/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "36a321c3d2cbe01cbcb3540a87b8843846e0206df3e691fa7b23e19e78de6d49" + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a url: "https://pub.dev" source: hosted - version: "65.0.0" + version: "61.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: dfe03b90ec022450e22513b5e5ca1f01c0c01de9c3fba2f7fd233cb57a6b9a07 + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "5.13.0" archive: dependency: transitive description: @@ -121,14 +121,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.2.8" - build_web_compilers: - dependency: "direct dev" - description: - name: build_web_compilers - sha256: aad1d705faa53d060e7ccb7855ee74705a8e3d9ea1634e63e362cc2c1bd47afa - url: "https://pub.dev" - source: hosted - version: "4.0.9" built_collection: dependency: transitive description: @@ -197,10 +189,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.2" file: dependency: transitive description: @@ -261,10 +253,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -296,6 +288,20 @@ packages: relative: true source: path version: "0.10.0" + jaspr_builder: + dependency: "direct dev" + description: + path: "../../packages/jaspr_builder" + relative: true + source: path + version: "0.10.0" + jaspr_web_compilers: + dependency: "direct dev" + description: + path: "../../modules/build/jaspr_web_compilers" + relative: true + source: path + version: "4.0.9" js: dependency: transitive description: @@ -456,6 +462,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" source_maps: dependency: transitive description: @@ -556,18 +570,18 @@ packages: dependency: "direct main" description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: "1d9158c616048c38f712a6646e317a3426da10e884447626167240d45209cbad" url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "0.5.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23" + sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.4" yaml: dependency: transitive description: @@ -577,4 +591,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0-279.0.dev <3.5.0" + dart: ">=3.3.0 <3.5.0" diff --git a/experiments/wasm_test/pubspec.yaml b/experiments/wasm_test/pubspec.yaml index 70cf3924..c65a72f6 100644 --- a/experiments/wasm_test/pubspec.yaml +++ b/experiments/wasm_test/pubspec.yaml @@ -8,13 +8,13 @@ environment: # Add regular dependencies here. dependencies: - jaspr: - path: ../../packages/jaspr - web: ^0.4.0 + jaspr: ^0.10.0 + web: ^0.5.0 dev_dependencies: build_runner: ^2.4.0 - build_web_compilers: ^4.0.0 + jaspr_web_compilers: ^4.0.0 + jaspr_builder: ^0.10.0 lints: ^3.0.0 jaspr: diff --git a/experiments/wasm_test/web/main.dart.js b/experiments/wasm_test/web/main.dart-temp.js similarity index 100% rename from experiments/wasm_test/web/main.dart.js rename to experiments/wasm_test/web/main.dart-temp.js diff --git a/experiments/wasm_test/web/main.mjs b/experiments/wasm_test/web/main.mjs deleted file mode 100644 index f27c4b6f..00000000 --- a/experiments/wasm_test/web/main.mjs +++ /dev/null @@ -1,295 +0,0 @@ - let buildArgsList; - -// `modulePromise` is a promise to the `WebAssembly.module` object to be -// instantiated. -// `importObjectPromise` is a promise to an object that contains any additional -// imports needed by the module that aren't provided by the standard runtime. -// The fields on this object will be merged into the importObject with which -// the module will be instantiated. -// This function returns a promise to the instantiated module. -export const instantiate = async (modulePromise, importObjectPromise) => { - let dartInstance; - - function stringFromDartString(string) { - const totalLength = dartInstance.exports.$stringLength(string); - let result = ''; - let index = 0; - while (index < totalLength) { - let chunkLength = Math.min(totalLength - index, 0xFFFF); - const array = new Array(chunkLength); - for (let i = 0; i < chunkLength; i++) { - array[i] = dartInstance.exports.$stringRead(string, index++); - } - result += String.fromCharCode(...array); - } - return result; - } - - function stringToDartString(string) { - const length = string.length; - let range = 0; - for (let i = 0; i < length; i++) { - range |= string.codePointAt(i); - } - if (range < 256) { - const dartString = dartInstance.exports.$stringAllocate1(length); - for (let i = 0; i < length; i++) { - dartInstance.exports.$stringWrite1(dartString, i, string.codePointAt(i)); - } - return dartString; - } else { - const dartString = dartInstance.exports.$stringAllocate2(length); - for (let i = 0; i < length; i++) { - dartInstance.exports.$stringWrite2(dartString, i, string.charCodeAt(i)); - } - return dartString; - } - } - - // Converts a Dart List to a JS array. Any Dart objects will be converted, but - // this will be cheap for JSValues. - function arrayFromDartList(constructor, list) { - const length = dartInstance.exports.$listLength(list); - const array = new constructor(length); - for (let i = 0; i < length; i++) { - array[i] = dartInstance.exports.$listRead(list, i); - } - return array; - } - - buildArgsList = function(list) { - const dartList = dartInstance.exports.$makeStringList(); - for (let i = 0; i < list.length; i++) { - dartInstance.exports.$listAdd(dartList, stringToDartString(list[i])); - } - return dartList; - } - - // A special symbol attached to functions that wrap Dart functions. - const jsWrappedDartFunctionSymbol = Symbol("JSWrappedDartFunction"); - - function finalizeWrapper(dartFunction, wrapped) { - wrapped.dartFunction = dartFunction; - wrapped[jsWrappedDartFunctionSymbol] = true; - return wrapped; - } - - if (WebAssembly.String === undefined) { - console.log("WebAssembly.String is undefined, adding polyfill"); - WebAssembly.String = { - "charCodeAt": (s, i) => s.charCodeAt(i), - "compare": (s1, s2) => { - if (s1 < s2) return -1; - if (s1 > s2) return 1; - return 0; - }, - "concat": (s1, s2) => s1 + s2, - "equals": (s1, s2) => s1 === s2, - "fromCharCode": (i) => String.fromCharCode(i), - "length": (s) => s.length, - "substring": (s, a, b) => s.substring(a, b), - }; - } - - // Imports - const dart2wasm = { - - _18170: s => stringToDartString(JSON.stringify(stringFromDartString(s))), -_18171: s => console.log(stringFromDartString(s)), -_18274: o => o === undefined, -_18275: o => typeof o === 'boolean', -_18276: o => typeof o === 'number', -_18278: o => typeof o === 'string', -_18281: o => o instanceof Int8Array, -_18282: o => o instanceof Uint8Array, -_18283: o => o instanceof Uint8ClampedArray, -_18284: o => o instanceof Int16Array, -_18285: o => o instanceof Uint16Array, -_18286: o => o instanceof Int32Array, -_18287: o => o instanceof Uint32Array, -_18288: o => o instanceof Float32Array, -_18289: o => o instanceof Float64Array, -_18290: o => o instanceof ArrayBuffer, -_18291: o => o instanceof DataView, -_18292: o => o instanceof Array, -_18293: o => typeof o === 'function' && o[jsWrappedDartFunctionSymbol] === true, -_18296: o => o instanceof RegExp, -_18297: (l, r) => l === r, -_18298: o => o, -_18299: o => o, -_18300: o => o, -_18301: b => !!b, -_18302: o => o.length, -_18305: (o, i) => o[i], -_18306: f => f.dartFunction, -_18307: l => arrayFromDartList(Int8Array, l), -_18308: l => arrayFromDartList(Uint8Array, l), -_18309: l => arrayFromDartList(Uint8ClampedArray, l), -_18310: l => arrayFromDartList(Int16Array, l), -_18311: l => arrayFromDartList(Uint16Array, l), -_18312: l => arrayFromDartList(Int32Array, l), -_18313: l => arrayFromDartList(Uint32Array, l), -_18314: l => arrayFromDartList(Float32Array, l), -_18315: l => arrayFromDartList(Float64Array, l), -_18316: (data, length) => { - const view = new DataView(new ArrayBuffer(length)); - for (let i = 0; i < length; i++) { - view.setUint8(i, dartInstance.exports.$byteDataGetUint8(data, i)); - } - return view; - }, -_18317: l => arrayFromDartList(Array, l), -_18318: stringFromDartString, -_18319: stringToDartString, -_18326: (o, p) => o[p], -_18263: (s, m) => { - try { - return new RegExp(s, m); - } catch (e) { - return String(e); - } - }, -_18264: (x0,x1) => x0.exec(x1), -_18322: l => new Array(l), -_18330: o => String(o), -_18337: x0 => x0.length, -_18339: (x0,x1) => x0[x1], -_18343: x0 => x0.flags, -_18223: Object.is, -_18225: WebAssembly.String.concat, -_18233: (o) => new DataView(o.buffer, o.byteOffset, o.byteLength), -_18183: (a, i) => a.push(i), -_18194: a => a.length, -_18196: (a, i) => a[i], -_18197: (a, i, v) => a[i] = v, -_18199: a => a.join(''), -_18203: s => s.toLowerCase(), -_18205: s => s.trim(), -_18209: (s, p, i) => s.indexOf(p, i), -_18212: (o, start, length) => new Uint8Array(o.buffer, o.byteOffset + start, length), -_18213: (o, start, length) => new Int8Array(o.buffer, o.byteOffset + start, length), -_18214: (o, start, length) => new Uint8ClampedArray(o.buffer, o.byteOffset + start, length), -_18215: (o, start, length) => new Uint16Array(o.buffer, o.byteOffset + start, length), -_18216: (o, start, length) => new Int16Array(o.buffer, o.byteOffset + start, length), -_18217: (o, start, length) => new Uint32Array(o.buffer, o.byteOffset + start, length), -_18218: (o, start, length) => new Int32Array(o.buffer, o.byteOffset + start, length), -_18221: (o, start, length) => new Float32Array(o.buffer, o.byteOffset + start, length), -_18222: (o, start, length) => new Float64Array(o.buffer, o.byteOffset + start, length), -_18224: WebAssembly.String.charCodeAt, -_18226: WebAssembly.String.substring, -_18227: WebAssembly.String.length, -_18228: WebAssembly.String.equals, -_18229: WebAssembly.String.compare, -_18230: WebAssembly.String.fromCharCode, -_18237: Function.prototype.call.bind(Object.getOwnPropertyDescriptor(DataView.prototype, 'byteLength').get), -_18238: (b, o) => new DataView(b, o), -_18240: Function.prototype.call.bind(DataView.prototype.getUint8), -_18242: Function.prototype.call.bind(DataView.prototype.getInt8), -_18244: Function.prototype.call.bind(DataView.prototype.getUint16), -_18246: Function.prototype.call.bind(DataView.prototype.getInt16), -_18248: Function.prototype.call.bind(DataView.prototype.getUint32), -_18250: Function.prototype.call.bind(DataView.prototype.getInt32), -_18256: Function.prototype.call.bind(DataView.prototype.getFloat32), -_18258: Function.prototype.call.bind(DataView.prototype.getFloat64), -_18181: (c) => - queueMicrotask(() => dartInstance.exports.$invokeCallback(c)), -_18261: s => stringToDartString(stringFromDartString(s).toLowerCase()), -_18146: v => stringToDartString(v.toString()), -_18160: s => { - const jsSource = stringFromDartString(s); - if (!/^\s*[+-]?(?:Infinity|NaN|(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(jsSource)) { - return NaN; - } - return parseFloat(jsSource); - }, -_18161: () => { - let stackString = new Error().stack.toString(); - let frames = stackString.split('\n'); - let drop = 2; - if (frames[0] === 'Error') { - drop += 1; - } - return frames.slice(drop).join('\n'); - }, -_101: (x0,x1) => x0.item(x1), -_90: (x0,x1) => x0.querySelector(x1), -_92: f => finalizeWrapper(f,x0 => dartInstance.exports._92(f,x0)), -_93: (x0,x1) => x0.requestAnimationFrame(x1), -_48: (x0,x1) => x0.createElement(x1), -_72: (x0,x1,x2) => x0.createElementNS(x1,x2), -_73: (x0,x1) => x0.item(x1), -_74: (x0,x1) => x0.replaceWith(x1), -_75: (x0,x1) => x0.replaceWith(x1), -_76: (x0,x1) => x0.append(x1), -_77: (x0,x1) => x0.item(x1), -_78: (x0,x1) => x0.removeAttribute(x1), -_80: x0 => new Text(x0), -_81: (x0,x1) => x0.replaceWith(x1), -_82: (x0,x1) => x0.item(x1), -_83: (x0,x1) => x0.item(x1), -_84: (x0,x1,x2) => x0.insertBefore(x1,x2), -_85: (x0,x1,x2) => x0.insertBefore(x1,x2), -_86: (x0,x1) => x0.getAttribute(x1), -_87: (x0,x1) => x0.removeAttribute(x1), -_88: (x0,x1,x2) => x0.setAttribute(x1,x2), -_89: (x0,x1) => x0.item(x1), -_94: () => globalThis.jaspr, -_95: x0 => globalThis.JSON.stringify(x0), -_96: x0 => x0.sync, -_3121: x0 => x0.target, -_3162: x0 => x0.length, -_3165: x0 => x0.length, -_3212: x0 => x0.parentNode, -_3214: x0 => x0.childNodes, -_3217: x0 => x0.previousSibling, -_3218: x0 => x0.nextSibling, -_3221: (x0,x1) => x0.textContent = x1, -_3222: x0 => x0.textContent, -_3225: () => globalThis.document, -_3705: x0 => x0.tagName, -_3713: x0 => x0.attributes, -_3842: x0 => x0.length, -_3846: x0 => x0.name, -_1344: x0 => x0.checked, -_1351: x0 => x0.files, -_1394: x0 => x0.type, -_1397: (x0,x1) => x0.value = x1, -_1398: x0 => x0.value, -_1400: x0 => x0.valueAsDate, -_1402: x0 => x0.valueAsNumber, -_1478: x0 => x0.selectedOptions, -_1502: x0 => x0.value, -_1542: x0 => x0.value, -_2115: () => globalThis.window, -_51: f => finalizeWrapper(f,x0 => dartInstance.exports._51(f,x0)), -_53: (x0,x1,x2,x3) => x0.addEventListener(x1,x2,x3), -_68: (x0,x1) => x0.appendChild(x1) - }; - - const baseImports = { - dart2wasm: dart2wasm, - - - Math: Math, - Date: Date, - Object: Object, - Array: Array, - Reflect: Reflect, - }; - dartInstance = await WebAssembly.instantiate(await modulePromise, { - ...baseImports, - ...(await importObjectPromise), - }); - - return dartInstance; -} - -// Call the main function for the instantiated module -// `moduleInstance` is the instantiated dart2wasm module -// `args` are any arguments that should be passed into the main function. -export const invoke = (moduleInstance, ...args) => { - const dartMain = moduleInstance.exports.$getMain(); - const dartArgs = buildArgsList(args); - moduleInstance.exports.$invokeMain(dartMain, dartArgs); -} - diff --git a/experiments/wasm_test/web/main.wasm b/experiments/wasm_test/web/main.wasm deleted file mode 100644 index 4bfa6e884d158550aad33c317120639bc9c4ff72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160247 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 MDBk From 4b781dd365b0c178ea4c5eee0d55a31175236fba Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 11 Aug 2024 13:08:35 +0200 Subject: [PATCH 09/31] fix web usage --- experiments/mobx_hooks/pubspec.lock | 14 ++++++++--- .../lib/src/browser/dom_render_object.dart | 20 +++++----------- packages/jaspr/lib/src/browser/utils.dart | 20 ++++++++++++++++ .../components/document/document_client.dart | 8 +++++-- .../src/components/raw_text/raw_text_web.dart | 1 + .../lib/src/foundation/events/events.dart | 24 +++++++++++-------- .../events/{events_vm.dart => web_stub.dart} | 0 7 files changed, 58 insertions(+), 29 deletions(-) create mode 100644 packages/jaspr/lib/src/browser/utils.dart rename packages/jaspr/lib/src/foundation/events/{events_vm.dart => web_stub.dart} (100%) diff --git a/experiments/mobx_hooks/pubspec.lock b/experiments/mobx_hooks/pubspec.lock index 8c778dcd..b9c907b8 100644 --- a/experiments/mobx_hooks/pubspec.lock +++ b/experiments/mobx_hooks/pubspec.lock @@ -125,10 +125,10 @@ packages: dependency: "direct dev" description: name: build_web_compilers - sha256: ebd3db74f0d53ae9b91a214016e35733add484a1a3014e188754954e8d69843c + sha256: e8d818410cc8b4dc96c4960ce0ab84fe3f2b0ca6576cc130fd7277b56eba9d68 url: "https://pub.dev" source: hosted - version: "4.0.8" + version: "4.0.11" built_collection: dependency: transitive description: @@ -615,6 +615,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -640,4 +648,4 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.1.0 <3.5.0" + dart: ">=3.5.0-259.0.dev <3.6.0" diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 1448c3e2..3e3cf8e2 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -6,6 +6,7 @@ import 'package:web/web.dart' as web; import '../foundation/constants.dart'; import '../foundation/events/events.dart'; import '../framework/framework.dart'; +import 'utils.dart'; const htmlns = 'http://www.w3.org/1999/xhtml'; const xmlns = { @@ -48,8 +49,8 @@ class DomRenderObject extends RenderObject { late web.Element elem; var namespace = xmlns[tag]; - if ((namespace, parent?.node) case (== null, web.Element pnode)) { - namespace = pnode.namespaceURI; + if (namespace == null && (parent?.node?.instanceOfString("Element") ?? false)) { + namespace = (parent?.node as web.Element).namespaceURI; } diff: @@ -84,8 +85,7 @@ class DomRenderObject extends RenderObject { node!.parentNode!.replaceChild(elem, old); node = elem; if (old.childNodes.length > 0) { - var oldChildren = old.childNodes.toIterable(); - for (var child in oldChildren) { + for (var child in old.childNodes.toIterable()) { elem.append(child as dynamic); } } @@ -304,14 +304,14 @@ class EventBinding { extension AttributeOperation on web.Element { void clearOrSetAttribute(String name, String? value) { - final current = getAttribute(name); - if (current == value) return; if (value == null) { + if (!hasAttribute(name)) return; if (kVerboseMode) { print("Remove attribute: $name"); } removeAttribute(name); } else { + if (getAttribute(name) == value) return; if (kVerboseMode) { print("Update attribute: $name - $value"); } @@ -319,11 +319,3 @@ extension AttributeOperation on web.Element { } } } - -extension on web.NodeList { - Iterable toIterable() sync* { - for (var i = 0; i < length; i++) { - yield item(i)!; - } - } -} diff --git a/packages/jaspr/lib/src/browser/utils.dart b/packages/jaspr/lib/src/browser/utils.dart new file mode 100644 index 00000000..338033ec --- /dev/null +++ b/packages/jaspr/lib/src/browser/utils.dart @@ -0,0 +1,20 @@ +import 'package:web/web.dart' as web; + +extension NodeListIterable on web.NodeList { + Iterable toIterable() sync* { + for (var i = 0; i < length; i++) { + yield item(i)!; + } + } +} + +extension NamedNodeMapMap on web.NamedNodeMap { + Map toMap() { + final map = {}; + for (var i = 0; i < length; i++) { + final item = this.item(i)!; + map[item.name] = item.value; + } + return map; + } +} diff --git a/packages/jaspr/lib/src/components/document/document_client.dart b/packages/jaspr/lib/src/components/document/document_client.dart index 5f93d40b..86274e07 100644 --- a/packages/jaspr/lib/src/components/document/document_client.dart +++ b/packages/jaspr/lib/src/components/document/document_client.dart @@ -3,6 +3,7 @@ import 'dart:js_interop'; import 'package:web/web.dart' as web; import '../../../browser.dart'; +import '../../browser/utils.dart'; abstract class Document implements Component { const factory Document.html({ @@ -175,7 +176,7 @@ class AttachAdapter { late final web.Element element = web.document.querySelector(target.name)!; - late final Map initialAttributes = {...element.attributes.toMap()}; + late final Map initialAttributes = element.attributes.toMap(); late final (web.Node, web.Node) attachWindow = () { var iterator = web.document.createNodeIterator(element, 128); @@ -246,7 +247,10 @@ class AttachAdapter { } } - var attributesToRemove = element.attributes.keys.toSet(); + var attributesToRemove = {}; + for (var i = 0; i < element.attributes.length; i++) { + attributesToRemove.add(element.attributes.item(i)!.name); + } if (attributes.isNotEmpty) { for (var attr in attributes.entries) { element.clearOrSetAttribute(attr.key, attr.value); diff --git a/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart b/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart index df40290c..5cbed3c2 100644 --- a/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart +++ b/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart @@ -3,6 +3,7 @@ import 'dart:js_interop'; import 'package:web/web.dart' as web; import '../../../browser.dart'; +import '../../browser/utils.dart'; class RawText extends StatelessComponent { const RawText(this.text, {super.key}); diff --git a/packages/jaspr/lib/src/foundation/events/events.dart b/packages/jaspr/lib/src/foundation/events/events.dart index 439710ca..b30b5a1b 100644 --- a/packages/jaspr/lib/src/foundation/events/events.dart +++ b/packages/jaspr/lib/src/foundation/events/events.dart @@ -1,11 +1,13 @@ -import 'package:web/web.dart' if (dart.library.io) 'events_vm.dart'; +import 'dart:js_interop'; + +import 'package:web/web.dart' if (dart.library.io) 'web_stub.dart' as web; import '../../components/html/html.dart'; import '../basic_types.dart'; -export 'package:web/web.dart' if (dart.library.io) 'events_vm.dart' show Event; +export 'package:web/web.dart' if (dart.library.io) 'web_stub.dart' show Event; -typedef EventCallback = void Function(Event event); +typedef EventCallback = void Function(web.Event event); typedef EventCallbacks = Map; /// Helper function to provide typed event handlers to the `events` property of html components. @@ -39,11 +41,11 @@ EventCallbacks events({ if (onChange != null) 'change': _callWithValue('onChange', onChange), }; -void Function(Event) _callWithValue(String event, void Function(V) fn) { +void Function(web.Event) _callWithValue(String event, void Function(V) fn) { return (e) { var target = e.target; var value = switch (target) { - HTMLInputElement() => () { + web.HTMLInputElement() when target.instanceOfString("HTMLInputElement") => () { var type = InputType.values.where((v) => v.name == target.type).firstOrNull; return switch (type) { InputType.checkbox || InputType.radio => target.checked, @@ -53,9 +55,11 @@ void Function(Event) _callWithValue(String event, void Function(V) fn) { _ => target.value, }; }(), - HTMLTextAreaElement() => target.value, - HTMLSelectElement() => - target.selectedOptions.toIterable().map((o) => o is HTMLOptionElement ? o.value : null).toList(), + web.HTMLTextAreaElement() when target.instanceOfString("HTMLTextAreaElement") => target.value, + web.HTMLSelectElement() when target.instanceOfString("HTMLSelectElement") => [ + for (final o in target.selectedOptions.toIterable()) + if (o is web.HTMLOptionElement && o.instanceOfString("HTMLOptionElement")) o.value, + ], _ => null, }; assert(() { @@ -69,8 +73,8 @@ void Function(Event) _callWithValue(String event, void Function(V) fn) { }; } -extension on HTMLCollection { - Iterable toIterable() sync* { +extension on web.HTMLCollection { + Iterable toIterable() sync* { for (var i = 0; i < length; i++) { yield item(i)!; } diff --git a/packages/jaspr/lib/src/foundation/events/events_vm.dart b/packages/jaspr/lib/src/foundation/events/web_stub.dart similarity index 100% rename from packages/jaspr/lib/src/foundation/events/events_vm.dart rename to packages/jaspr/lib/src/foundation/events/web_stub.dart From 9c618125d68f46ab57df3294be361cc463e6990b Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 11 Aug 2024 13:22:59 +0200 Subject: [PATCH 10/31] fix linting --- packages/jaspr/lib/src/browser/browser_binding.dart | 3 --- packages/jaspr_builder/lib/src/codec/codec_module_builder.dart | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/jaspr/lib/src/browser/browser_binding.dart b/packages/jaspr/lib/src/browser/browser_binding.dart index 8f328631..915336bf 100644 --- a/packages/jaspr/lib/src/browser/browser_binding.dart +++ b/packages/jaspr/lib/src/browser/browser_binding.dart @@ -1,8 +1,5 @@ import 'dart:async'; -import 'dart:convert'; -import 'dart:js_interop'; -import 'package:meta/meta.dart'; import 'package:web/web.dart'; import '../foundation/basic_types.dart'; diff --git a/packages/jaspr_builder/lib/src/codec/codec_module_builder.dart b/packages/jaspr_builder/lib/src/codec/codec_module_builder.dart index 3749fb27..008aafe8 100644 --- a/packages/jaspr_builder/lib/src/codec/codec_module_builder.dart +++ b/packages/jaspr_builder/lib/src/codec/codec_module_builder.dart @@ -148,7 +148,7 @@ class CodecModuleBuilder implements Builder { return (element, decoder, encoder); }) - .whereNotNull() + .nonNulls .toList(); if (annotated.isEmpty) { From a5aa63b9d0bf6f903c2ac6d456dcf527ffafc1d0 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 08:14:41 +0200 Subject: [PATCH 11/31] bump web to 1.0.0 --- packages/jaspr/pubspec.yaml | 2 +- packages/jaspr_flutter_embed/pubspec.yaml | 4 ++-- packages/jaspr_riverpod/pubspec.yaml | 2 +- packages/jaspr_router/pubspec.yaml | 2 +- packages/jaspr_serverpod/pubspec.yaml | 4 ++-- packages/jaspr_test/pubspec.yaml | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/jaspr/pubspec.yaml b/packages/jaspr/pubspec.yaml index 84424fcc..0dfb7394 100644 --- a/packages/jaspr/pubspec.yaml +++ b/packages/jaspr/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: shelf_gzip: ^4.0.0 shelf_proxy: ^1.0.1 shelf_static: ^1.1.0 - web: ^0.5.0 + web: ^1.0.0 dev_dependencies: build_runner: ^2.4.0 diff --git a/packages/jaspr_flutter_embed/pubspec.yaml b/packages/jaspr_flutter_embed/pubspec.yaml index 52f460df..60aeacaf 100644 --- a/packages/jaspr_flutter_embed/pubspec.yaml +++ b/packages/jaspr_flutter_embed/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: flutter: sdk: flutter jaspr: ^0.15.0 - web: ^0.5.0 + web: ^1.0.0 dev_dependencies: - lints: ^3.0.0 + lints: ^4.0.0 diff --git a/packages/jaspr_riverpod/pubspec.yaml b/packages/jaspr_riverpod/pubspec.yaml index 1e625db8..8e575d74 100644 --- a/packages/jaspr_riverpod/pubspec.yaml +++ b/packages/jaspr_riverpod/pubspec.yaml @@ -18,5 +18,5 @@ dependencies: dev_dependencies: jaspr_test: '>=0.1.0 <1.0.0' - lints: ^3.0.0 + lints: ^4.0.0 test: ^1.24.1 diff --git a/packages/jaspr_router/pubspec.yaml b/packages/jaspr_router/pubspec.yaml index ed21eac6..d52f1b44 100644 --- a/packages/jaspr_router/pubspec.yaml +++ b/packages/jaspr_router/pubspec.yaml @@ -16,5 +16,5 @@ dependencies: dev_dependencies: jaspr_test: '>=0.1.0 <1.0.0' - lints: ^3.0.0 + lints: ^4.0.0 test: ^1.22.0 diff --git a/packages/jaspr_serverpod/pubspec.yaml b/packages/jaspr_serverpod/pubspec.yaml index f1d49666..29e31cca 100644 --- a/packages/jaspr_serverpod/pubspec.yaml +++ b/packages/jaspr_serverpod/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: serverpod: 2.0.2 serverpod_client: 2.0.2 shelf: ^1.4.0 - web: ^0.5.0 + web: ^1.0.0 dev_dependencies: - lints: ^3.0.0 + lints: ^4.0.0 diff --git a/packages/jaspr_test/pubspec.yaml b/packages/jaspr_test/pubspec.yaml index 59f8e937..8879789e 100644 --- a/packages/jaspr_test/pubspec.yaml +++ b/packages/jaspr_test/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: jaspr: ^0.15.0 meta: ^1.7.0 test: ^1.22.0 - web: ^0.5.0 + web: ^1.0.0 dev_dependencies: - lints: ^3.0.0 + lints: ^4.0.0 From e6c986389a901995029523f9b731d5eb7b617bf0 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 08:27:27 +0200 Subject: [PATCH 12/31] fix web usage --- packages/jaspr/lib/src/browser/dom_render_object.dart | 2 +- packages/jaspr/lib/src/components/raw_text/raw_text_web.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 3e3cf8e2..d99813ee 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -291,7 +291,7 @@ class EventBinding { StreamSubscription? subscription; EventBinding(web.Element element, this.type, this.fn) { - web.EventStreamProvider(type).forElement(element).listen((event) { + subscription = web.EventStreamProvider(type).forElement(element).listen((event) { fn(event); }); } diff --git a/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart b/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart index e6b0dfc4..8c8cf71e 100644 --- a/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart +++ b/packages/jaspr/lib/src/components/raw_text/raw_text_web.dart @@ -18,7 +18,7 @@ class RawText extends StatelessComponent { @override Iterable build(BuildContext context) sync* { var fragment = web.document.createElement('template'); - fragment.innerHTML = text; + fragment.innerHTML = text.toJS; for (var node in fragment.childNodes.toIterable()) { yield RawNode.withKey(node); } From 4df838dafc1f588eb09530161be7bb6cd04ee1f2 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 08:35:02 +0200 Subject: [PATCH 13/31] fix dependency issues --- apps/dart_quotes/pubspec.lock | 40 ++++++++++++++-------------- apps/dart_quotes/pubspec.yaml | 13 +++++---- apps/dart_quotes_server/pubspec.yaml | 2 +- apps/fluttercon/pubspec.yaml | 2 +- apps/jaspr_pad/pubspec.yaml | 2 +- 5 files changed, 31 insertions(+), 28 deletions(-) diff --git a/apps/dart_quotes/pubspec.lock b/apps/dart_quotes/pubspec.lock index 3281c960..864c4fc0 100644 --- a/apps/dart_quotes/pubspec.lock +++ b/apps/dart_quotes/pubspec.lock @@ -18,13 +18,13 @@ packages: source: hosted version: "72.0.0" _flutterfire_internals: - dependency: "direct main" + dependency: transitive description: name: _flutterfire_internals - sha256: "1639d96851f9e9e215dd39c9baad56846488aef3df392cb3221f37f70beac686" + sha256: b1595874fbc8f7a50da90f5d8f327bb0bfd6a95dc906c390efe991540c3b54aa url: "https://pub.dev" source: hosted - version: "1.3.31" + version: "1.3.40" _macros: dependency: transitive description: dart @@ -194,26 +194,26 @@ packages: dependency: "direct main" description: name: cloud_firestore - sha256: ddc3d47a84ea6483f896985cadceb13038bb5caa3a357a8a51e5188bcfd32580 + sha256: a31eec60eadaa859f0677bf661d9f86ed15961c716512f64884e59edcb341472 url: "https://pub.dev" source: hosted - version: "4.17.1" + version: "5.2.1" cloud_firestore_platform_interface: dependency: transitive description: name: cloud_firestore_platform_interface - sha256: "4a0960ddd3da582654e5ce3e0c7abe9875a8e67247adbaf5a67387ecb4ff6b7c" + sha256: "3224e6158441c8897325e74f9971140cde2c85ee75a26704407a91b969b50829" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.3.1" cloud_firestore_web: dependency: transitive description: name: cloud_firestore_web - sha256: "8637bbbb3b5756236ee31591f599156b43a4f2b3bcb473d62460a7a2a416c013" + sha256: c1312945cb7dd55921bcc10445f6c9a494bc04104b7d0821c3ed577b970ab088 url: "https://pub.dev" source: hosted - version: "3.12.1" + version: "4.1.1" code_builder: dependency: transitive description: @@ -306,34 +306,34 @@ packages: dependency: "direct main" description: name: firebase_auth - sha256: "6c3b28d13d1960d9e3fb36ebae7ae5732af41410ade8ac0d546ced3ae34dd7cc" + sha256: "2457ac6cbc152fa464aad3fb35f98039b0c4ab8e9bedf476672508b291bdbc3a" url: "https://pub.dev" source: hosted - version: "4.19.3" + version: "5.1.4" firebase_auth_platform_interface: dependency: transitive description: name: firebase_auth_platform_interface - sha256: "23232537407e009e88d6b1c028c684cab1ef6511a87f7d42b340c7284e6dbcbb" + sha256: "0408e2ed74b1afa0490a93aa041fe90d7573af7ffc59a641edc6c5b5c1b8d2a4" url: "https://pub.dev" source: hosted - version: "7.2.4" + version: "7.4.3" firebase_auth_web: dependency: transitive description: name: firebase_auth_web - sha256: "2eda928d76768847fd2e7c438ecf871a93d7fe95197b928d2de510846d07d2e5" + sha256: "7e0c6d0fa8c5c1b2ae126a78f2d1a206a77a913f78d20f155487bf746162dccc" url: "https://pub.dev" source: hosted - version: "5.11.3" + version: "5.12.5" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + sha256: "3187f4f8e49968573fd7403011dca67ba95aae419bc0d8131500fae160d94f92" url: "https://pub.dev" source: hosted - version: "2.32.0" + version: "3.3.0" firebase_core_platform_interface: dependency: transitive description: @@ -840,13 +840,13 @@ packages: source: hosted version: "1.1.0" web: - dependency: transitive + dependency: "direct overridden" description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket: dependency: transitive description: diff --git a/apps/dart_quotes/pubspec.yaml b/apps/dart_quotes/pubspec.yaml index 12d03a6e..56b629d9 100644 --- a/apps/dart_quotes/pubspec.yaml +++ b/apps/dart_quotes/pubspec.yaml @@ -7,19 +7,22 @@ environment: sdk: '>=3.3.0 <4.0.0' dependencies: - firebase_core: ^2.31.0 + firebase_core: ^3.3.0 jaspr: ^0.15.0 jaspr_router: ^0.5.1 - cloud_firestore: 4.17.1 + cloud_firestore: ^5.2.1 dart_firebase_admin: ^0.3.1 - _flutterfire_internals: 1.3.31 - firebase_auth: ^4.19.3 + firebase_auth: ^5.1.4 dev_dependencies: build_runner: ^2.4.0 jaspr_web_compilers: ^4.0.10 jaspr_builder: ^0.15.0 - lints: ^3.0.0 + lints: ^4.0.0 + +dependency_overrides: + # Remove when updating firebase_auth to new version. + web: ^1.0.0 jaspr: mode: server diff --git a/apps/dart_quotes_server/pubspec.yaml b/apps/dart_quotes_server/pubspec.yaml index e3d94281..4ad07c7d 100644 --- a/apps/dart_quotes_server/pubspec.yaml +++ b/apps/dart_quotes_server/pubspec.yaml @@ -22,7 +22,7 @@ dev_dependencies: build_runner: ^2.4.0 jaspr_web_compilers: ^4.0.10 jaspr_builder: ^0.15.0 - lints: ^3.0.0 + lints: ^4.0.0 jaspr: mode: server diff --git a/apps/fluttercon/pubspec.yaml b/apps/fluttercon/pubspec.yaml index 779ba3a7..d8e918fb 100644 --- a/apps/fluttercon/pubspec.yaml +++ b/apps/fluttercon/pubspec.yaml @@ -21,7 +21,7 @@ dev_dependencies: build_runner: ^2.4.0 jaspr_web_compilers: ^4.0.10 jaspr_builder: ^0.15.0 - lints: ^3.0.0 + lints: ^4.0.0 dart_mappable_builder: ^4.2.3 jaspr: diff --git a/apps/jaspr_pad/pubspec.yaml b/apps/jaspr_pad/pubspec.yaml index cf464937..bcd51047 100644 --- a/apps/jaspr_pad/pubspec.yaml +++ b/apps/jaspr_pad/pubspec.yaml @@ -34,7 +34,7 @@ dev_dependencies: dart_mappable_builder: ^4.2.0 jaspr_builder: ^0.15.0 jaspr_test: ^0.15.0 - lints: ^3.0.0 + lints: ^4.0.0 test: ^1.25.0 yaml_writer: ^1.0.1 From ca58c26868844ef4f10d8242daeef5403188cd73 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 09:00:04 +0200 Subject: [PATCH 14/31] try console log --- packages/jaspr/lib/src/browser/dom_render_object.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index d99813ee..ef230817 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -76,7 +76,7 @@ class DomRenderObject extends RenderObject { elem = node = _createElement(tag, namespace); attributesToRemove = {}; if (kVerboseMode) { - print("Create html node: $elem"); + web.console.log(["Create html node:", elem].toJSBox); } } else { if (node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { From 7a9a8277d4b3b4d3e67b0bfbf967e23e1b69c76d Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 09:01:56 +0200 Subject: [PATCH 15/31] fix log --- packages/jaspr/lib/src/browser/dom_render_object.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index ef230817..8a84a516 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -76,7 +76,7 @@ class DomRenderObject extends RenderObject { elem = node = _createElement(tag, namespace); attributesToRemove = {}; if (kVerboseMode) { - web.console.log(["Create html node:", elem].toJSBox); + web.console.log("Create html node: $elem".toJS); } } else { if (node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { From b89deb97b8aede0afafa83d09ce1757c3db75f08 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 09:16:09 +0200 Subject: [PATCH 16/31] fix dom rendering --- packages/jaspr/lib/src/browser/dom_render_object.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 8a84a516..a457bbd9 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -79,7 +79,7 @@ class DomRenderObject extends RenderObject { web.console.log("Create html node: $elem".toJS); } } else { - if (node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { + if (!node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { elem = _createElement(tag, namespace); var old = node!; node!.parentNode!.replaceChild(elem, old); @@ -140,9 +140,9 @@ class DomRenderObject extends RenderObject { prevEventTypes?.remove(type); final currentBinding = dataEvents[type]; if (currentBinding != null) { - currentBinding.fn = fn as dynamic; + currentBinding.fn = fn; } else { - dataEvents[type] = EventBinding(elem, type, fn as dynamic); + dataEvents[type] = EventBinding(elem, type, fn); } }); prevEventTypes?.forEach((type) { From a6ceb527ec2415502feeedb7060c1c7ab248b364 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 09:33:44 +0200 Subject: [PATCH 17/31] fix linting --- packages/jaspr_router/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaspr_router/pubspec.yaml b/packages/jaspr_router/pubspec.yaml index d52f1b44..ed21eac6 100644 --- a/packages/jaspr_router/pubspec.yaml +++ b/packages/jaspr_router/pubspec.yaml @@ -16,5 +16,5 @@ dependencies: dev_dependencies: jaspr_test: '>=0.1.0 <1.0.0' - lints: ^4.0.0 + lints: ^3.0.0 test: ^1.22.0 From 238a4ca1c5a94900d62b4e0067c500e3bc7e8d93 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 23 Aug 2024 09:33:56 +0200 Subject: [PATCH 18/31] fix tests --- packages/jaspr/lib/src/foundation/events/events.dart | 7 ++----- packages/jaspr/lib/src/foundation/events/web.dart | 3 +++ packages/jaspr/lib/src/foundation/events/web_stub.dart | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 packages/jaspr/lib/src/foundation/events/web.dart diff --git a/packages/jaspr/lib/src/foundation/events/events.dart b/packages/jaspr/lib/src/foundation/events/events.dart index b30b5a1b..c4518cf3 100644 --- a/packages/jaspr/lib/src/foundation/events/events.dart +++ b/packages/jaspr/lib/src/foundation/events/events.dart @@ -1,11 +1,8 @@ -import 'dart:js_interop'; - -import 'package:web/web.dart' if (dart.library.io) 'web_stub.dart' as web; - import '../../components/html/html.dart'; import '../basic_types.dart'; +import 'web.dart' if (dart.library.io) 'web_stub.dart' as web; -export 'package:web/web.dart' if (dart.library.io) 'web_stub.dart' show Event; +export 'web.dart' if (dart.library.io) 'web_stub.dart' show Event; typedef EventCallback = void Function(web.Event event); typedef EventCallbacks = Map; diff --git a/packages/jaspr/lib/src/foundation/events/web.dart b/packages/jaspr/lib/src/foundation/events/web.dart new file mode 100644 index 00000000..34d4b1e8 --- /dev/null +++ b/packages/jaspr/lib/src/foundation/events/web.dart @@ -0,0 +1,3 @@ +export 'dart:js_interop'; + +export 'package:web/web.dart'; diff --git a/packages/jaspr/lib/src/foundation/events/web_stub.dart b/packages/jaspr/lib/src/foundation/events/web_stub.dart index 511f6800..83fe3332 100644 --- a/packages/jaspr/lib/src/foundation/events/web_stub.dart +++ b/packages/jaspr/lib/src/foundation/events/web_stub.dart @@ -34,3 +34,7 @@ abstract class HTMLCollection { } abstract class Node {} + +extension JSAnyUtilityExtension on dynamic { + bool instanceOfString(String constructorName) => true; +} From c70505848e02f78f98e0516647cbf8690e147605 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 11 Sep 2024 21:09:15 +0200 Subject: [PATCH 19/31] Fix tests when running with package:web --- .../lib/src/foundation/events/events.dart | 18 ++++++++++----- .../lib/src/foundation/events/web_stub.dart | 2 ++ .../jaspr/test/browser/head/head_app.dart | 1 - .../test/browser/head/head_browser_test.dart | 22 ++++++++++--------- .../test/imports/sources/imports.dart | 2 +- .../lib/src/platform/platform_web.dart | 10 +++++---- packages/jaspr_router/pubspec.yaml | 1 + .../lib/src/testers/component_tester.dart | 15 +++++++++---- .../lib/src/testers/fake_event_vm.dart | 14 ++++++++++++ .../lib/src/testers/fake_event_web.dart | 5 +++++ 10 files changed, 65 insertions(+), 25 deletions(-) create mode 100644 packages/jaspr_test/lib/src/testers/fake_event_vm.dart create mode 100644 packages/jaspr_test/lib/src/testers/fake_event_web.dart diff --git a/packages/jaspr/lib/src/foundation/events/events.dart b/packages/jaspr/lib/src/foundation/events/events.dart index c4518cf3..46572568 100644 --- a/packages/jaspr/lib/src/foundation/events/events.dart +++ b/packages/jaspr/lib/src/foundation/events/events.dart @@ -42,8 +42,10 @@ void Function(web.Event) _callWithValue(String event, void Function(V) fn) { return (e) { var target = e.target; var value = switch (target) { - web.HTMLInputElement() when target.instanceOfString("HTMLInputElement") => () { - var type = InputType.values.where((v) => v.name == target.type).firstOrNull; + web.HTMLInputElement() when target.instanceOfString("HTMLInputElement") => + () { + var type = + InputType.values.where((v) => v.name == target.type).firstOrNull; return switch (type) { InputType.checkbox || InputType.radio => target.checked, InputType.number => target.valueAsNumber, @@ -52,10 +54,16 @@ void Function(web.Event) _callWithValue(String event, void Function(V) fn) { _ => target.value, }; }(), - web.HTMLTextAreaElement() when target.instanceOfString("HTMLTextAreaElement") => target.value, - web.HTMLSelectElement() when target.instanceOfString("HTMLSelectElement") => [ + web.HTMLTextAreaElement() + when target.instanceOfString("HTMLTextAreaElement") => + target.value, + web.HTMLSelectElement() + when target.instanceOfString("HTMLSelectElement") => + [ for (final o in target.selectedOptions.toIterable()) - if (o is web.HTMLOptionElement && o.instanceOfString("HTMLOptionElement")) o.value, + if (o is web.HTMLOptionElement && + o.instanceOfString("HTMLOptionElement")) + o.value, ], _ => null, }; diff --git a/packages/jaspr/lib/src/foundation/events/web_stub.dart b/packages/jaspr/lib/src/foundation/events/web_stub.dart index 83fe3332..c7ff9230 100644 --- a/packages/jaspr/lib/src/foundation/events/web_stub.dart +++ b/packages/jaspr/lib/src/foundation/events/web_stub.dart @@ -1,5 +1,7 @@ abstract class Event { Node get target; + + void preventDefault(); } abstract class HTMLInputElement implements Node { diff --git a/packages/jaspr/test/browser/head/head_app.dart b/packages/jaspr/test/browser/head/head_app.dart index 9f8d04a5..e80e0fb8 100644 --- a/packages/jaspr/test/browser/head/head_app.dart +++ b/packages/jaspr/test/browser/head/head_app.dart @@ -3,7 +3,6 @@ import 'package:jaspr/jaspr.dart'; class App extends StatelessComponent { @override Iterable build(BuildContext context) sync* { - yield Document.head(title: 'a', meta: {'test': 'b', 'c': 'd'}); yield Page(); } } diff --git a/packages/jaspr/test/browser/head/head_browser_test.dart b/packages/jaspr/test/browser/head/head_browser_test.dart index 889417b5..dd143102 100644 --- a/packages/jaspr/test/browser/head/head_browser_test.dart +++ b/packages/jaspr/test/browser/head/head_browser_test.dart @@ -1,9 +1,8 @@ @TestOn('browser') -import 'dart:html'; - import 'package:jaspr/src/components/document/document_client.dart'; import 'package:jaspr_test/browser_test.dart'; +import 'package:web/web.dart'; import 'head_app.dart'; @@ -12,20 +11,23 @@ void main() { testBrowser('should serve component', (tester) async { await tester.pumpComponent(App()); - var nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); + var nodes = + AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); - expect(nodes, hasLength(3)); - expect((nodes[0] as Element).outerHtml, equals('c')); - expect((nodes[1] as Element).outerHtml, equals('')); - expect((nodes[2] as Element).outerHtml, equals('')); + expect(nodes, [ + _hasOuterHtml('c'), + _hasOuterHtml('') + ]); await tester.click(find.tag('button')); nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); - expect((nodes[0] as Element).outerHtml, equals('d')); - expect((nodes[1] as Element).outerHtml, equals('')); - expect((nodes[2] as Element).outerHtml, equals('')); + expect(nodes, [_hasOuterHtml('d')]); }); }); } + +Matcher _hasOuterHtml(outer) { + return isA().having((e) => e.outerHTML, 'outerHTML', outer); +} diff --git a/packages/jaspr_builder/test/imports/sources/imports.dart b/packages/jaspr_builder/test/imports/sources/imports.dart index 3f3b7ebc..b8d992b2 100644 --- a/packages/jaspr_builder/test/imports/sources/imports.dart +++ b/packages/jaspr_builder/test/imports/sources/imports.dart @@ -32,7 +32,7 @@ final importsOutput = { 'export \'generated/imports/_web.dart\' if (dart.library.io) \'generated/imports/_stubs.dart\'\n' ' show window, Window, WindowOrStubbed;\n' '\n' - 'export \'generated/imports/_vm.dart\' if (dart.library.html) \'generated/imports/_stubs.dart\'\n' + 'export \'generated/imports/_vm.dart\' if (dart.library.js_interop) \'generated/imports/_stubs.dart\'\n' ' show HttpServer, HttpServerOrStubbed;\n' '' }; diff --git a/packages/jaspr_router/lib/src/platform/platform_web.dart b/packages/jaspr_router/lib/src/platform/platform_web.dart index 4df59994..38a8471a 100644 --- a/packages/jaspr_router/lib/src/platform/platform_web.dart +++ b/packages/jaspr_router/lib/src/platform/platform_web.dart @@ -1,6 +1,7 @@ -import 'dart:html'; +import 'dart:js_interop'; import 'package:jaspr/jaspr.dart'; +import 'package:web/web.dart'; import '../route.dart'; import 'platform.dart'; @@ -17,7 +18,8 @@ class PlatformRouterImpl implements PlatformRouter { /// Accesses the window.history api class HistoryManagerImpl implements HistoryManager { @override - void init(AppBinding binding, {void Function(Object? state, {String? url})? onChangeState}) { + void init(AppBinding binding, + {void Function(Object? state, {String? url})? onChangeState}) { if (onChangeState != null) { window.onPopState.listen((event) { onChangeState(window.history.state); @@ -27,12 +29,12 @@ class HistoryManagerImpl implements HistoryManager { @override void push(String url, {String? title, Object? data}) { - window.history.pushState(data, title ?? url, url); + window.history.pushState(data.jsify(), title ?? url, url); } @override void replace(String url, {String? title, Object? data}) { - window.history.replaceState(data, title ?? url, url); + window.history.replaceState(data.jsify(), title ?? url, url); } @override diff --git a/packages/jaspr_router/pubspec.yaml b/packages/jaspr_router/pubspec.yaml index ed21eac6..d5939dd6 100644 --- a/packages/jaspr_router/pubspec.yaml +++ b/packages/jaspr_router/pubspec.yaml @@ -13,6 +13,7 @@ environment: dependencies: jaspr: ^0.15.0 + web: ^1.0.0 dev_dependencies: jaspr_test: '>=0.1.0 <1.0.0' diff --git a/packages/jaspr_test/lib/src/testers/component_tester.dart b/packages/jaspr_test/lib/src/testers/component_tester.dart index a55c4bdf..6d28388d 100644 --- a/packages/jaspr_test/lib/src/testers/component_tester.dart +++ b/packages/jaspr_test/lib/src/testers/component_tester.dart @@ -8,6 +8,7 @@ import 'package:test/test.dart'; import '../binding.dart'; import '../finders.dart'; +import 'fake_event_web.dart' if (dart.library.io) 'fake_event_vm.dart'; @isTest void testComponents( @@ -51,7 +52,7 @@ class ComponentTester { /// Simulates a 'click' event on the given element /// and pumps the next frame. Future click(Finder finder, {bool pump = true}) async { - dispatchEvent(finder, 'click', null); + dispatchEvent(finder, 'click', fakeEvent()); if (pump) { await pumpEventQueue(); } @@ -108,7 +109,8 @@ class TestComponentsBinding extends AppBinding with ComponentsBinding { final Uri? _currentUri; @override - Uri get currentUri => _currentUri ?? (throw 'Did not call setUp() with currentUri provided.'); + Uri get currentUri => + _currentUri ?? (throw 'Did not call setUp() with currentUri provided.'); final bool _isClient; @override @@ -153,8 +155,13 @@ class TestRenderObject extends RenderObject { } @override - void updateElement(String tag, String? id, String? classes, Map? styles, - Map? attributes, Map? events) { + void updateElement( + String tag, + String? id, + String? classes, + Map? styles, + Map? attributes, + Map? events) { this ..tag = tag ..id = id diff --git a/packages/jaspr_test/lib/src/testers/fake_event_vm.dart b/packages/jaspr_test/lib/src/testers/fake_event_vm.dart new file mode 100644 index 00000000..5c885004 --- /dev/null +++ b/packages/jaspr_test/lib/src/testers/fake_event_vm.dart @@ -0,0 +1,14 @@ +// ignore: implementation_imports +import 'package:jaspr/src/foundation/events/web_stub.dart'; + +Event fakeEvent() { + return _FakeEvent(); +} + +final class _FakeEvent implements Event { + @override + void preventDefault() {} + + @override + Node get target => throw UnimplementedError(); +} diff --git a/packages/jaspr_test/lib/src/testers/fake_event_web.dart b/packages/jaspr_test/lib/src/testers/fake_event_web.dart new file mode 100644 index 00000000..e8454836 --- /dev/null +++ b/packages/jaspr_test/lib/src/testers/fake_event_web.dart @@ -0,0 +1,5 @@ +import 'package:web/web.dart'; + +Event fakeEvent() { + return Event('click'); +} From f34b1bb9dbd5cf4b91013a7502b210cc90e9145a Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Thu, 12 Sep 2024 22:03:34 +0200 Subject: [PATCH 20/31] Reformat with line length of 120 --- .../lib/src/foundation/events/events.dart | 18 +++++------------- .../test/browser/head/head_browser_test.dart | 8 ++------ .../lib/src/platform/platform_web.dart | 3 +-- .../lib/src/testers/component_tester.dart | 12 +++--------- 4 files changed, 11 insertions(+), 30 deletions(-) diff --git a/packages/jaspr/lib/src/foundation/events/events.dart b/packages/jaspr/lib/src/foundation/events/events.dart index 46572568..c4518cf3 100644 --- a/packages/jaspr/lib/src/foundation/events/events.dart +++ b/packages/jaspr/lib/src/foundation/events/events.dart @@ -42,10 +42,8 @@ void Function(web.Event) _callWithValue(String event, void Function(V) fn) { return (e) { var target = e.target; var value = switch (target) { - web.HTMLInputElement() when target.instanceOfString("HTMLInputElement") => - () { - var type = - InputType.values.where((v) => v.name == target.type).firstOrNull; + web.HTMLInputElement() when target.instanceOfString("HTMLInputElement") => () { + var type = InputType.values.where((v) => v.name == target.type).firstOrNull; return switch (type) { InputType.checkbox || InputType.radio => target.checked, InputType.number => target.valueAsNumber, @@ -54,16 +52,10 @@ void Function(web.Event) _callWithValue(String event, void Function(V) fn) { _ => target.value, }; }(), - web.HTMLTextAreaElement() - when target.instanceOfString("HTMLTextAreaElement") => - target.value, - web.HTMLSelectElement() - when target.instanceOfString("HTMLSelectElement") => - [ + web.HTMLTextAreaElement() when target.instanceOfString("HTMLTextAreaElement") => target.value, + web.HTMLSelectElement() when target.instanceOfString("HTMLSelectElement") => [ for (final o in target.selectedOptions.toIterable()) - if (o is web.HTMLOptionElement && - o.instanceOfString("HTMLOptionElement")) - o.value, + if (o is web.HTMLOptionElement && o.instanceOfString("HTMLOptionElement")) o.value, ], _ => null, }; diff --git a/packages/jaspr/test/browser/head/head_browser_test.dart b/packages/jaspr/test/browser/head/head_browser_test.dart index dd143102..0cd96d86 100644 --- a/packages/jaspr/test/browser/head/head_browser_test.dart +++ b/packages/jaspr/test/browser/head/head_browser_test.dart @@ -11,13 +11,9 @@ void main() { testBrowser('should serve component', (tester) async { await tester.pumpComponent(App()); - var nodes = - AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); + var nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); - expect(nodes, [ - _hasOuterHtml('c'), - _hasOuterHtml('') - ]); + expect(nodes, [_hasOuterHtml('c'), _hasOuterHtml('')]); await tester.click(find.tag('button')); diff --git a/packages/jaspr_router/lib/src/platform/platform_web.dart b/packages/jaspr_router/lib/src/platform/platform_web.dart index 38a8471a..5e4159f6 100644 --- a/packages/jaspr_router/lib/src/platform/platform_web.dart +++ b/packages/jaspr_router/lib/src/platform/platform_web.dart @@ -18,8 +18,7 @@ class PlatformRouterImpl implements PlatformRouter { /// Accesses the window.history api class HistoryManagerImpl implements HistoryManager { @override - void init(AppBinding binding, - {void Function(Object? state, {String? url})? onChangeState}) { + void init(AppBinding binding, {void Function(Object? state, {String? url})? onChangeState}) { if (onChangeState != null) { window.onPopState.listen((event) { onChangeState(window.history.state); diff --git a/packages/jaspr_test/lib/src/testers/component_tester.dart b/packages/jaspr_test/lib/src/testers/component_tester.dart index 6d28388d..f4fc5bcd 100644 --- a/packages/jaspr_test/lib/src/testers/component_tester.dart +++ b/packages/jaspr_test/lib/src/testers/component_tester.dart @@ -109,8 +109,7 @@ class TestComponentsBinding extends AppBinding with ComponentsBinding { final Uri? _currentUri; @override - Uri get currentUri => - _currentUri ?? (throw 'Did not call setUp() with currentUri provided.'); + Uri get currentUri => _currentUri ?? (throw 'Did not call setUp() with currentUri provided.'); final bool _isClient; @override @@ -155,13 +154,8 @@ class TestRenderObject extends RenderObject { } @override - void updateElement( - String tag, - String? id, - String? classes, - Map? styles, - Map? attributes, - Map? events) { + void updateElement(String tag, String? id, String? classes, Map? styles, + Map? attributes, Map? events) { this ..tag = tag ..id = id From f54cc8e6a00de4aa9cbe99b0fc24a486d42f1e3a Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sat, 14 Sep 2024 11:09:58 +0200 Subject: [PATCH 21/31] bootstrap project --- apps/dart_quotes/pubspec.lock | 12 +-- apps/dart_quotes_server/pubspec.lock | 16 ++-- apps/fluttercon/pubspec.lock | 4 +- examples/flutter_embedding/pubspec.lock | 14 ++-- examples/flutter_plugin_interop/pubspec.lock | 17 ++-- examples/package_riverpod/pubspec.lock | 87 ++++++++++++++++++++ experiments/mobx_hooks/pubspec.lock | 4 +- experiments/preload_images/pubspec.lock | 8 ++ experiments/scoped_styles/pubspec.lock | 8 ++ 9 files changed, 136 insertions(+), 34 deletions(-) diff --git a/apps/dart_quotes/pubspec.lock b/apps/dart_quotes/pubspec.lock index 4187e056..bd972550 100644 --- a/apps/dart_quotes/pubspec.lock +++ b/apps/dart_quotes/pubspec.lock @@ -558,10 +558,10 @@ packages: dependency: "direct dev" description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" logging: dependency: transitive description: @@ -779,10 +779,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" term_glyph: dependency: transitive description: @@ -795,10 +795,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.3" timing: dependency: transitive description: diff --git a/apps/dart_quotes_server/pubspec.lock b/apps/dart_quotes_server/pubspec.lock index f43244a6..8c9c9112 100644 --- a/apps/dart_quotes_server/pubspec.lock +++ b/apps/dart_quotes_server/pubspec.lock @@ -321,10 +321,10 @@ packages: dependency: transitive description: name: file_picker - sha256: "825aec673606875c33cd8d3c4083f1a3c3999015a84178b317b7ef396b7384f3" + sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12" url: "https://pub.dev" source: hosted - version: "8.0.7" + version: "8.1.2" file_selector_linux: dependency: transitive description: @@ -687,10 +687,10 @@ packages: dependency: "direct dev" description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" logging: dependency: transitive description: @@ -1300,18 +1300,18 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.0" win32: dependency: transitive description: diff --git a/apps/fluttercon/pubspec.lock b/apps/fluttercon/pubspec.lock index fe8b1945..ce436ef6 100644 --- a/apps/fluttercon/pubspec.lock +++ b/apps/fluttercon/pubspec.lock @@ -401,10 +401,10 @@ packages: dependency: "direct dev" description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" logging: dependency: transitive description: diff --git a/examples/flutter_embedding/pubspec.lock b/examples/flutter_embedding/pubspec.lock index cf9e7023..26350bab 100644 --- a/examples/flutter_embedding/pubspec.lock +++ b/examples/flutter_embedding/pubspec.lock @@ -673,10 +673,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" term_glyph: dependency: transitive description: @@ -689,10 +689,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.3" timing: dependency: transitive description: @@ -737,10 +737,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket: dependency: transitive description: @@ -766,5 +766,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.5.0-259.0.dev <3.6.0" + dart: ">=3.5.0-259.0.dev <3.7.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/examples/flutter_plugin_interop/pubspec.lock b/examples/flutter_plugin_interop/pubspec.lock index a202c650..96ae25d2 100644 --- a/examples/flutter_plugin_interop/pubspec.lock +++ b/examples/flutter_plugin_interop/pubspec.lock @@ -430,10 +430,9 @@ packages: jaspr_web_compilers: dependency: "direct dev" description: - name: jaspr_web_compilers - sha256: "068e42fbb89e5a7b7d47849886669b80a0d9e011f76bbfd85f6444d0b80cc4f4" - url: "https://pub.dev" - source: hosted + path: "../../modules/build/jaspr_web_compilers" + relative: true + source: path version: "4.0.10" js: dependency: transitive @@ -780,10 +779,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" term_glyph: dependency: transitive description: @@ -796,10 +795,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.3" timing: dependency: transitive description: @@ -881,5 +880,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.5.0-259.0.dev <3.6.0" + dart: ">=3.5.0-259.0.dev <3.7.0" flutter: ">=3.22.0" diff --git a/examples/package_riverpod/pubspec.lock b/examples/package_riverpod/pubspec.lock index 65d1498a..3de380f0 100644 --- a/examples/package_riverpod/pubspec.lock +++ b/examples/package_riverpod/pubspec.lock @@ -22,6 +22,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.8.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" + url: "https://pub.dev" + source: hosted + version: "0.11.3" archive: dependency: transitive description: @@ -158,6 +166,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + ci: + dependency: transitive + description: + name: ci + sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13" + url: "https://pub.dev" + source: hosted + version: "0.1.0" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" code_builder: dependency: transitive description: @@ -198,6 +222,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + custom_lint: + dependency: transitive + description: + name: custom_lint + sha256: "4939d89e580c36215e48a7de8fd92f22c79dcc3eb11fda84f3402b3b45aec663" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + custom_lint_builder: + dependency: transitive + description: + name: custom_lint_builder + sha256: d9e5bb63ed52c1d006f5a1828992ba6de124c27a531e8fba0a31afffa81621b3 + url: "https://pub.dev" + source: hosted + version: "0.6.5" + custom_lint_core: + dependency: transitive + description: + name: custom_lint_core + sha256: "4ddbbdaa774265de44c97054dcec058a83d9081d071785ece601e348c18c267d" + url: "https://pub.dev" + source: hosted + version: "0.6.5" dart_style: dependency: transitive description: @@ -222,6 +270,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + freezed_annotation: + dependency: transitive + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" frontend_server_client: dependency: transitive description: @@ -308,6 +364,13 @@ packages: relative: true source: path version: "0.15.1" + jaspr_lints: + dependency: "direct overridden" + description: + path: "../../packages/jaspr_lints" + relative: true + source: path + version: "0.1.1" jaspr_riverpod: dependency: "direct main" description: @@ -435,6 +498,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.5.1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" scratch_space: dependency: transitive description: @@ -507,6 +578,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: @@ -579,6 +658,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 + url: "https://pub.dev" + source: hosted + version: "4.5.0" vm_service: dependency: transitive description: diff --git a/experiments/mobx_hooks/pubspec.lock b/experiments/mobx_hooks/pubspec.lock index 71e76dbd..1418a15f 100644 --- a/experiments/mobx_hooks/pubspec.lock +++ b/experiments/mobx_hooks/pubspec.lock @@ -619,10 +619,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket_channel: dependency: transitive description: diff --git a/experiments/preload_images/pubspec.lock b/experiments/preload_images/pubspec.lock index 8bdbfbec..95d48e75 100644 --- a/experiments/preload_images/pubspec.lock +++ b/experiments/preload_images/pubspec.lock @@ -543,6 +543,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + url: "https://pub.dev" + source: hosted + version: "1.0.0" web_socket_channel: dependency: transitive description: diff --git a/experiments/scoped_styles/pubspec.lock b/experiments/scoped_styles/pubspec.lock index ff1a04e2..2e318d17 100644 --- a/experiments/scoped_styles/pubspec.lock +++ b/experiments/scoped_styles/pubspec.lock @@ -552,6 +552,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 + url: "https://pub.dev" + source: hosted + version: "1.0.0" web_socket_channel: dependency: transitive description: From babca1163cc8ac9314cbfb5bf92bfd4f7a13e3db Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sat, 14 Sep 2024 12:56:27 +0200 Subject: [PATCH 22/31] fix Document.head on web --- apps/dart_quotes/lib/data/firebase.imports.dart | 2 +- .../lib/src/components/document/document_client.dart | 5 ++++- packages/jaspr/test/browser/head/head_app.dart | 1 + .../jaspr/test/browser/head/head_browser_test.dart | 12 ++++++++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/dart_quotes/lib/data/firebase.imports.dart b/apps/dart_quotes/lib/data/firebase.imports.dart index d390ddaf..b6639c66 100644 --- a/apps/dart_quotes/lib/data/firebase.imports.dart +++ b/apps/dart_quotes/lib/data/firebase.imports.dart @@ -18,5 +18,5 @@ export '../generated/imports/_web.dart' if (dart.library.io) '../generated/impor DefaultFirebaseOptions, DefaultFirebaseOptionsOrStubbed; -export '../generated/imports/_vm.dart' if (dart.library.html) '../generated/imports/_stubs.dart' +export '../generated/imports/_vm.dart' if (dart.library.js_interop) '../generated/imports/_stubs.dart' show FirebaseAdminApp, Credential, FirebaseAdminAppOrStubbed, CredentialOrStubbed, Firestore, FirestoreOrStubbed; diff --git a/packages/jaspr/lib/src/components/document/document_client.dart b/packages/jaspr/lib/src/components/document/document_client.dart index f4ace66d..dd0706bf 100644 --- a/packages/jaspr/lib/src/components/document/document_client.dart +++ b/packages/jaspr/lib/src/components/document/document_client.dart @@ -275,7 +275,10 @@ class AttachAdapter { return switch (node as web.Element) { web.Element(id: String id) when id.isNotEmpty => id, web.Element(tagName: "TITLE" || "BASE") => '__${node.tagName}', - web.Element(tagName: "META", attributes: {'name': String name}) => '__meta:$name', + web.Element(tagName: "META") => switch (node.attributes.getNamedItem("name")) { + web.Attr name => '__meta:${name.value}', + _ => null + }, _ => null, }; } diff --git a/packages/jaspr/test/browser/head/head_app.dart b/packages/jaspr/test/browser/head/head_app.dart index e80e0fb8..9f8d04a5 100644 --- a/packages/jaspr/test/browser/head/head_app.dart +++ b/packages/jaspr/test/browser/head/head_app.dart @@ -3,6 +3,7 @@ import 'package:jaspr/jaspr.dart'; class App extends StatelessComponent { @override Iterable build(BuildContext context) sync* { + yield Document.head(title: 'a', meta: {'test': 'b', 'c': 'd'}); yield Page(); } } diff --git a/packages/jaspr/test/browser/head/head_browser_test.dart b/packages/jaspr/test/browser/head/head_browser_test.dart index 0cd96d86..a5ceb0bd 100644 --- a/packages/jaspr/test/browser/head/head_browser_test.dart +++ b/packages/jaspr/test/browser/head/head_browser_test.dart @@ -13,13 +13,21 @@ void main() { var nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); - expect(nodes, [_hasOuterHtml('c'), _hasOuterHtml('')]); + expect(nodes, [ + _hasOuterHtml('c'), + _hasOuterHtml(''), + _hasOuterHtml(''), + ]); await tester.click(find.tag('button')); nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); - expect(nodes, [_hasOuterHtml('d')]); + expect(nodes, [ + _hasOuterHtml('d'), + _hasOuterHtml(''), + _hasOuterHtml(''), + ]); }); }); } From 616ddfa24fbcf25b67c0a2bdc77bae70b7e4d79a Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sat, 14 Sep 2024 13:02:24 +0200 Subject: [PATCH 23/31] add hasOuterHtml matcher to jaspr_test --- .../test/browser/head/head_browser_test.dart | 17 ++++++----------- packages/jaspr_test/lib/browser_test.dart | 1 + .../jaspr_test/lib/src/browser_matchers.dart | 12 ++++++++++++ 3 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 packages/jaspr_test/lib/src/browser_matchers.dart diff --git a/packages/jaspr/test/browser/head/head_browser_test.dart b/packages/jaspr/test/browser/head/head_browser_test.dart index a5ceb0bd..22298b47 100644 --- a/packages/jaspr/test/browser/head/head_browser_test.dart +++ b/packages/jaspr/test/browser/head/head_browser_test.dart @@ -2,7 +2,6 @@ import 'package:jaspr/src/components/document/document_client.dart'; import 'package:jaspr_test/browser_test.dart'; -import 'package:web/web.dart'; import 'head_app.dart'; @@ -14,9 +13,9 @@ void main() { var nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); expect(nodes, [ - _hasOuterHtml('c'), - _hasOuterHtml(''), - _hasOuterHtml(''), + hasOuterHtml('c'), + hasOuterHtml(''), + hasOuterHtml(''), ]); await tester.click(find.tag('button')); @@ -24,14 +23,10 @@ void main() { nodes = AttachAdapter.instanceFor(AttachTarget.head).liveNodes.toList(); expect(nodes, [ - _hasOuterHtml('d'), - _hasOuterHtml(''), - _hasOuterHtml(''), + hasOuterHtml('d'), + hasOuterHtml(''), + hasOuterHtml(''), ]); }); }); } - -Matcher _hasOuterHtml(outer) { - return isA().having((e) => e.outerHTML, 'outerHTML', outer); -} diff --git a/packages/jaspr_test/lib/browser_test.dart b/packages/jaspr_test/lib/browser_test.dart index 0ef1562f..79505785 100644 --- a/packages/jaspr_test/lib/browser_test.dart +++ b/packages/jaspr_test/lib/browser_test.dart @@ -1,2 +1,3 @@ export 'jaspr_test.dart'; +export 'src/browser_matchers.dart'; export 'src/testers/browser_tester.dart'; diff --git a/packages/jaspr_test/lib/src/browser_matchers.dart b/packages/jaspr_test/lib/src/browser_matchers.dart new file mode 100644 index 00000000..ae8cad0d --- /dev/null +++ b/packages/jaspr_test/lib/src/browser_matchers.dart @@ -0,0 +1,12 @@ +import 'dart:js_interop'; + +import 'package:web/web.dart' as web; + +import '../jaspr_test.dart'; + +/// A matcher for checking the [outerHTML] of a [HTMLElement]. +Matcher hasOuterHtml(String outerHtml) { + return isA() + .having((e) => e.instanceOfString('HTMLElement'), 'instanceOf(HTMLElement)', isTrue) + .having((e) => e.outerHTML, 'outerHTML', outerHtml); +} From 0ec5d4afa8b5e8cf50ed20f4df50d05996ca7055 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sat, 14 Sep 2024 13:04:56 +0200 Subject: [PATCH 24/31] update changelog --- packages/jaspr/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/jaspr/CHANGELOG.md b/packages/jaspr/CHANGELOG.md index f7b1d794..bc73aa37 100644 --- a/packages/jaspr/CHANGELOG.md +++ b/packages/jaspr/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased breaking + +- **BREAKING** Migrate all packages to `package:web`, replacing `dart:html`. + ## 0.15.1 - Include and setup `jaspr_lints` in newly created projects. From fc401ac164dfede0b83e80ae18033b82c3c23aac Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sat, 14 Sep 2024 13:46:19 +0200 Subject: [PATCH 25/31] update changelog --- packages/jaspr_flutter_embed/CHANGELOG.md | 4 ++++ packages/jaspr_router/CHANGELOG.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/jaspr_flutter_embed/CHANGELOG.md b/packages/jaspr_flutter_embed/CHANGELOG.md index f30b14d2..e8227c28 100644 --- a/packages/jaspr_flutter_embed/CHANGELOG.md +++ b/packages/jaspr_flutter_embed/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased breaking + +- **BREAKING** Migrate to `package:web`. + ## 0.3.4 - `jaspr` upgraded to `0.15.0` diff --git a/packages/jaspr_router/CHANGELOG.md b/packages/jaspr_router/CHANGELOG.md index a7bc8c86..c979523a 100644 --- a/packages/jaspr_router/CHANGELOG.md +++ b/packages/jaspr_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased breaking + +- **BREAKING** Migrate to `package:web`. + ## 0.5.1 - `jaspr` upgraded to `0.15.0` From 2b2cf11532175b9f5eca92764999f2307182e2fa Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Fri, 27 Sep 2024 15:20:00 +0200 Subject: [PATCH 26/31] fix kIsWeb for wasm --- packages/jaspr/lib/src/foundation/constants.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaspr/lib/src/foundation/constants.dart b/packages/jaspr/lib/src/foundation/constants.dart index 3fe82392..3982ef67 100644 --- a/packages/jaspr/lib/src/foundation/constants.dart +++ b/packages/jaspr/lib/src/foundation/constants.dart @@ -71,7 +71,7 @@ const double precisionErrorTolerance = 1e-10; /// backed by the same kind of object. Thus a double `0.0` is identical /// to an integer `0`. This is not true for Dart code running in AOT or on the /// VM. -const bool kIsWeb = identical(0, 0.0); +const bool kIsWeb = bool.fromEnvironment('dart.library.js_util'); /// A constant that is true if the application is running in static-site-generation mode. const bool kGenerateMode = bool.fromEnvironment('jaspr.flags.generate'); From 321f6dd4973ca34a405cfb1b5a2222dde377454b Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sat, 28 Sep 2024 21:33:29 +0200 Subject: [PATCH 27/31] fix kIsWeb and add kIsWasm --- .../jaspr/lib/src/foundation/constants.dart | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/packages/jaspr/lib/src/foundation/constants.dart b/packages/jaspr/lib/src/foundation/constants.dart index 3982ef67..c65e497e 100644 --- a/packages/jaspr/lib/src/foundation/constants.dart +++ b/packages/jaspr/lib/src/foundation/constants.dart @@ -57,21 +57,11 @@ const bool kVerboseMode = bool.fromEnvironment('jaspr.flags.verbose'); /// * [kReleaseMode], which is true in release builds. const bool kDebugMode = !kReleaseMode; -/// The epsilon of tolerable double precision error. -/// -/// This is used in various places in the framework to allow for floating point -/// precision loss in calculations. Differences below this threshold are safe to -/// disregard. -const double precisionErrorTolerance = 1e-10; - /// A constant that is true if the application was compiled to run on the web. -/// -/// This implementation takes advantage of the fact that JavaScript does not -/// support integers. In this environment, Dart's doubles and ints are -/// backed by the same kind of object. Thus a double `0.0` is identical -/// to an integer `0`. This is not true for Dart code running in AOT or on the -/// VM. -const bool kIsWeb = bool.fromEnvironment('dart.library.js_util'); +const bool kIsWeb = bool.fromEnvironment('dart.library.js_interop'); + +/// A constant that is true if the application was compiled to WebAssembly. +const bool kIsWasm = bool.fromEnvironment('dart.tool.dart2wasm'); /// A constant that is true if the application is running in static-site-generation mode. const bool kGenerateMode = bool.fromEnvironment('jaspr.flags.generate'); From a315a7ed9542684d001a2a70dafce6bb42067e0d Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 29 Sep 2024 12:50:06 +0200 Subject: [PATCH 28/31] fix web types --- packages/jaspr/lib/src/browser/clients.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaspr/lib/src/browser/clients.dart b/packages/jaspr/lib/src/browser/clients.dart index d6c45d23..85ac1a73 100644 --- a/packages/jaspr/lib/src/browser/clients.dart +++ b/packages/jaspr/lib/src/browser/clients.dart @@ -78,7 +78,7 @@ Future _runBuilder( String name, FutureOr builder, Map params, - (Node, Node) between, + (web.Node, web.Node) between, ) async { if (builder is Future) { builder = await builder; From 7e45d63df847e69a7b74f717b13b6140f7cce635 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Sun, 29 Sep 2024 14:27:58 +0200 Subject: [PATCH 29/31] add events test --- packages/jaspr/test/browser/events_test.dart | 90 +++++++++++++++++++ .../lib/src/testers/browser_tester.dart | 51 +++++++++-- 2 files changed, 134 insertions(+), 7 deletions(-) create mode 100644 packages/jaspr/test/browser/events_test.dart diff --git a/packages/jaspr/test/browser/events_test.dart b/packages/jaspr/test/browser/events_test.dart new file mode 100644 index 00000000..ac607e9a --- /dev/null +++ b/packages/jaspr/test/browser/events_test.dart @@ -0,0 +1,90 @@ +@TestOn('browser') + +import 'package:jaspr/jaspr.dart'; +import 'package:jaspr_test/browser_test.dart'; + +void main() { + group('events', () { + testBrowser('handle click events', (tester) async { + int clicked = 0; + + await tester.pumpComponent(button(onClick: () { + clicked++; + }, [])); + + await tester.click(find.tag('button')); + expect(clicked, equals(1)); + }); + + testBrowser('handle input:checkbox events', (tester) async { + bool checkedInput = false; + bool checkedChange = false; + + await tester.pumpComponent(input( + type: InputType.checkbox, + onInput: (value) => checkedInput = value, + onChange: (value) => checkedChange = value, + [], + )); + + await tester.input(find.tag('input'), checked: true); + expect(checkedInput, isTrue); + + await tester.change(find.tag('input'), checked: true); + expect(checkedChange, isTrue); + }); + + testBrowser('handle input:number events', (tester) async { + double numberInput = 0; + double numberChange = 0; + + await tester.pumpComponent(input( + type: InputType.number, + onInput: (value) => numberInput = value, + onChange: (value) => numberChange = value, + [], + )); + + await tester.input(find.tag('input'), valueAsNumber: 2.0); + expect(numberInput, equals(2.0)); + + await tester.change(find.tag('input'), valueAsNumber: 2.0); + expect(numberChange, equals(2.0)); + }); + + testBrowser('handle input text events', (tester) async { + String textInput = ""; + String textChange = ""; + + await tester.pumpComponent(input( + type: InputType.text, + onInput: (value) => textInput = value, + onChange: (value) => textChange = value, + [], + )); + + await tester.input(find.tag('input'), value: "Hello"); + expect(textInput, equals("Hello")); + + await tester.change(find.tag('input'), value: "World"); + expect(textChange, equals("World")); + }); + + testBrowser('handle textarea events', (tester) async { + String textInput = ""; + String textChange = ""; + + await tester.pumpComponent(textarea( + onInput: (value) => textInput = value, + onChange: (value) => textChange = value, + [], + )); + + await tester.input(find.tag('textarea'), value: "Hello"); + expect(textInput, equals("Hello")); + + await tester.change(find.tag('textarea'), value: "World"); + expect(textChange, equals("World")); + }); + }); +} diff --git a/packages/jaspr_test/lib/src/testers/browser_tester.dart b/packages/jaspr_test/lib/src/testers/browser_tester.dart index d0bff17b..cbb0248d 100644 --- a/packages/jaspr_test/lib/src/testers/browser_tester.dart +++ b/packages/jaspr_test/lib/src/testers/browser_tester.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:js_interop'; import 'package:jaspr/browser.dart'; import 'package:meta/meta.dart'; @@ -27,9 +28,12 @@ void testBrowser( var binding = BrowserAppBinding(); var tester = BrowserTester._(binding); - return binding.runTest(() async { + await binding.runTest(() async { await callback(tester); }); + + // Clear all nodes + web.document.body?.replaceChildren([].jsify()!); }, skip: skip, timeout: timeout, @@ -48,21 +52,54 @@ class BrowserTester { } Future click(Finder finder, {bool pump = true}) async { - dispatchEvent(finder, 'click', null); - if (pump) { - await pumpEventQueue(); - } + await dispatchEvent(finder, web.MouseEvent('click'), pump: pump); } - void dispatchEvent(Finder finder, String event, dynamic data) { + Future input(Finder finder, {bool? checked, double? valueAsNumber, String? value, bool pump = true}) async { + await _dispatchInputEvent(finder, 'input', + checked: checked, valueAsNumber: valueAsNumber, value: value, pump: pump); + } + + Future change(Finder finder, {bool? checked, double? valueAsNumber, String? value, bool pump = true}) async { + await _dispatchInputEvent(finder, 'change', + checked: checked, valueAsNumber: valueAsNumber, value: value, pump: pump); + } + + Future _dispatchInputEvent( + Finder finder, + String type, { + bool? checked, + double? valueAsNumber, + String? value, + bool pump = true, + }) async { + dispatchEvent(finder, web.InputEvent(type), before: (e) { + if (checked != null) (e as web.HTMLInputElement).checked = checked; + if (valueAsNumber != null) (e as web.HTMLInputElement).valueAsNumber = valueAsNumber; + if (value != null) (e as web.HTMLInputElement).value = value; + }, pump: pump); + } + + Future dispatchEvent(Finder finder, web.Event event, + {void Function(web.Element)? before, bool pump = true}) async { var element = _findDomElement(finder); var source = (element.renderObject as DomRenderObject).node; if (source is web.Element) { - source.dispatchEvent(web.MouseEvent('click')); + before?.call(source); + source.dispatchEvent(event); + } + + if (pump) { + await pumpEventQueue(); } } + web.Node? findNode(Finder finder) { + var element = _findDomElement(finder); + return (element.renderObject as DomRenderObject).node; + } + DomElement _findDomElement(Finder finder) { var elements = finder.evaluate(); From 76ae2d3475c6c623229f2e577a691400aa6dbedc Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Thu, 3 Oct 2024 15:37:30 +0200 Subject: [PATCH 30/31] add hydration tests --- packages/jaspr/lib/src/browser/clients.dart | 20 ++-- .../lib/src/browser/dom_render_object.dart | 30 ++--- .../hydration/hydration_browser_test.dart | 104 ++++++++++++++++++ 3 files changed, 130 insertions(+), 24 deletions(-) create mode 100644 packages/jaspr/test/browser/hydration/hydration_browser_test.dart diff --git a/packages/jaspr/lib/src/browser/clients.dart b/packages/jaspr/lib/src/browser/clients.dart index 85ac1a73..5465a956 100644 --- a/packages/jaspr/lib/src/browser/clients.dart +++ b/packages/jaspr/lib/src/browser/clients.dart @@ -17,7 +17,7 @@ void registerClientsSync(Map clients) { void registerClients(Map clients) { final Map builders = {}; _applyClients((name) { - var client = (builders[name] ?? clients[name]!()) as FutureOr; + final client = (builders[name] ?? clients[name]!()) as FutureOr; if (client is ClientBuilder) { return builders[name] = client; } else { @@ -44,30 +44,32 @@ void _applyClients(FutureOr Function(String) fn) { web.Comment? currNode; while ((currNode = iterator.nextNode() as web.Comment?) != null) { - var value = currNode!.nodeValue ?? ''; + final value = currNode!.nodeValue ?? ''; var match = _compStartRegex.firstMatch(value); if (match != null) { - var name = match.group(1)!; - var data = match.group(2); + final name = match.group(1)!; + final data = match.group(2); nodes.add((name, data, currNode)); } match = _compEndRegex.firstMatch(value); if (match != null) { - var name = match.group(1)!; + final name = match.group(1)!; if (nodes.last.$1 == name) { - var comp = nodes.removeLast(); - var start = comp.$3; + final comp = nodes.removeLast(); + final start = comp.$3; assert(start.parentNode == currNode.parentNode); - var between = (start, currNode); + final between = (start, currNode); // Remove the data string. start.text = '\$${comp.$1}'; - var params = comp.$2 != null ? jsonDecode(unescapeMarkerText(comp.$2!)) : {}; + final params = comp.$2 != null // + ? jsonDecode(unescapeMarkerText(comp.$2!)) as Map + : {}; unawaited(_runBuilder(name, fn(name), params, between)); } } diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index a457bbd9..19c63136 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -56,14 +56,14 @@ class DomRenderObject extends RenderObject { diff: if (node == null) { if (parent!.toHydrate.isNotEmpty) { - for (var e in parent!.toHydrate) { + for (final e in parent!.toHydrate) { if (e.instanceOfString('Element') && (e as web.Element).tagName.toLowerCase() == tag) { if (kVerboseMode) { print("Hydrate html node: $e"); } elem = node = e; attributesToRemove = {}; - for (var i = 0; i < elem.attributes.length; i++) { + for (final i = 0; i < elem.attributes.length; i++) { attributesToRemove.add(elem.attributes.item(i)!.name); } parent!.toHydrate.remove(e); @@ -81,11 +81,11 @@ class DomRenderObject extends RenderObject { } else { if (!node.instanceOfString('Element') || (node as web.Element).tagName.toLowerCase() != tag) { elem = _createElement(tag, namespace); - var old = node!; + final old = node!; node!.parentNode!.replaceChild(elem, old); node = elem; if (old.childNodes.length > 0) { - for (var child in old.childNodes.toIterable()) { + for (final child in old.childNodes.toIterable()) { elem.append(child as dynamic); } } @@ -96,7 +96,7 @@ class DomRenderObject extends RenderObject { } else { elem = node as web.Element; attributesToRemove = {}; - for (var i = 0; i < elem.attributes.length; i++) { + for (final i = 0; i < elem.attributes.length; i++) { attributesToRemove.add(elem.attributes.item(i)!.name); } } @@ -108,7 +108,7 @@ class DomRenderObject extends RenderObject { styles == null || styles.isEmpty ? null : styles.entries.map((e) => '${e.key}: ${e.value}').join('; ')); if (attributes != null && attributes.isNotEmpty) { - for (var attr in attributes.entries) { + for (final attr in attributes.entries) { if (attr.key == 'value' && elem.instanceOfString('HTMLInputElement') && (elem as web.HTMLInputElement).value != attr.value) { @@ -157,9 +157,9 @@ class DomRenderObject extends RenderObject { void updateText(String text) { diff: if (node == null) { - var toHydrate = parent!.toHydrate; + final toHydrate = parent!.toHydrate; if (toHydrate.isNotEmpty) { - for (var e in toHydrate) { + for (final e in toHydrate) { if (e.instanceOfString('Text')) { if (kVerboseMode) { print("Hydrate text node: $e"); @@ -183,14 +183,14 @@ class DomRenderObject extends RenderObject { } } else { if (!node.instanceOfString('Text')) { - var elem = web.Text(text); + final elem = web.Text(text); (node as web.Element).replaceWith(elem as dynamic); node = elem; if (kVerboseMode) { print("Replace text node: $text"); } } else { - var node = this.node as web.Text; + final node = this.node as web.Text; if (node.textContent != text) { node.textContent = text; if (kVerboseMode) { @@ -211,13 +211,13 @@ class DomRenderObject extends RenderObject { try { child.parent = this; - var parentNode = node; - var childNode = child.node; + final parentNode = node; + final childNode = child.node; assert(parentNode.instanceOfString('Element')); if (childNode == null) return; - var afterNode = after?.node; + final afterNode = after?.node; if (childNode.previousSibling == afterNode && childNode.parentNode == parentNode) { return; @@ -250,7 +250,7 @@ class DomRenderObject extends RenderObject { if (kVerboseMode && toHydrate.isNotEmpty) { print("Clear ${toHydrate.length} nodes not hydrated ($toHydrate)"); } - for (var node in toHydrate) { + for (final node in toHydrate) { node.parentNode!.removeChild(node); } toHydrate.clear(); @@ -268,7 +268,7 @@ class RootDomRenderObject extends DomRenderObject { } factory RootDomRenderObject.between(web.Node start, web.Node end) { - var nodes = []; + final nodes = []; web.Node? curr = start.nextSibling; while (curr != null && curr != end) { nodes.add(curr); diff --git a/packages/jaspr/test/browser/hydration/hydration_browser_test.dart b/packages/jaspr/test/browser/hydration/hydration_browser_test.dart new file mode 100644 index 00000000..cb21c3e1 --- /dev/null +++ b/packages/jaspr/test/browser/hydration/hydration_browser_test.dart @@ -0,0 +1,104 @@ +@TestOn('browser') + +import 'dart:js_interop'; + +import 'package:jaspr/browser.dart'; +import 'package:jaspr/src/foundation/marker_utils.dart'; +import 'package:jaspr_test/browser_test.dart'; +import 'package:web/web.dart'; + +void main() { + group('hydration browser test', () { + testBrowser('should hydrate elements', (tester) async { + window.document.body!.innerHTML = '

Hello World!

'.toJS; + + final divElement = window.document.querySelector('body div')!; + final pElement = window.document.querySelector('body p')!; + final bElement = window.document.querySelector('body b')!; + + expect(divElement.parentNode, equals(window.document.body)); + expect(pElement.parentNode, equals(divElement)); + expect(bElement.parentNode, equals(pElement)); + + await tester.pumpComponent(div([ + p([ + text('Hello '), + b([text('World2')]), + text('!') + ]), + ])); + + expect(divElement.parentNode, equals(window.document.body)); + expect(pElement.parentNode, equals(divElement)); + expect(bElement.parentNode, equals(pElement)); + + expect(bElement.textContent, equals('World2')); + }); + + testBrowser('should find and hydrate marker', (tester) async { + var marker = clientMarkerPrefix; + window.document.body!.innerHTML = '
' + '

A

' + ' ' + '

B

' + ' ' + '
' + .toJS; + + final divElement = window.document.querySelector('body div')!; + final p1Element = window.document.querySelector('body p:first-child')!; + final p2Element = window.document.querySelector('body p:last-child')!; + + expect(divElement.parentNode, equals(window.document.body)); + expect(p1Element.parentNode, equals(divElement)); + expect(p1Element.textContent, equals('A')); + expect(p2Element.parentNode, equals(divElement)); + expect(p2Element.textContent, equals('B')); + + registerClientsSync({ + 'app': (_) => p([text('C')]), + }); + await pumpEventQueue(); + + expect(divElement.parentNode, equals(window.document.body)); + expect(p1Element.parentNode, equals(divElement)); + expect(p1Element.textContent, equals('A')); + expect(p2Element.parentNode, equals(divElement)); + expect(p2Element.textContent, equals('C')); + }); + + testBrowser('should find and hydrate multiple markers with params', (tester) async { + var marker = clientMarkerPrefix; + window.document.body!.innerHTML = '
' + ' ' + '

Hello

' + ' ' + ' ' + '

Hello

' + ' ' + '
' + .toJS; + + final divElement = window.document.querySelector('body div')!; + final p1Element = window.document.querySelector('body p:first-child')!; + final p2Element = window.document.querySelector('body p:last-child')!; + + expect(divElement.parentNode, equals(window.document.body)); + expect(p1Element.parentNode, equals(divElement)); + expect(p1Element.textContent, equals('Hello')); + expect(p2Element.parentNode, equals(divElement)); + expect(p2Element.textContent, equals('Hello')); + + registerClientsSync({ + 'app': (params) => p([text('Hello ${params['name']}')]), + }); + await pumpEventQueue(); + + expect(divElement.parentNode, equals(window.document.body)); + expect(p1Element.parentNode, equals(divElement)); + expect(p1Element.textContent, equals('Hello A')); + expect(p2Element.parentNode, equals(divElement)); + expect(p2Element.textContent, equals('Hello B')); + }); + }); +} From baf7ffe441008ab2e96e4d932bc539efac4133e5 Mon Sep 17 00:00:00 2001 From: Kilian Schulte Date: Thu, 3 Oct 2024 16:03:21 +0200 Subject: [PATCH 31/31] fix linting --- packages/jaspr/lib/src/browser/dom_render_object.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jaspr/lib/src/browser/dom_render_object.dart b/packages/jaspr/lib/src/browser/dom_render_object.dart index 19c63136..947edff3 100644 --- a/packages/jaspr/lib/src/browser/dom_render_object.dart +++ b/packages/jaspr/lib/src/browser/dom_render_object.dart @@ -63,7 +63,7 @@ class DomRenderObject extends RenderObject { } elem = node = e; attributesToRemove = {}; - for (final i = 0; i < elem.attributes.length; i++) { + for (var i = 0; i < elem.attributes.length; i++) { attributesToRemove.add(elem.attributes.item(i)!.name); } parent!.toHydrate.remove(e); @@ -96,7 +96,7 @@ class DomRenderObject extends RenderObject { } else { elem = node as web.Element; attributesToRemove = {}; - for (final i = 0; i < elem.attributes.length; i++) { + for (var i = 0; i < elem.attributes.length; i++) { attributesToRemove.add(elem.attributes.item(i)!.name); } }