blob: 89752441dc8752fcd4faea7961d18b99a7309920 [file] [edit]
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("../../../scripts/build/ninja/vars.gni")
import("../../../scripts/build/typescript/typescript.gni")
template("devtools_base_module") {
ts_library(target_name) {
forward_variables_from(invoker, "*", [ "visibility" ])
visibility += [ ":*" ]
}
}
# Legacy exceptions for devtools_module in core and models.
# New modules in these directories must use devtools_foundation_module instead.
_devtools_module_folder_exceptions = [
"front_end/core/common",
"front_end/core/host",
"front_end/core/platform/browser",
"front_end/core/platform/node",
"front_end/core/sdk",
"front_end/models/ai_assistance",
"front_end/models/bindings",
"front_end/models/breakpoints",
"front_end/models/crux-manager",
"front_end/models/emulation",
"front_end/models/extensions",
"front_end/models/heap_snapshot",
"front_end/models/issues_manager",
"front_end/models/live-metrics",
"front_end/models/live-metrics/web-vitals-injected",
"front_end/models/persistence",
"front_end/models/source_map_scopes",
"front_end/models/trace",
"front_end/models/trace/extras",
"front_end/models/trace/handlers",
"front_end/models/trace/helpers",
"front_end/models/trace/insights",
"front_end/models/trace/lantern/core",
"front_end/models/trace/lantern/graph",
"front_end/models/trace/lantern/metrics",
"front_end/models/trace/lantern/simulation",
"front_end/models/trace/lantern/types",
"front_end/models/trace/types",
"front_end/models/trace_source_maps_resolver",
"front_end/models/web_mcp",
]
_devtools_module_folder_exceptions_full = []
foreach(_dir, _devtools_module_folder_exceptions) {
_devtools_module_folder_exceptions_full +=
[ devtools_location_prepend + _dir ]
}
template("devtools_module") {
_target_dir = get_label_info(":$target_name", "dir")
_disallowed =
filter_include([ _target_dir ],
[
devtools_location_prepend + "front_end/core",
devtools_location_prepend + "front_end/core/*",
devtools_location_prepend + "front_end/models",
devtools_location_prepend + "front_end/models/*",
])
assert(
filter_exclude(_disallowed, _devtools_module_folder_exceptions_full) ==
[],
"devtools_module is not allowed in $_target_dir. Use devtools_foundation_module instead.")
devtools_base_module(target_name) {
forward_variables_from(invoker, "*")
}
}
template("devtools_api_test_module") {
devtools_base_module(target_name) {
testonly = true
forward_variables_from(invoker,
"*",
[
"additional_type_definitions",
"testonly",
"ts_deps",
])
if (defined(invoker.additional_type_definitions)) {
additional_type_definitions = invoker.additional_type_definitions
} else {
additional_type_definitions = []
}
additional_type_definitions +=
[ devtools_location_prepend + "test/api/types.d.ts" ]
if (defined(invoker.ts_deps)) {
ts_deps = invoker.ts_deps
} else {
ts_deps = []
}
ts_deps += [ devtools_location_prepend + "test/api:test_interface_types" ]
}
}
# A module that can run in any runtime we support. As such, it must only use
# features and APIs shared across all supported runtimes.
#
# To check for this we type-check both against browser and node runtime APIs.
template("devtools_foundation_module") {
_node_type_check_target = target_name + "_node_typecheck"
ts_type_check(_node_type_check_target) {
forward_variables_from(invoker,
"*",
[
"deps",
"ts_deps",
"visibility",
])
if (defined(invoker.ts_deps)) {
ts_deps = invoker.ts_deps
}
if (defined(invoker.deps)) {
deps = invoker.deps
}
es_target = "es2023"
es_libs = []
runs_in = "node_esm"
}
ts_library(target_name) {
forward_variables_from(invoker, "*", [ "visibility" ])
es_target = "es2023"
es_libs = [
"dom",
"dom.iterable",
]
visibility += [ ":*" ]
public_deps += [ ":$_node_type_check_target" ]
}
}
template("devtools_ui_module") {
devtools_base_module(target_name) {
forward_variables_from(invoker, "*")
es_target = "esnext"
es_libs = [
"dom",
"dom.iterable",
]
}
}
foreach(module,
[
"devtools_api_test_module",
"devtools_foundation_module",
"devtools_module",
"devtools_ui_module",
]) {
set_defaults(module) {
visibility = []
data = []
public_deps = []
}
}