vercel/turborepo · warning

{warning}

Error message

{warning}

What it means

`turbo boundaries` checks imports against package boundary rules. Some conditions are not rule violations but are reported as warnings (up to MAX_WARNINGS=16) via this generic emission in BoundariesResult::emit (crates/turborepo-boundaries/src/lib.rs:345-351). Examples: file types boundaries cannot parse ("X files are currently not supported, boundaries checks will not apply to them") and unparseable lines ("ignoring import on line N in FILE") from imports.rs.

Source

Thrown at crates/turborepo-boundaries/src/lib.rs:346

    }

    pub fn emit(&self, color_config: ColorConfig) {
        for diagnostic in &self.diagnostics {
            eprintln!("{:?}", Report::new(diagnostic.clone()));
        }
        let result_message = match self.diagnostics.len() {
            0 => color!(color_config, BOLD_GREEN, "no issues found"),
            1 => color!(color_config, BOLD_RED, "1 issue found"),
            _ => color!(
                color_config,
                BOLD_RED,
                "{} issues found",
                self.diagnostics.len()
            ),
        };

        for warning in self.warnings.iter().take(MAX_WARNINGS) {
            turborepo_log::warn(
                turborepo_log::Source::turbo(Subsystem::Boundaries),
                warning.to_string(),
            )
            .emit();
        }
        if !self.warnings.is_empty() {
            eprintln!();
        }

        println!(
            "Checked {} files in {} packages, {}",
            self.files_checked, self.packages_checked, result_message
        );
    }
}

fn find_dynamic_imports(module_record: &ModuleRecord, source: &str) -> Vec<ImportResult> {
    module_record

View on GitHub (pinned to f9245100cf)

Solutions

  1. Read the specific warning text: unsupported-extension warnings name the extension; tighten boundaries.include globs to only supported file types.
  2. Add exclusions for generated/vendored files in turbo.json's boundaries configuration so they are not checked at all.
  3. Treat warnings as advisory: gate CI on `turbo boundaries` exit code, which reflects diagnostics, not warnings.
  4. For unsupported-but-important file types, track support upstream and keep them out of the check until then.

Example fix

// turbo.json — before: broad include sweeps unsupported files
"boundaries": { "include": ["packages/**/*"] }
// -> "css files are currently not supported, boundaries checks will not apply to them"

// after: include only files boundaries can analyze
"boundaries": { "include": ["packages/**/*.{ts,tsx,js,jsx}"] }
Defensive patterns

Strategy: validation

Validate before calling

import { globby } from "globby";

const SUPPORTED = new Set(["ts", "tsx", "js", "jsx", "mjs", "cjs"]);
const files = await globby(["packages/**/*"], { gitignore: true });
const unsupported = files.filter((f) => !SUPPORTED.has(f.split(".").pop() ?? ""));
if (unsupported.length) {
  console.warn(
    `${unsupported.length} files boundaries cannot parse; tighten boundaries.include`
  );
}

Try / catch

// turbo boundaries returns a result; gate on diagnostics, tolerate warnings
// shell:
//   turbo boundaries; status=$?
//   [ $status -eq 0 ] || exit $status   # warnings do not affect exit code

Prevention

When it happens

Trigger: Running `turbo boundaries` on a repo whose include globs match files with unsupported extensions (anything the SWC-based checker cannot parse) or files containing syntax the import extraction skips. Warnings never affect the exit status; only diagnostics (rule violations) do.

Common situations: Monorepos with .vue/.svelte/.json or generated files swept in by broad `boundaries.include` globs, or exotic JS/TS syntax on lines the scanner gives up on. Teams often see this right after enabling boundaries on a large existing repo.

Related errors


AI-assisted analysis of vercel/turborepo@f9245100cf (2026-08-17). Data as JSON: /api/errors/c3785dda829f8958. Report an issue: GitHub.