chromium/tools/polymer/html_to_wrapper.gni

# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

template("html_to_wrapper") {
  action(target_name) {
    script = "//tools/polymer/html_to_wrapper.py"

    forward_variables_from(invoker,
                           [
                             "deps",
                             "public_deps",
                             "visibility",
                           ])

    inputs = []
    outputs = []

    wrapper_extension = ".ts"

    if (defined(invoker.use_js) && invoker.use_js) {
      wrapper_extension = ".js"
    }

    in_folder = "."
    if (defined(invoker.in_folder)) {
      in_folder = invoker.in_folder
    }

    out_folder = target_gen_dir
    if (defined(invoker.out_folder)) {
      out_folder = invoker.out_folder
    }

    foreach(html_file, invoker.in_files) {
      extension = get_path_info(html_file, "extension")
      assert(extension == "html")

      wrapper_file = get_path_info(html_file, "dir") + "/" +
                     get_path_info(html_file, "file") + wrapper_extension
      inputs += [ "$in_folder/" + html_file ]

      # When in "detect" mode, need to declare the file holding the web
      # component's definition as an input dependency, since the script needs
      # to look into it to determine the type of wrapper to use.
      if (defined(invoker.template) && invoker.template == "detect") {
        # Exclude non-web component "*_icons.html" or "icons.html" files.
        is_icons_template =
            get_path_info(html_file, "file") == "icons.html" ||
            string_replace(html_file, "_icons.html", "") != html_file ||
            string_replace(html_file, "icons_lit.html", "") != html_file
        if (!is_icons_template) {
          inputs += [ "$in_folder/" +
                      string_replace(html_file, ".html", wrapper_extension) ]
        }
      }

      outputs += [ "$out_folder/" + wrapper_file ]
    }

    args = [
             "--in_folder",
             rebase_path(in_folder, root_build_dir),
             "--out_folder",
             rebase_path(out_folder, root_build_dir),
             "--in_files",
           ] + invoker.in_files

    if (defined(invoker.template)) {
      args += [
        "--template",
        invoker.template,
      ]
    }

    if (defined(invoker.scheme)) {
      assert(invoker.scheme == "chrome" || invoker.scheme == "relative")
      args += [
        "--scheme",
        invoker.scheme,
      ]
    }

    if (defined(invoker.use_js) && invoker.use_js) {
      args += [ "--use_js" ]
    }

    if (defined(invoker.minify) && invoker.minify) {
      args += [ "--minify" ]

      # Declare additional dependency.
      inputs += [ "//tools/polymer/html_minifier.js" ]
    }
  }
}