diff --git a/gazelle/js/generate.go b/gazelle/js/generate.go index bb1d6e86..93598d16 100644 --- a/gazelle/js/generate.go +++ b/gazelle/js/generate.go @@ -220,7 +220,7 @@ func (ts *typeScriptLang) addPackageRule(cfg *JsGazelleConfig, args language.Gen npmPackageInfo.sources.Add(impt) } else { if strings.Contains(impt, "*") { - BazelLog.Warnf("Wildcard import %q in %q not supported", impt, packageJsonPath) + BazelLog.Debugf("Wildcard import %q in %q not supported", impt, packageJsonPath) continue } @@ -231,6 +231,9 @@ func (ts *typeScriptLang) addPackageRule(cfg *JsGazelleConfig, args language.Gen }, ImportPath: impt, SourcePath: packageJsonPath, + + // Set as optional while package.json imports are experimental + Optional: true, }) } } diff --git a/gazelle/js/resolve.go b/gazelle/js/resolve.go index a40190a3..645fc080 100644 --- a/gazelle/js/resolve.go +++ b/gazelle/js/resolve.go @@ -305,7 +305,9 @@ func (ts *typeScriptLang) resolveImports( // Neither the import or a type definition was found. if resolutionType == Resolution_NotFound && len(types) == 0 { - if cfg.ValidateImportStatements() != ValidationOff { + if imp.Optional { + BazelLog.Infof("Optional import %q for target %q not found", imp.ImportPath, from.String()) + } else if cfg.ValidateImportStatements() != ValidationOff { BazelLog.Debugf("import %q for target %q not found", imp.ImportPath, from.String()) notFound := fmt.Errorf( diff --git a/gazelle/js/target.go b/gazelle/js/target.go index 90406313..cf768c54 100644 --- a/gazelle/js/target.go +++ b/gazelle/js/target.go @@ -21,6 +21,9 @@ type ImportStatement struct { // The path as written in the import statement ImportPath string + + // If the import is optional and failure to resolve should not be an error + Optional bool } // Npm link-all rule import data diff --git a/gazelle/js/tests/npm_package_deps_lib/exports-ignore/package.json b/gazelle/js/tests/npm_package_deps_lib/exports-ignore/package.json index acdcfbc7..4d074a20 100644 --- a/gazelle/js/tests/npm_package_deps_lib/exports-ignore/package.json +++ b/gazelle/js/tests/npm_package_deps_lib/exports-ignore/package.json @@ -7,6 +7,7 @@ }, "./bin": "./bin/does-not-exist.js", "./dne": "./does-not-exist.js", + "./not-ignored-dne": "./not-ignored.js", "./lib": "./lib1.js" } } diff --git a/gazelle/js/tests/npm_package_deps_lib/not-found/BUILD.in b/gazelle/js/tests/npm_package_deps_lib/not-found/BUILD.in new file mode 100644 index 00000000..066d7e73 --- /dev/null +++ b/gazelle/js/tests/npm_package_deps_lib/not-found/BUILD.in @@ -0,0 +1 @@ +# gazelle:generation_mode update diff --git a/gazelle/js/tests/npm_package_deps_lib/not-found/BUILD.out b/gazelle/js/tests/npm_package_deps_lib/not-found/BUILD.out new file mode 100644 index 00000000..c245e1e8 --- /dev/null +++ b/gazelle/js/tests/npm_package_deps_lib/not-found/BUILD.out @@ -0,0 +1,8 @@ +load("@aspect_rules_ts//ts:defs.bzl", "ts_project") + +# gazelle:generation_mode update + +ts_project( + name = "tsc", + srcs = ["src/main.ts"], +) diff --git a/gazelle/js/tests/npm_package_deps_lib/not-found/package.json b/gazelle/js/tests/npm_package_deps_lib/not-found/package.json new file mode 100644 index 00000000..a7c940ec --- /dev/null +++ b/gazelle/js/tests/npm_package_deps_lib/not-found/package.json @@ -0,0 +1,10 @@ +{ + "name": "pkg-with-exports", + "private": true, + "main": "./not-found.js", + "types": "./not-found.d.ts", + "exports": { + ".": "./dist/main.js", + "./foo": "./not-found.js" + } +} diff --git a/gazelle/js/tests/npm_package_deps_lib/not-found/src/main.ts b/gazelle/js/tests/npm_package_deps_lib/not-found/src/main.ts new file mode 100644 index 00000000..e69de29b