usebruno/bruno · error · BrunoError

No files selected

Error message

No files selected

What it means

Entry guard in readMultipleFiles. Fires when the files argument is null/undefined or an empty array, before any file is read.

Source

Thrown at packages/bruno-app/src/utils/importers/file-reader.js:45

  return new Promise((resolve, reject) => {
    const fileReader = new FileReader();
    fileReader.onload = (e) => {
      try {
        const parsed = JSON.parse(e.target.result);
        resolve({ fileName: file.name, content: parsed });
      } catch (err) {
        console.error(err);
        reject(new BrunoError(`Unable to parse JSON file: ${file.name}`));
      }
    };
    fileReader.onerror = (err) => reject(err);
    fileReader.readAsText(file);
  });
};

export const readMultipleFiles = async (files) => {
  if (!files || files.length === 0) {
    throw new BrunoError('No files selected');
  }

  const parsedFiles = [];

  for (const file of files) {
    if (!file.name.toLowerCase().endsWith('.json')) {
      throw new BrunoError(`Invalid file type: ${file.name}. Only JSON files are supported.`);
    }

    try {
      const parsedFile = await readFile(file);
      parsedFiles.push(parsedFile);
    } catch (err) {
      throw new BrunoError(`Failed to read ${file.name}: ${err.message}`);
    }
  }

  return parsedFiles;

View on GitHub (pinned to 9bdd81c7bd)

Solutions

  1. Disable the import button until at least one file is selected.
  2. Pass the actual FileList from the input element to readMultipleFiles.
  3. Add an early return when files?.length === 0 in the calling component.

Example fix

// before
const parsed = await readMultipleFiles(input.files);
// after
if (!input.files?.length) {
  toast('Choose a file first');
  return;
}
const parsed = await readMultipleFiles(Array.from(input.files));
Defensive patterns

Strategy: validation

Validate before calling

if (!files || files.length === 0) {
  throw new Error('No files selected');
}

Type guard

function hasSelectedFiles(files) {
  return Array.isArray(files) && files.length > 0;
}

Try / catch

try {
  await readMultipleFiles(files);
} catch (err) {
  if (err.message === 'No files selected') toast('Please choose at least one file');
  throw err;
}

Prevention

When it happens

Trigger: readMultipleFiles(), readMultipleFiles(null), or readMultipleFiles([]). Typical when the file input change event fires with no selection or the caller forgets to pass the FileList.

Common situations: UI wiring bug where the import button is enabled before a file is chosen, or programmatic calls that pass an empty selection.

Related errors


AI-assisted analysis of usebruno/bruno@9bdd81c7bd (2026-08-13). Data as JSON: /api/errors/25d218d102dc4ba4. Report an issue: GitHub.