diff --git a/crates/turborepo-lib/src/boundaries/imports.rs b/crates/turborepo-lib/src/boundaries/imports.rs index 44cfe642822f3..c4d20e4a2527e 100644 --- a/crates/turborepo-lib/src/boundaries/imports.rs +++ b/crates/turborepo-lib/src/boundaries/imports.rs @@ -24,6 +24,8 @@ use crate::{ /// All the places a dependency can be declared #[derive(Clone, Copy)] pub struct DependencyLocations<'a> { + // The containing package's name. We allow a package to import itself for testing purposes + pub(crate) package: &'a PackageName, pub(crate) internal_dependencies: &'a HashSet<&'a PackageNode>, pub(crate) package_json: &'a PackageJson, pub(crate) unresolved_external_dependencies: Option<&'a BTreeMap>, @@ -36,7 +38,9 @@ impl<'a> DependencyLocations<'a> { /// it's a valid import. We don't use `oxc_resolver` because there are some /// cases where you can resolve a package that isn't declared properly. fn is_dependency(&self, package_name: &PackageNode) -> bool { - self.internal_dependencies.contains(package_name) + // We allow a package to import itself for testing purposes + self.package == package_name.as_package_name() + || self.internal_dependencies.contains(package_name) || self .unresolved_external_dependencies .is_some_and(|external_dependencies| { diff --git a/crates/turborepo-lib/src/boundaries/mod.rs b/crates/turborepo-lib/src/boundaries/mod.rs index 8dc6fde012914..0ac92f9ead5e7 100644 --- a/crates/turborepo-lib/src/boundaries/mod.rs +++ b/crates/turborepo-lib/src/boundaries/mod.rs @@ -462,6 +462,7 @@ impl Run { let mut finder = ImportFinder::default(); module.visit_with(&mut finder); let dependency_locations = DependencyLocations { + package: package_name, internal_dependencies: &internal_dependencies, package_json: &package_info.package_json, implicit_dependencies: &implicit_dependencies, diff --git a/turborepo-tests/integration/fixtures/boundaries/apps/my-app/index.ts b/turborepo-tests/integration/fixtures/boundaries/apps/my-app/index.ts index 6baec29605d51..41f5d9c2d9097 100644 --- a/turborepo-tests/integration/fixtures/boundaries/apps/my-app/index.ts +++ b/turborepo-tests/integration/fixtures/boundaries/apps/my-app/index.ts @@ -22,3 +22,6 @@ import { walkThePlank } from "module-package"; // @boundaries-ignore one more reason import { walkThePlank } from "module-package"; + +// Allow importing own package +import { walkThePlank } from "my-app";