| # Copyright 2014 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//chrome/common/features.gni") |
| import( |
| "//tools/code_coverage/js_source_maps/create_js_source_maps/create_js_source_maps.gni") |
| import( |
| "//tools/code_coverage/js_source_maps/merge_js_source_maps/merge_js_source_maps.gni") |
| import("//tools/grit/grit_rule.gni") |
| import("//tools/grit/preprocess_if_expr.gni") |
| import("//tools/polymer/html_to_wrapper.gni") |
| import("//tools/typescript/ts_definitions.gni") |
| import("//tools/typescript/webui_ts_library.gni") |
| import("//ui/file_manager/file_names.gni") |
| import("//ui/webui/resources/tools/generate_grd.gni") |
| import("//ui/webui/webui_features.gni") |
| |
| grit("resources") { |
| source = "file_manager_resources.grd" |
| defines = [ "optimize_webui=$optimize_webui" ] |
| outputs = [ |
| "grit/file_manager_resources.h", |
| "grit/file_manager_resources_map.cc", |
| "grit/file_manager_resources_map.h", |
| "file_manager_resources.pak", |
| "file_manager_resources.rc", |
| ] |
| } |
| |
| component("file_manager") { |
| sources = [ "file_manager_export.h" ] |
| public_deps = [ |
| ":file_manager_gen_resources", |
| ":resources", |
| "//base", |
| ] |
| defines = [ "FILE_MANAGER_IMPLEMENTATION" ] |
| } |
| |
| preprocess_folder = "$target_gen_dir/preprocessed" |
| |
| # Move files to the preprocessed folder to combine all resources in the same |
| # folder for JS bundling with rollup. |
| # This is for files direct from the src/: input_folder="./". |
| preprocess_if_expr("preprocess_static") { |
| in_folder = "./" |
| out_manifest = "$target_gen_dir/manifest_preprocess_static.json" |
| if (enable_webui_inline_sourcemaps) { |
| out_folder = "${preprocess_folder}/_tmp" |
| enable_removal_comments = enable_webui_inline_sourcemaps |
| } else { |
| out_folder = preprocess_folder |
| } |
| |
| in_files = static_js_files + unittest_files |
| } |
| |
| if (enable_webui_inline_sourcemaps) { |
| create_js_source_maps("create_source_maps_static") { |
| inline_sourcemaps = true |
| |
| sources = |
| filter_include(get_target_outputs(":preprocess_static"), [ "*.js" ]) |
| originals = [] |
| outputs = [] |
| |
| foreach(in_file, sources) { |
| rebased_path = rebase_path(in_file, "${preprocess_folder}/_tmp") |
| originals += [ rebased_path ] |
| outputs += [ "${preprocess_folder}/" + rebased_path ] |
| } |
| deps = [ ":preprocess_static" ] |
| } |
| } |
| |
| preprocess_if_expr("preprocess_static_image_loader") { |
| in_folder = "." |
| out_manifest = "$target_gen_dir/manifest_preprocess_static_image_loader.json" |
| if (enable_webui_inline_sourcemaps) { |
| out_folder = "${preprocess_folder}/_tmp" |
| enable_removal_comments = enable_webui_inline_sourcemaps |
| } else { |
| out_folder = preprocess_folder |
| } |
| |
| in_files = image_loader_ts |
| } |
| |
| if (enable_webui_inline_sourcemaps) { |
| create_js_source_maps("create_source_maps_image_loader") { |
| inline_sourcemaps = true |
| |
| sources = |
| filter_include(get_target_outputs(":preprocess_static_image_loader"), |
| [ |
| "*.js", |
| "*.ts", |
| ]) |
| originals = [] |
| outputs = [] |
| |
| foreach(in_file, sources) { |
| rebased_path = rebase_path(in_file, "${preprocess_folder}/_tmp") |
| originals += [ rebased_path ] |
| outputs += [ "${preprocess_folder}/" + rebased_path ] |
| } |
| deps = [ ":preprocess_static_image_loader" ] |
| } |
| } |
| |
| # This is for files that are generated in "gen/": input_folder=target_gen_dir. |
| preprocess_if_expr("preprocess_generated") { |
| in_folder = target_gen_dir |
| out_folder = preprocess_folder |
| out_manifest = "$target_gen_dir/manifest_preprocess_generated.json" |
| |
| in_files = generated_js_files + ts_generated_templates |
| |
| deps = [ |
| ":html_wrapper_files", |
| "//ui/file_manager/base/gn:file_types_data_gen_js", |
| "//ui/file_manager/file_manager/foreground/elements:polymer_elements", |
| ] |
| } |
| |
| common_path_mappings = [ |
| "chrome-extension://pmfjbimdmchhbnneeidfognadeopoehp/*|preprocessed/image_loader/*", |
| "tslib|" + rebase_path( |
| "//third_party/material_web_components/components-chromium/node_modules/tslib/tslib.d.ts", |
| target_gen_dir), |
| "chrome://resources/mwc/*|" + rebase_path( |
| "//third_party/material_web_components/components-chromium/node_modules/*", |
| target_gen_dir), |
| "chrome://resources/cr_components/color_change_listener/*|" + rebase_path( |
| "$root_gen_dir/ui/webui/resources/tsc/cr_components/color_change_listener/*", |
| target_gen_dir), |
| "chrome://file-manager/*|" + |
| rebase_path("$preprocess_folder/file_manager/*", target_gen_dir), |
| ] |
| |
| webui_ts_library("build_ts") { |
| root_dir = preprocess_folder |
| if (enable_webui_inline_sourcemaps) { |
| out_dir = "$target_gen_dir/tsc/_tmp" |
| } else { |
| out_dir = "$target_gen_dir/tsc" |
| } |
| tsconfig_base = "tsconfig_base.json" |
| composite = true |
| |
| path_mappings = common_path_mappings |
| |
| extra_deps = [ |
| ":copy_definitions_to_gen", |
| ":copy_definitions_to_preprocess", |
| ":generate_definitions", |
| ":preprocess_generated", |
| "//ash/webui/common/resources:generate_definitions", |
| ] |
| |
| if (enable_webui_inline_sourcemaps) { |
| enable_source_maps = true |
| extra_deps += [ |
| ":create_source_maps_copy_ts", |
| ":create_source_maps_image_loader", |
| ":create_source_maps_static", |
| ] |
| } else { |
| extra_deps += [ |
| ":copy_ts", |
| ":preprocess_static", |
| ":preprocess_static_image_loader", |
| ] |
| } |
| |
| deps = [ |
| "//ash/webui/common/resources:build_ts", |
| "//ash/webui/common/resources/cr_elements:build_ts", |
| "//third_party/cros-components:cros_components_ts", |
| "//third_party/material_web_components:bundle_lit_ts", |
| "//third_party/material_web_components:library", |
| "//third_party/polymer/v3_0:library", |
| "//ui/webui/resources/js:build_ts", |
| ] |
| |
| in_files = static_js_files + generated_js_files + ts_files + ts_polymer + |
| ts_generated_templates + image_loader_ts |
| |
| definitions = other_dts_files |
| foreach(_file, generate_definitions_js_files) { |
| definitions += |
| [ "$target_gen_dir/" + string_replace(_file, ".js", ".d.ts") ] |
| } |
| foreach(_file, checked_in_dts_files) { |
| definitions += [ "$preprocess_folder/$_file" ] |
| } |
| } |
| |
| if (enable_webui_inline_sourcemaps) { |
| merge_js_source_maps("merge_source_maps") { |
| deps = [ ":build_ts" ] |
| manifest_files = |
| filter_include(get_target_outputs(":build_ts"), [ "*_manifest.json" ]) |
| js_files = filter_include(get_target_outputs(":build_ts"), [ "*.js" ]) |
| |
| sources = [] |
| outputs = [] |
| |
| out_dir = "$target_gen_dir/tsc" |
| foreach(_js_file, js_files) { |
| sources += [ _js_file ] |
| outputs += |
| [ string_replace(_js_file, "$target_gen_dir/tsc/_tmp", out_dir) ] |
| } |
| } |
| } |
| |
| webui_ts_library("test_build_ts") { |
| testonly = true |
| root_dir = preprocess_folder |
| out_dir = "$target_gen_dir/tsc" |
| tsconfig_base = "tsconfig_base.json" |
| enable_source_maps = false |
| |
| in_files = unittest_files + ts_test_files |
| |
| path_mappings = |
| common_path_mappings + [ |
| # for chai_assert.js. |
| "chrome://webui-test/chromeos/*|" + |
| rebase_path("$root_gen_dir/chrome/test/data/webui/chromeos/tsc/*", |
| target_gen_dir), |
| "chrome://webui-test/*|" + |
| rebase_path("$root_gen_dir/chrome/test/data/webui/tsc/*", |
| target_gen_dir), |
| ] |
| |
| definitions = other_dts_files |
| foreach(_file, checked_in_dts_files) { |
| definitions += [ "$preprocess_folder/$_file" ] |
| } |
| |
| deps = [ |
| ":build_ts", |
| "//ash/webui/common/resources:build_ts", |
| "//ash/webui/common/resources/cr_elements:build_ts", |
| "//chrome/test/data/webui:build_ts", |
| "//chrome/test/data/webui/chromeos:build_ts", |
| "//third_party/cros-components:cros_components_ts", |
| "//third_party/material_web_components:bundle_lit_ts", |
| "//third_party/material_web_components:library", |
| "//third_party/polymer/v3_0:library", |
| "//ui/webui/resources/cr_components/color_change_listener:build_ts", |
| "//ui/webui/resources/js:build_ts", |
| ] |
| extra_deps = [ |
| ":copy_definitions_to_gen", |
| ":copy_definitions_to_preprocess", |
| ] |
| if (enable_webui_inline_sourcemaps) { |
| extra_deps += [ |
| ":create_source_maps_copy_ts", |
| ":create_source_maps_static", |
| ] |
| } else { |
| extra_deps += [ |
| ":copy_ts", |
| ":preprocess_static", |
| ] |
| } |
| } |
| |
| ts_definitions("generate_definitions") { |
| root_dir = "." |
| out_dir = target_gen_dir |
| |
| extra_deps = [ "//ash/webui/common/resources:generate_definitions" ] |
| |
| js_files = generate_definitions_js_files |
| } |
| |
| # Copy definition files to GEN folder, so they can import relatively the |
| # generated definitions. |
| copy("copy_definitions_to_gen") { |
| sources = checked_in_dts_files |
| outputs = [ "$target_gen_dir/{{source_target_relative}}" ] |
| } |
| |
| # Copy definition files to $preprocess_folder so TSC can find them. |
| copy("copy_definitions_to_preprocess") { |
| sources = checked_in_dts_files |
| outputs = [ "$preprocess_folder/{{source_target_relative}}" ] |
| } |
| |
| preprocess_if_expr("copy_ts") { |
| in_folder = "." |
| out_manifest = "$target_gen_dir/manifest_preprocess_copy_ts.json" |
| if (enable_webui_inline_sourcemaps) { |
| out_folder = "${preprocess_folder}/_tmp" |
| enable_removal_comments = enable_webui_inline_sourcemaps |
| } else { |
| out_folder = preprocess_folder |
| } |
| |
| in_files = ts_files + ts_test_files + ts_polymer |
| } |
| |
| if (enable_webui_inline_sourcemaps) { |
| create_js_source_maps("create_source_maps_copy_ts") { |
| inline_sourcemaps = true |
| |
| sources = filter_include(get_target_outputs(":copy_ts"), [ "*.ts" ]) |
| originals = [] |
| outputs = [] |
| |
| foreach(in_file, sources) { |
| rebased_path = rebase_path(in_file, "${preprocess_folder}/_tmp") |
| originals += [ rebased_path ] |
| outputs += [ "${preprocess_folder}/" + rebased_path ] |
| } |
| deps = [ ":copy_ts" ] |
| } |
| } |
| |
| copy("for_image_loader") { |
| sources = [ |
| "$target_gen_dir/tsc/file_manager/common/js/file_types_base.js", |
| "$target_gen_dir/tsc/file_manager/common/js/lru_cache.js", |
| ] |
| outputs = [ "$target_gen_dir/file_manager/common/js/{{source_file_part}}" ] |
| if (enable_webui_inline_sourcemaps) { |
| deps = [ ":merge_source_maps" ] |
| } else { |
| deps = [ ":build_ts" ] |
| } |
| } |
| |
| shared_image_loader_files = [ |
| "image_loader/image_loader_client.js", |
| "image_loader/image_orientation.js", |
| "image_loader/load_image_request.js", |
| ] |
| |
| copy("for_image_loader_unittests") { |
| sources = [] |
| foreach(f, shared_image_loader_files) { |
| sources += [ "$target_gen_dir/image_loader/tsc/$f" ] |
| } |
| |
| deps = [ "image_loader:build_ts" ] |
| |
| outputs = [ "$target_gen_dir/image_loader/{{source_file_part}}" ] |
| } |
| |
| grd_prefix = "file_manager_gen" |
| generated_grd = "$target_gen_dir/${grd_prefix}_resources.grd" |
| |
| generate_grd("build_grd") { |
| out_grd = generated_grd |
| |
| grdp_files = [ "$target_gen_dir/file_manager/static_resources.grdp" ] |
| |
| deps = [ |
| "file_manager:build_static_grdp", |
| "//ui/file_manager/image_loader:build", |
| ] |
| |
| input_files_base_dir = rebase_path(target_gen_dir, root_build_dir) |
| input_files = [ "image_loader/background.rollup.js" ] |
| |
| resource_path_rewrites = |
| [ "image_loader/background.rollup.js|image_loader/background.js" ] |
| |
| if (optimize_webui) { |
| input_files += |
| [ |
| "file_manager/background/js/runtime_loaded_test_util.rollup.js", |
| "file_manager/foreground/js/deferred_elements.rollup.js", |
| "file_manager/foreground/js/main.rollup.js", |
| "file_manager/foreground/js/metadata/metadata_dispatcher.rollup.js", |
| "file_manager/foreground/js/shared.rollup.js", |
| |
| # For Image Loader unittests: |
| "file_manager/common/js/file_types_base.js", |
| "file_manager/common/js/file_types_data.js", |
| "file_manager/common/js/lru_cache.js", |
| ] + shared_image_loader_files |
| |
| resource_path_rewrites += [ |
| "file_manager/background/js/runtime_loaded_test_util.rollup.js|file_manager/background/js/runtime_loaded_test_util.js", |
| "file_manager/foreground/js/deferred_elements.rollup.js|file_manager/foreground/js/deferred_elements.js", |
| "file_manager/foreground/js/main.rollup.js|file_manager/foreground/js/main.js", |
| "file_manager/foreground/js/metadata/metadata_dispatcher.rollup.js|file_manager/foreground/js/metadata/metadata_dispatcher.js", |
| ] |
| |
| deps += [ |
| ":for_image_loader", |
| ":for_image_loader_unittests", |
| "//ui/file_manager/file_manager/background/js:build", |
| "//ui/file_manager/file_manager/foreground/js:build", |
| "//ui/file_manager/file_manager/foreground/js:build_worker", |
| ] |
| } else { |
| if (enable_webui_inline_sourcemaps) { |
| deps += [ ":merge_source_maps" ] |
| manifest_files = filter_include(get_target_outputs(":merge_source_maps"), |
| [ "*_manifest__processed.json" ]) |
| } else { |
| deps += [ ":build_ts" ] |
| manifest_files = |
| filter_include(get_target_outputs(":build_ts"), [ "*manifest.json" ]) |
| } |
| } |
| } |
| |
| # Resources for the JS modules. |
| grit("file_manager_gen_resources") { |
| defines = chrome_grit_defines |
| |
| # These arguments are needed since the grd is generated at build time. |
| enable_input_discovery_for_gn_analyze = false |
| |
| source = generated_grd |
| deps = [ ":build_grd" ] |
| |
| outputs = [ |
| "grit/file_manager_gen_resources.h", |
| "grit/file_manager_gen_resources_map.cc", |
| "grit/file_manager_gen_resources_map.h", |
| "file_manager_gen_resources.pak", |
| ] |
| output_dir = target_gen_dir |
| } |
| |
| html_to_wrapper("html_wrapper_files") { |
| in_files = ts_templates |
| template = "native" |
| } |
| |
| # GRD for test files. |
| generate_grd("build_tests_grdp") { |
| testonly = true |
| grd_prefix = "file_manager_test" |
| out_grd = "$target_gen_dir/tests_resources.grdp" |
| |
| input_files_base_dir = rebase_path(".", "//") |
| input_files = unittest_harness |
| } |
| |
| # GRD for the actual application files that are processed by TS compiler. |
| generate_grd("build_tests_gen_grdp") { |
| testonly = true |
| grd_prefix = "file_manager_test" |
| out_grd = "$target_gen_dir/tests_gen_resources.grdp" |
| |
| deps = [ ":test_build_ts" ] |
| |
| manifest_files = filter_include(get_target_outputs(":test_build_ts"), |
| [ "*_manifest.json" ]) |
| |
| if (enable_webui_inline_sourcemaps) { |
| deps += [ ":merge_source_maps" ] |
| manifest_files += filter_include(get_target_outputs(":merge_source_maps"), |
| [ "*_manifest__processed.json" ]) |
| } else { |
| deps += [ ":build_ts" ] |
| manifest_files += |
| filter_include(get_target_outputs(":build_ts"), [ "*manifest.json" ]) |
| } |
| } |