# Helper function for `path with` commands
def with-field [field: string, value: string] {
  path parse
  | update $field $value
  | path join
}

alias "path with-extension" = with-extension

# Replace extension of input file paths.
#
# Note that it doesn't change the file name locally.
@example "setting path ext to `rs`" {
    "ab.txt" | path with-extension "rs"
} --result ab.rs
@example "leading dot can be included" {
    "ab.txt" | path with-extension ".rs"
} --result ab.rs
@example "setting a list of input path ext to `rs`" {
    ["ab.txt", "cd.exe"] | path with-extension "rs"
} --result [ab.rs, cd.rs]
export def with-extension [ext: string] {
  let path = $in
  let ext_trim = if $ext starts-with "." {
    $ext | str substring 1..
  } else {
    $ext
  }
  $path | with-field extension $ext_trim
}

alias "path with-stem" = with-stem

# Replace stem of input file paths.
#
# Note that it doesn't change the file name locally.
@example "replace stem with 'share'" {
    "/usr/bin" | path with-stem "share"
} --result /usr/share
@example "replace stem with 'nushell'" {
    ["/home/alice/", "/home/bob/secret.txt"] | path with-stem "nushell"
} --result [/home/nushell, /home/bob/nushell.txt]
export def with-stem [stem: string] { with-field stem $stem }

alias "path with-parent" = with-parent

# Replace parent field of input file paths.
@example "replace parent path with `/usr/share`" {
    "/etc/foobar" | path with-parent "/usr/share/"
} --result "/usr/share/foobar"
@example "replace parent path with `/root/` for all filenames in list" {
    ["/home/rose/meow", "/home/fdncred/"] | path with-parent "/root/"
} --result [/root/meow, /root/fdncred]
export def with-parent [parent: string] { with-field parent $parent }