diff --git a/ts_auto_deps/analyze/analyze.go b/ts_auto_deps/analyze/analyze.go
index e7f2851..d1ca2d5 100644
--- a/ts_auto_deps/analyze/analyze.go
+++ b/ts_auto_deps/analyze/analyze.go
@@ -328,7 +328,7 @@
 						continue handlingImports
 					}
 				}
-				d, err := a.findExistingDepProvidingImport(ctx, target.dependencies, imp)
+				d, err := a.findExistingDepProvidingImport(ctx, root, target, imp)
 				if err != nil {
 					return err
 				}
@@ -398,13 +398,13 @@
 //
 // If the import already has a knownTarget, findRuleProvidingImport will
 // return the knownTarget.
-func (a *Analyzer) findExistingDepProvidingImport(ctx context.Context, rules map[string]*appb.Rule, i *ts_auto_depsImport) (string, error) {
+func (a *Analyzer) findExistingDepProvidingImport(ctx context.Context, root string, rt *resolvedTarget, i *ts_auto_depsImport) (string, error) {
 	if i.knownTarget != "" {
 		return i.knownTarget, nil
 	}
 
 	// check if any of the existing deps declare a module_name that matches the import
-	for _, r := range rules {
+	for _, r := range rt.dependencies {
 		moduleName := stringAttribute(r, "module_name")
 		if moduleName == "" {
 			continue
@@ -440,18 +440,23 @@
 		}
 	}
 
-	// check if any of the existing deps have .d.ts sources which have ambient module
-	// declarations
-	for _, r := range rules {
+	// check if any of the other sources or the souces of any of the deps are .d.ts
+	// files which have ambient module declarations
+	var allRules []*appb.Rule
+	for _, r := range rt.dependencies {
+		allRules = append(allRules, r)
+	}
+	allRules = append(allRules, rt.rule)
+	for _, r := range allRules {
 		for _, src := range listAttribute(r, "srcs") {
-			filepath := labelToPath(src)
-			if !strings.HasSuffix(filepath, ".d.ts") {
+			fp := filepath.Join(root, labelToPath(src))
+			if !strings.HasSuffix(fp, ".d.ts") {
 				continue
 			}
 
-			contents, err := platform.ReadFile(ctx, filepath)
+			contents, err := platform.ReadFile(ctx, fp)
 			if err != nil {
-				return "", fmt.Errorf("error reading file lookinf for ambient module decls: %s", err)
+				return "", fmt.Errorf("error reading file looking for ambient module decls: %s", err)
 			}
 
 			matches := ambientModuleDeclRE.FindAllStringSubmatch(string(contents), -1)
@@ -464,7 +469,7 @@
 
 			// remove all the modules that were imported (ie all the modules that
 			// were being augmented/re-opened)
-			for _, mi := range parseImports(filepath, contents) {
+			for _, mi := range parseImports(fp, contents) {
 				delete(declaredModules, mi.importPath)
 			}
 
diff --git a/ts_auto_deps/analyze/analyze_test.go b/ts_auto_deps/analyze/analyze_test.go
index 3e669ad..9e97220 100644
--- a/ts_auto_deps/analyze/analyze_test.go
+++ b/ts_auto_deps/analyze/analyze_test.go
@@ -156,14 +156,13 @@
 	}
 	for _, test := range tests {
 		r := analyzeTargets(t, []string{"a_lib"}, []*testTarget{
-			{"a_lib", `
+			{"a_lib", fmt.Sprintf(`
 				rule_class: "ts_library"
 				attribute: <
 					name: "srcs"
-					string_list_value: "//a:b/importer.ts"
-					string_list_value: "//a:importer.d.ts"
+					string_list_value: "//a:%s"
 					type: 5
-				>`, nil},
+				>`, test.filepath), nil},
 		}, []*file{{test.filepath, []string{test.fileContents}}})
 		if r == nil {
 			continue
