Remove extra_dts param to ts_compile. Add a placeholder for extra actions for
generating .d.ts files.

PiperOrigin-RevId: 186523573
diff --git a/internal/common/compilation.bzl b/internal/common/compilation.bzl
index 995baaa..79da1fa 100644
--- a/internal/common/compilation.bzl
+++ b/internal/common/compilation.bzl
@@ -73,24 +73,39 @@
           "JavaScript library rules (js_library, pinto_library, etc, but " +
           "also proto_library and some others).\n")
 
-# Deep flag controls whether we grab d.ts's from ts_libraries that are imported
-# by js libraries (which usually use clutz to create a single .d.ts for their
-# entire set of transitive dependencies).
-def _collect_transitive_dts(ctx, deep=True):
-  all_deps_declarations = depset()
+def _collect_dep_declarations(ctx):
+  """Collects .d.ts files from typescript and javascript dependencies.
+
+  Args:
+    ctx: ctx.
+
+  Returns:
+    A struct of depsets for direct, transitive, passthrough and type-blacklisted declarations.
+  """
+  # .d.ts files from direct dependencies, ok for strict deps
+  direct_deps_declarations = depset()
+  # all reachable .d.ts files from dependencies.
+  transitive_deps_declarations = depset([extra for extra in ctx.files._additional_d_ts])
+  # .d.ts files whose types tsickle will not emit (used for ts_declaration(generate_externs=False).
   type_blacklisted_declarations = depset()
-  for extra in ctx.files._additional_d_ts:
-    all_deps_declarations += depset([extra])
+
   for dep in ctx.attr.deps + getattr(ctx.attr, '_helpers', []):
     if hasattr(dep, "typescript"):
-      all_deps_declarations += dep.typescript.transitive_declarations
+      direct_deps_declarations += dep.typescript.declarations
+      transitive_deps_declarations += dep.typescript.transitive_declarations
       type_blacklisted_declarations += dep.typescript.type_blacklisted_declarations
-    else:
-      if deep and hasattr(dep, "clutz_transitive_dts"):
-        all_deps_declarations += dep.clutz_transitive_dts
+
+  # .d.ts files that would be passed into the subsequent typescript compilations
+  # TODO(radokirov): Merge with transitive_deps_declarations after iclutz lands.
+  passthrough_declarations = depset(transitive=[transitive_deps_declarations])
+  # If a tool like github.com/angular/clutz can create .d.ts from type annotated .js
+  # its output will be collected here.
+
   return struct(
-      transitive_declarations=all_deps_declarations,
-      type_blacklisted_declarations=type_blacklisted_declarations
+      direct=direct_deps_declarations,
+      transitive=transitive_deps_declarations,
+      passthrough=passthrough_declarations,
+      type_blacklisted=type_blacklisted_declarations
   )
 
 def _outputs(ctx, label):
@@ -127,7 +142,6 @@
 
 def compile_ts(ctx,
                is_library,
-               extra_dts_files=[],
                compile_action=None,
                devmode_compile_action=None,
                jsx_factory=None,
@@ -140,8 +154,6 @@
   Args:
     ctx: ctx.
     is_library: boolean. False if only compiling .dts files.
-    extra_dts_files: list. Additional dts files to pass for compilation,
-      not included in the transitive closure of declarations.
     compile_action: function. Creates the compilation action.
     devmode_compile_action: function. Creates the compilation action
       for devmode.
@@ -185,9 +197,9 @@
     # Note: setting this variable controls whether tsickle is run at all.
     tsickle_externs = [ctx.new_file(ctx.label.name + ".externs.js")]
 
-  transitive_dts = _collect_transitive_dts(ctx)
-  input_declarations = transitive_dts.transitive_declarations + src_declarations
-  type_blacklisted_declarations = transitive_dts.type_blacklisted_declarations
+  dep_declarations = _collect_dep_declarations(ctx)
+  input_declarations = dep_declarations.transitive + src_declarations
+  type_blacklisted_declarations = dep_declarations.type_blacklisted
   if not is_library and not ctx.attr.generate_externs:
     type_blacklisted_declarations += ctx.files.srcs
 
@@ -206,16 +218,15 @@
   if "TYPESCRIPT_PERF_TRACE_TARGET" in ctx.var:
     perf_trace = str(ctx.label) == ctx.var["TYPESCRIPT_PERF_TRACE_TARGET"]
 
-  compilation_inputs = input_declarations + extra_dts_files + srcs
+  compilation_inputs = input_declarations + srcs
   tsickle_externs_path = tsickle_externs[0] if tsickle_externs else None
 
   # Calculate allowed dependencies for strict deps enforcement.
   allowed_deps = depset()
-  allowed_deps += srcs[:]  # A target's sources may depend on each other.
-  for dep in ctx.attr.deps:
-    if hasattr(dep, "typescript"):
-      allowed_deps += dep.typescript.declarations
-  allowed_deps += extra_dts_files
+  # A target's sources may depend on each other,
+  allowed_deps += srcs[:]
+  # or on a .d.ts from a direct dependency
+  allowed_deps += dep_declarations.direct
 
   tsconfig_es6 = tsc_wrapped_tsconfig(
       ctx,
@@ -268,7 +279,7 @@
 
   # TODO(martinprobst): Merge the generated .d.ts files, and enforce strict
   # deps (do not re-export transitive types from the transitive closure).
-  transitive_decls = input_declarations + gen_declarations
+  transitive_decls = dep_declarations.passthrough + src_declarations + gen_declarations
 
   if is_library:
     es6_sources = depset(transpiled_closure_js + tsickle_externs)