# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/compiled_action.gni")

# Merge one or more json files.
#
# If any input is not a valid JSON, the merge operation will fail. Consequently
# you can "merge" one JSON file to perform validation.
# If any two inputs overlap in key space, the merge operation will fail.
# Optionally the merged output can be minified. Consequently you can "merge"
# one JSON file to perform minification.
#
# Parameters
#
#   sources (required)
#     [files list] One or more JSON files to merge.
#
#   minify (optional)
#     [boolean] Whether to minify the result.
#     Minified JSON is functionally equivalent but less readable to humans.
#
#   testonly (optional)
#   visibility (optional)
#     Standard GN meaning.
#
# Example of usage:
#
#   json_merge("merged.json") {
#     sources = [ "one.json", "two.json" ]
#     minify = true
#   }
template("json_merge") {
  compiled_action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "sources",
                             "testonly",
                             "visibility",
                             "minify",
                             "metadata",
                           ])

    tool = "//build/tools/json_merge"

    merged_output = "$target_out_dir/$target_name"
    outputs = [ merged_output ]

    args = []
    foreach(source, sources) {
      args += [
        "--input",
        rebase_path(source, root_build_dir),
      ]
    }
    args += [
      "--output",
      rebase_path(merged_output, root_build_dir),
    ]
    if (defined(minify) && minify) {
      args += [ "--minify" ]
    }
  }
}
