@@ -178,10 +178,13 @@ async function install(args: string[], basePath: string) {
178178 for ( const [ key , value ] of Object . entries ( env ) ) {
179179 sh += `export ${ key } ="${ value } "\n` ;
180180 }
181- sh += `exec "${ bin_prefix } /${ entry . name } " "$@"\n` ;
181+
182+ sh += "\n" ;
183+ //TODO should be specific with the project
184+ sh += dev_stub_text ( to_stub , bin_prefix , entry . name ) ;
182185
183186 await Deno . remove ( to_stub ) ; //FIXME inefficient to symlink for no reason
184- await Deno . writeTextFile ( to_stub , sh ) ;
187+ await Deno . writeTextFile ( to_stub , sh . trim ( ) + "\n" ) ;
185188 await Deno . chmod ( to_stub , 0o755 ) ;
186189
187190 rv . push ( to_stub ) ;
@@ -726,3 +729,53 @@ function install_prefix() {
726729 return Path . home ( ) . join ( ".local" ) ;
727730 }
728731}
732+
733+ function dev_stub_text ( selfpath : string , bin_prefix : string , name : string ) {
734+ const datadir = "$HOME/Library/Application Support" ;
735+ return `
736+ dev_check() {
737+ [ -x /usr/local/bin/dev ] || return 1
738+ local d="$PWD"
739+ until [ "$d" = / ]; do
740+ if [ -f "${ datadir } /pkgx/dev/$d/dev.pkgx.activated" ]; then
741+ echo $d
742+ return 0
743+ fi
744+ d="$(dirname "$d")"
745+ done
746+ return 1
747+ }
748+
749+ if d="$(dev_check)"; then
750+ eval "$(/usr/local/bin/dev "$d" 2>/dev/null)"
751+ [ "$(command -v ${ name } 2>/dev/null)" != "${ selfpath } " ] && exec ${ name } "$@"
752+ fi
753+
754+ exec ${ bin_prefix } /${ name } "$@"
755+ ` . trim ( ) ;
756+ }
757+
758+
759+ function datadir ( ) {
760+ const default_data_home = Deno . build . os == 'darwin' ? "/Library/Application Support" : "/.local/share" ;
761+ return `\${XDG_DATA_HOME:-$HOME${ default_data_home } ` ;
762+ }
763+
764+ function platform_data_home_default ( ) {
765+ const home = Path . home ( ) ;
766+ switch ( Deno . build . os ) {
767+ case "darwin" :
768+ return home . join ( "Library/Application Support" ) ;
769+ case "windows" : {
770+ const LOCALAPPDATA = Deno . env . get ( "LOCALAPPDATA" ) ;
771+ if ( LOCALAPPDATA ) {
772+ return new Path ( LOCALAPPDATA ) ;
773+ } else {
774+ return home . join ( "AppData/Local" ) ;
775+ }
776+ }
777+ default :
778+ return home . join ( ".local/share" ) ;
779+ }
780+ }
781+
0 commit comments