about summary refs log tree commit diff
path: root/pkgs/build-support/dart
diff options
context:
space:
mode:
authorhacker1024 <hacker1024@users.sourceforge.net>2023-10-26 19:30:23 +1100
committerFlafyDev <flafyarazi@gmail.com>2023-12-26 17:08:51 +0200
commitd41348a68a130b5358740e394f50d7fb5fc69838 (patch)
treefd2bc308c013870eff5f0af0c907271f03b861ef /pkgs/build-support/dart
parent92809a1cc5fb50d706a01ff232128ca9421f4584 (diff)
dartHooks.dartConfigHook: Add packageRun utility
Diffstat (limited to 'pkgs/build-support/dart')
-rw-r--r--pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh30
1 files changed, 30 insertions, 0 deletions
diff --git a/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh b/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh
index 81e87c651755d..a4d2809c44b82 100644
--- a/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh
+++ b/pkgs/build-support/dart/build-dart-application/hooks/dart-config-hook.sh
@@ -10,6 +10,36 @@ dartConfigHook() {
     mkdir -p .dart_tool
     cp "$packageConfig" .dart_tool/package_config.json
 
+    # Runs a Dart executable from a package.
+    #
+    # Usage:
+    # packageRun <package> [executable] [bin_dir]
+    #
+    # By default, [bin_dir] is "bin", and [executable] is <package>.
+    # i.e. `packageRun build_runner` is equivalent to `packageRun build_runner build_runner bin`, which runs `bin/build_runner.dart` from the build_runner package.
+    packageRun() {
+        local args=()
+        local passthrough=()
+
+        while [ $# -gt 0 ]; do
+            if [ "$1" != "--" ]; then
+                args+=("$1")
+                shift
+            else
+                shift
+                passthrough=("$@")
+                break
+            fi
+        done
+
+        local name="${args[0]}"
+        local path="${args[1]:-$name}"
+        local prefix="${args[2]:-bin}"
+
+        local packagePath="$(jq --raw-output --arg name "$name" '.packages.[] | select(.name == $name) .rootUri | sub("file://"; "")' .dart_tool/package_config.json)"
+        dart --packages=.dart_tool/package_config.json "$packagePath/$prefix/$path.dart" "${passthrough[@]}"
+    }
+
     echo "Generating the dependency list"
     dart pub deps --json | @jq@ .packages > deps.json