From ea536caf6ad8346f5ac74741528589d08ba75016 Mon Sep 17 00:00:00 2001 From: Pascal Welsch Date: Fri, 3 Jan 2025 19:12:22 +0100 Subject: [PATCH] Move hot restart script into a separate package (#94) --- .github/workflows/analyze.yml | 1 + CONTRIBUTING.md | 2 +- hot_restart_timeline/.gitignore | 4 + hot_restart_timeline/README.md | 10 + hot_restart_timeline/analysis_options.yaml | 27 + hot_restart_timeline/bin/main.dart | 11 + .../lib}/hot_restart_timeline.dart | 54 +- hot_restart_timeline/lib/server.dart | 25 + hot_restart_timeline/pubspec.lock | 656 ++++++++++++++++++ hot_restart_timeline/pubspec.yaml | 18 + .../tool}/render_html.dart | 8 +- lib/src/timeline/html/print_html.dart | 2 +- pubspec.yaml | 5 - 13 files changed, 781 insertions(+), 42 deletions(-) create mode 100644 hot_restart_timeline/.gitignore create mode 100644 hot_restart_timeline/README.md create mode 100644 hot_restart_timeline/analysis_options.yaml create mode 100644 hot_restart_timeline/bin/main.dart rename {tool => hot_restart_timeline/lib}/hot_restart_timeline.dart (65%) create mode 100644 hot_restart_timeline/lib/server.dart create mode 100644 hot_restart_timeline/pubspec.lock create mode 100644 hot_restart_timeline/pubspec.yaml rename {tool => hot_restart_timeline/tool}/render_html.dart (85%) diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml index 884a320a..e2e7902d 100644 --- a/.github/workflows/analyze.yml +++ b/.github/workflows/analyze.yml @@ -16,6 +16,7 @@ jobs: - uses: subosito/flutter-action@v2 with: channel: 'stable' + - run: cd hot_restart_timeline && flutter pub get - run: flutter analyze --fatal-infos --fatal-warnings - run: | dart format lib/src/timeline/html/sources/script.js.g.dart diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 542d1175..f305310f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,5 +10,5 @@ When building the timeline, you can use the `tool/hot_restart_timeline.dart` scr It automatically reloads the HTML when you change any part of the Jaspr code or run the test again. ```bash -dart run tool/hot_restart_timeline.dart +dart run hot_restart_timeline/bin/main.dart ``` diff --git a/hot_restart_timeline/.gitignore b/hot_restart_timeline/.gitignore new file mode 100644 index 00000000..80032af0 --- /dev/null +++ b/hot_restart_timeline/.gitignore @@ -0,0 +1,4 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ +!pubspec.lock \ No newline at end of file diff --git a/hot_restart_timeline/README.md b/hot_restart_timeline/README.md new file mode 100644 index 00000000..7063e414 --- /dev/null +++ b/hot_restart_timeline/README.md @@ -0,0 +1,10 @@ +# Spot Hot-Restart timeline CLI + +File watcher, automatically rebuilding the timeline files (in `build/timeline`) when the source files are modified. + + +## Usage + +```bash +dart run bin/main.dart +``` \ No newline at end of file diff --git a/hot_restart_timeline/analysis_options.yaml b/hot_restart_timeline/analysis_options.yaml new file mode 100644 index 00000000..8016d945 --- /dev/null +++ b/hot_restart_timeline/analysis_options.yaml @@ -0,0 +1,27 @@ +# This file configures the analyzer to use the lint rule set from `package:lint` + +# include: package:lint/strict.yaml # For production apps +include: package:lint/casual.yaml # For code samples, hackathons and other non-production code +# include: package:lint/package.yaml # Use this for packages with public API + + +# You might want to exclude auto-generated files from dart analysis +analyzer: + exclude: + #- '**.freezed.dart' + #- '**.g.dart' + +# You can customize the lint rules set to your own liking. A list of all rules +# can be found at https://dart-lang.github.io/linter/lints/options/options.html +linter: + rules: + # Util classes are awesome! + # avoid_classes_with_only_static_members: false + + # Make constructors the first thing in every class + # sort_constructors_first: true + + # Choose wisely, but you don't have to + # prefer_double_quotes: true + # prefer_single_quotes: true + \ No newline at end of file diff --git a/hot_restart_timeline/bin/main.dart b/hot_restart_timeline/bin/main.dart new file mode 100644 index 00000000..ecc4e6a4 --- /dev/null +++ b/hot_restart_timeline/bin/main.dart @@ -0,0 +1,11 @@ +import 'dart:io'; + +import 'package:hot_restart_timeline/hot_restart_timeline.dart' + as hot_restart_timeline; + +Future main(List arguments) async { + ProcessSignal.sigint.watch().listen((event) { + exit(0); + }); + await hot_restart_timeline.main(); +} diff --git a/tool/hot_restart_timeline.dart b/hot_restart_timeline/lib/hot_restart_timeline.dart similarity index 65% rename from tool/hot_restart_timeline.dart rename to hot_restart_timeline/lib/hot_restart_timeline.dart index af29141f..17d99faa 100644 --- a/tool/hot_restart_timeline.dart +++ b/hot_restart_timeline/lib/hot_restart_timeline.dart @@ -2,15 +2,16 @@ import 'dart:io'; -import 'package:server_nano/server_nano.dart'; +import 'package:dartx/dartx_io.dart'; +import 'package:hot_restart_timeline/server.dart'; -Future main() async { - ProcessSignal.sigint.watch().listen((event) { - exit(0); - }); +// Platform.script points to bin/main.dart +final packageRoot = Directory(Platform.script.path).parent.parent; +final spotPackageRoot = packageRoot.parent; +Future main() async { // Watch for changes in lib/ and then call compile_js.dart - final libDir = Directory('lib'); + final libDir = spotPackageRoot.directory('lib'); final spotLibWatcher = libDir.watch(recursive: true); spotLibWatcher.listen((event) { @@ -21,7 +22,7 @@ Future main() async { rebuildHtml(); }); - final timelineHotReloadDir = Directory('build/timeline/'); + final timelineHotReloadDir = spotPackageRoot.directory('build/timeline/'); if (!timelineHotReloadDir.existsSync()) { timelineHotReloadDir.createSync(recursive: true); } @@ -36,31 +37,8 @@ Future main() async { rebuildJs(); rebuildHtml(); - final server = Server(); - server.static('build/timeline/'); - server.get('/', (req, resp) { - final timelines = timelineHotReloadDir - .listSync(recursive: true) - .where((file) => file.path.endsWith('.html')) - .map((file) { - final relative = file.path.split('build/timeline/').last; - return '
  • $relative
  • \n'; - }).join('\n'); - resp.sendHtmlText( - '

    Spot timelines

    \n\n' - '
      \n$timelines
    ', - ); - }); - - server.listen(port: 5907); - final timelineFiles = timelineHotReloadDir.listSync(recursive: true); - for (final file in timelineFiles) { - if (!file.path.endsWith('.html')) { - continue; - } - final relative = file.path.split('build/timeline/').last; - print('http://localhost:5907/$relative'); - } + startServer(timelineHotReloadDir); + print('http://localhost:5907/'); } bool _rebuildingJs = false; @@ -79,7 +57,11 @@ Future rebuildJs() async { final timestamp = DateTime.now().toIso8601String().substring(11, 19); print('$timestamp Recompiling...'); try { - final result = await Process.run(dartExecutable, ['tool/compile_js.dart']); + final result = await Process.run( + dartExecutable, + ['tool/compile_js.dart'], + workingDirectory: spotPackageRoot.path, + ); if (result.exitCode != 0) { print('Compilation failed'); print(result.stdout); @@ -110,7 +92,11 @@ Future rebuildHtml() async { // start a new process so that it picks up the changes in the jaspr code final stopwatch = Stopwatch()..start(); try { - final result = await Process.run(dartExecutable, ['tool/render_html.dart']); + final result = await Process.run( + dartExecutable, + ['tool/render_html.dart'], + workingDirectory: packageRoot.path, + ); if (result.exitCode != 0) { print('Render failed'); print(result.stdout); diff --git a/hot_restart_timeline/lib/server.dart b/hot_restart_timeline/lib/server.dart new file mode 100644 index 00000000..38b7941f --- /dev/null +++ b/hot_restart_timeline/lib/server.dart @@ -0,0 +1,25 @@ +import 'dart:io'; + +import 'package:dartx/dartx_io.dart'; +import 'package:hot_restart_timeline/hot_restart_timeline.dart'; +import 'package:server_nano/server_nano.dart'; + +void startServer(Directory timelineHotReloadDir) { + final server = Server(); + server.static(spotPackageRoot.directory('build/timeline/').path); + server.get('/', (req, resp) { + final timelines = timelineHotReloadDir + .listSync(recursive: true) + .where((file) => file.path.endsWith('.html')) + .map((file) { + final relative = file.path.split('build/timeline/').last; + return '
  • $relative
  • \n'; + }).join('\n'); + resp.sendHtmlText( + '

    Spot timelines

    \n\n' + '
      \n$timelines
    ', + ); + }); + + server.listen(port: 5907); +} diff --git a/hot_restart_timeline/pubspec.lock b/hot_restart_timeline/pubspec.lock new file mode 100644 index 00000000..c9dfce50 --- /dev/null +++ b/hot_restart_timeline/pubspec.lock @@ -0,0 +1,656 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab" + url: "https://pub.dev" + source: hosted + version: "76.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.3" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e" + url: "https://pub.dev" + source: hosted + version: "6.11.0" + args: + dependency: transitive + description: + name: args + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + url: "https://pub.dev" + source: hosted + version: "2.6.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.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" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checks: + dependency: transitive + description: + name: checks + sha256: aad431b45a8ae2fa26db8c22e385b9cdec73f72986a1d9d9f2017f4c39ecf5c9 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + ci: + dependency: transitive + description: + name: ci + sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13" + url: "https://pub.dev" + source: hosted + version: "0.1.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + url: "https://pub.dev" + source: hosted + version: "1.19.0" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 + url: "https://pub.dev" + source: hosted + version: "1.11.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + dartx: + dependency: "direct main" + description: + name: dartx + sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + flutter: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_driver: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + fuchsia_remote_debug_protocol: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + hotreloader: + dependency: transitive + description: + name: hotreloader + sha256: ed56fdc1f3a8ac924e717257621d09e9ec20e308ab6352a73a50a1d7a4d9158e + url: "https://pub.dev" + source: hosted + version: "4.2.0" + html: + dependency: transitive + description: + name: html + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + url: "https://pub.dev" + source: hosted + version: "0.15.5" + http: + dependency: transitive + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.dev" + source: hosted + version: "3.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + integration_test: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" + jaspr: + dependency: transitive + description: + name: jaspr + sha256: "985dc5e60b8d2d70199e220633ce3a2418abfb619c94fe9b7c33934a5ead8d86" + url: "https://pub.dev" + source: hosted + version: "0.15.1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" + url: "https://pub.dev" + source: hosted + version: "10.0.7" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" + url: "https://pub.dev" + source: hosted + version: "3.0.8" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lint: + dependency: "direct dev" + description: + name: lint + sha256: d758a5211fce7fd3f5e316f804daefecdc34c7e53559716125e6da7388ae8565 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + macros: + dependency: transitive + description: + name: macros + sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656" + url: "https://pub.dev" + source: hosted + version: "0.1.3-main.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.dev" + source: hosted + version: "1.15.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + nanoid2: + dependency: transitive + description: + name: nanoid2 + sha256: "35b5048f836652a1d711db0d716bdee59fcaaa4c37792db8b3568da4f7feb2f9" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path: + dependency: "direct main" + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + platform: + dependency: transitive + description: + name: platform + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + server_nano: + dependency: "direct main" + description: + name: server_nano + sha256: "7f551b327098d9c8a2a4242585755da81705827148647cb7c475f86383427034" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" + shelf_gzip: + dependency: transitive + description: + name: shelf_gzip + sha256: "4f4b793c0f969f348aece1ab4cc05fceba9fea431c1ce76b1bc0fa369cecfc15" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + 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: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.dev" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.dev" + source: hosted + version: "0.10.13" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + spot: + dependency: "direct dev" + description: + path: ".." + relative: true + source: path + version: "0.17.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + url: "https://pub.dev" + source: hosted + version: "1.12.0" + 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: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + sync_http: + dependency: transitive + description: + name: sync_http + sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" + url: "https://pub.dev" + source: hosted + version: "0.3.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: "direct dev" + description: + name: test + sha256: "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f" + url: "https://pub.dev" + source: hosted + version: "1.25.8" + test_api: + dependency: transitive + description: + name: test_api + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + url: "https://pub.dev" + source: hosted + version: "0.7.3" + test_core: + dependency: transitive + description: + name: test_core + sha256: "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + time: + dependency: transitive + description: + name: time + sha256: "370572cf5d1e58adcb3e354c47515da3f7469dac3a95b447117e728e7be6f461" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + url: "https://pub.dev" + source: hosted + version: "14.3.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + webdriver: + dependency: transitive + description: + name: webdriver + sha256: "3d773670966f02a646319410766d3b5e1037efb7f07cc68f844d5e06cd4d61c8" + url: "https://pub.dev" + source: hosted + version: "3.0.4" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.5.0 <3.999.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/hot_restart_timeline/pubspec.yaml b/hot_restart_timeline/pubspec.yaml new file mode 100644 index 00000000..d4716493 --- /dev/null +++ b/hot_restart_timeline/pubspec.yaml @@ -0,0 +1,18 @@ +name: hot_restart_timeline +description: A webserver which automatically reloads the timelines of spot on code changes +version: 1.0.0 +publish_to: none + +environment: + sdk: ^3.0.0 + +dependencies: + dartx: ^1.1.0 + path: ^1.9.0 + server_nano: ^1.5.1 + +dev_dependencies: + lint: ^2.3.0 + spot: + path: ../ + test: ^1.24.0 diff --git a/tool/render_html.dart b/hot_restart_timeline/tool/render_html.dart similarity index 85% rename from tool/render_html.dart rename to hot_restart_timeline/tool/render_html.dart index e7129597..da23706d 100644 --- a/tool/render_html.dart +++ b/hot_restart_timeline/tool/render_html.dart @@ -7,8 +7,14 @@ import 'package:path/path.dart' as path; import 'package:spot/src/timeline/html/render_timeline.dart'; import 'package:spot/src/timeline/html/web/timeline_event.dart'; +// Platform.script points to tool/render_html.dart +final packageRoot = Directory(Platform.script.path).parent.parent; +final spotPackageRoot = packageRoot.parent; + +/// Renders the timeline HTML files to be served by the server Future main() async { - final globalTimelineDir = Directory('build').directory('timeline'); + final globalTimelineDir = + spotPackageRoot.directory('build').directory('timeline'); if (!globalTimelineDir.existsSync()) { return; } diff --git a/lib/src/timeline/html/print_html.dart b/lib/src/timeline/html/print_html.dart index 9fabd931..2c532b37 100644 --- a/lib/src/timeline/html/print_html.dart +++ b/lib/src/timeline/html/print_html.dart @@ -105,7 +105,7 @@ extension HtmlTimelinePrinter on Timeline { bool? _isTimelineHotRestartServerRunningCached; /// Check if the Timeline Hot-Restart Server is running located at -/// `tool/hot_restart_timeline.dart` +/// `hot_restart_timeline/bin/main.dart` /// /// This method is heavily cached because it might be executed for every tests /// and it only is required for development. diff --git a/pubspec.yaml b/pubspec.yaml index fbd163c8..8e678935 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,11 +30,6 @@ dev_dependencies: lint: ^2.1.0 test: ^1.24.0 test_process: ^2.1.0 - server_nano: ^1.5.1 - -dependency_overrides: - path: '>=1.8.0 <=1.9.0' - mime: 1.0.4 flutter: assets: