template("npm_action") {
  assert(defined(invoker.script),
         "Need script name to run (must be defined in package.json)")
  assert(defined(invoker.args), "Need script arguments")

  action("npm_pre_flight_" + target_name) {
    inputs = [
      "//electron/package.json",
      "//electron/yarn.lock",
    ]
    script = "//electron/build/npm-run.py"

    outputs = [ "$target_gen_dir/npm_pre_stamps/" + target_name + ".stamp" ]

    args = [
      "--silent",
      "pre-flight",
      "--",
      "--stamp",
      rebase_path(outputs[0]),
    ]
  }

  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "public_deps",
                             "sources",
                             "inputs",
                             "outputs",
                           ])
    if (!defined(deps)) {
      deps = []
    }
    deps += [ ":npm_pre_flight_" + target_name ]

    script = "//electron/build/npm-run.py"
    args = [
             "--silent",
             invoker.script,
             "--",
           ] + invoker.args
  }
}