Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/core/packager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ export const pack = async (

progressCallback('Generating output...');
const output = await withMemoryLogging('Generate Output', () =>
deps.generateOutput(rootDirs, config, processedFiles, safeFilePaths, gitDiffResult, gitLogResult),
deps.generateOutput(rootDirs, config, processedFiles, allFilePaths, gitDiffResult, gitLogResult),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This change correctly fixes the issue of binary files not appearing in the directory structure. However, the fix is not covered by the existing unit tests.

The current tests in tests/core/packager.test.ts use the same mock data for allFilePaths and safeFilePaths, so they would pass even with the old, incorrect code.

To ensure this regression doesn't happen again, please consider adding a new test case that specifically verifies this behavior. The test should simulate a scenario where a binary file is present, causing allFilePaths and safeFilePaths to differ, and then assert that generateOutput is called with the complete allFilePaths.

Here's a conceptual example of what the test could look like:

test('pack should pass all file paths to generateOutput for directory structure', async () => {
  const allFilePaths = ['file1.txt', 'binary.bin'];
  const safeFilePaths = ['file1.txt'];
  const mockRawFiles = [
    { path: 'file1.txt', content: 'text' },
    { path: 'binary.bin', content: 'binary' },
  ];
  const mockSafeRawFiles = [{ path: 'file1.txt', content: 'text' }];
  const mockProcessedFiles = [{ path: 'file1.txt', content: 'processed text' }];

  const mockDeps = {
    // ... other necessary mocks
    searchFiles: vi.fn().mockResolvedValue({ filePaths: allFilePaths }),
    collectFiles: vi.fn().mockResolvedValue({ rawFiles: mockRawFiles, skippedFiles: [] }),
    validateFileSafety: vi.fn().mockResolvedValue({
      safeFilePaths,
      safeRawFiles: mockSafeRawFiles,
      suspiciousFilesResults: [],
    }),
    processFiles: vi.fn().mockResolvedValue(mockProcessedFiles),
    generateOutput: vi.fn(),
  };

  await pack(['root'], createMockConfig(), vi.fn(), mockDeps);

  expect(mockDeps.generateOutput).toHaveBeenCalledWith(
    expect.any(Array),
    expect.any(Object),
    mockProcessedFiles,
    allFilePaths, // Assert that all files are passed for output generation
    expect.anything(),
    expect.anything()
  );
});

);

progressCallback('Writing output file...');
Expand Down
69 changes: 64 additions & 5 deletions website/client/src/de/guide/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,43 @@ Repomix sucht in folgender Reihenfolge nach Konfigurationsdateien:

Kommandozeilenoptionen haben Vorrang vor Einstellungen in der Konfigurationsdatei.

## Include-Muster

Repomix unterstützt die Angabe einzuschließender Dateien mittels [Glob-Mustern](https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax). Dies ermöglicht eine flexiblere und leistungsfähigere Dateiauswahl:

- Verwenden Sie `**/*.js`, um alle JavaScript-Dateien in jedem Verzeichnis einzuschließen
- Verwenden Sie `src/**/*`, um alle Dateien innerhalb des `src`-Verzeichnisses und seiner Unterverzeichnisse einzuschließen
- Kombinieren Sie mehrere Muster wie `["src/**/*.js", "**/*.md"]`, um JavaScript-Dateien in `src` und alle Markdown-Dateien einzuschließen

Sie können Include-Muster in Ihrer Konfigurationsdatei angeben:

```json
{
"include": ["src/**/*", "tests/**/*.test.js"]
}
```

Oder verwenden Sie die Kommandozeilenoption `--include` für einmaliges Filtern.

## Ignorier-Muster

Repomix bietet mehrere Möglichkeiten, zu ignorierende Dateien anzugeben. Die Muster werden in folgender Prioritätsreihenfolge verarbeitet:
Repomix bietet mehrere Methoden zum Festlegen von Ignorier-Mustern, um bestimmte Dateien oder Verzeichnisse während des Packprozesses auszuschließen:

- **.gitignore**: Standardmäßig werden die in den `.gitignore`-Dateien und `.git/info/exclude` Ihres Projekts aufgelisteten Muster verwendet. Dieses Verhalten kann über die Einstellung `ignore.useGitignore` oder die CLI-Option `--no-gitignore` gesteuert werden.
- **Standardmuster**: Repomix enthält eine Standardliste häufig ausgeschlossener Dateien und Verzeichnisse (z.B. node_modules, .git, Binärdateien). Diese Funktion kann über die Einstellung `ignore.useDefaultPatterns` oder die CLI-Option `--no-default-patterns` gesteuert werden. Weitere Details finden Sie in [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts).
- **.repomixignore**: Sie können eine `.repomixignore`-Datei in Ihrem Projektstamm erstellen, um Repomix-spezifische Ignorier-Muster zu definieren. Diese Datei folgt dem gleichen Format wie `.gitignore`.
- **Benutzerdefinierte Muster**: Zusätzliche Ignorier-Muster können über die Option `ignore.customPatterns` in der Konfigurationsdatei angegeben werden. Sie können diese Einstellung mit der Kommandozeilenoption `-i, --ignore` überschreiben.

**Prioritätsreihenfolge** (von höchster zu niedrigster):

1. Benutzerdefinierte Muster (`ignore.customPatterns`)
2. `.repomixignore`
3. `.gitignore` und `.git/info/exclude` (wenn `ignore.useGitignore` true ist und `--no-gitignore` nicht verwendet wird)
4. Standardmuster (wenn `ignore.useDefaultPatterns` true ist und `--no-default-patterns` nicht verwendet wird)

1. CLI-Optionen (`--ignore`)
2. `.repomixignore`-Datei im Projektverzeichnis
3. `.gitignore` und `.git/info/exclude` (wenn `ignore.useGitignore` true ist)
4. Standardmuster (wenn `ignore.useDefaultPatterns` true ist)
Dieser Ansatz ermöglicht eine flexible Konfiguration des Dateiausschlusses basierend auf den Anforderungen Ihres Projekts. Er hilft, die Größe der generierten Packdatei zu optimieren, indem er den Ausschluss sicherheitssensibler Dateien und großer Binärdateien gewährleistet und gleichzeitig die Preisgabe vertraulicher Informationen verhindert.

**Hinweis:** Binärdateien werden standardmäßig nicht in der gepackten Ausgabe enthalten, aber ihre Pfade werden im Abschnitt "Repository-Struktur" der Ausgabedatei aufgelistet. Dies bietet einen vollständigen Überblick über die Repository-Struktur und hält gleichzeitig die gepackte Datei effizient und textbasiert. Weitere Details finden Sie unter [Binärdateiverarbeitung](#binärdateiverarbeitung).

Beispiel für `.repomixignore`:
```text
Expand Down Expand Up @@ -168,6 +197,36 @@ dist/**

Die vollständige Liste finden Sie in [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts)

## Binärdateiverarbeitung

Binärdateien (wie Bilder, PDFs, kompilierte Binärdateien, Archive usw.) werden speziell behandelt, um eine effiziente, textbasierte Ausgabe zu gewährleisten:

- **Dateiinhalte**: Binärdateien werden **nicht** in die gepackte Ausgabe aufgenommen, um die Datei textbasiert und effizient für die KI-Verarbeitung zu halten
- **Verzeichnisstruktur**: Binärdateipfade werden im Abschnitt der Verzeichnisstruktur **aufgelistet**, um einen vollständigen Überblick über Ihr Repository zu bieten

Dieser Ansatz stellt sicher, dass Sie eine vollständige Ansicht Ihrer Repository-Struktur erhalten und gleichzeitig eine effiziente, textbasierte Ausgabe beibehalten, die für den KI-Konsum optimiert ist.

**Beispiel:**

Wenn Ihr Repository `logo.png` und `app.jar` enthält:
- Sie erscheinen im Abschnitt Verzeichnisstruktur
- Ihre Inhalte werden nicht im Abschnitt Dateien enthalten sein

**Verzeichnisstruktur-Ausgabe:**
```
src/
index.ts
utils.ts
assets/
logo.png
build/
app.jar
```

Auf diese Weise können KI-Tools verstehen, dass diese Binärdateien in Ihrer Projektstruktur existieren, ohne deren Binärinhalte zu verarbeiten.

**Hinweis:** Sie können den Schwellenwert für die maximale Dateigröße über die Konfigurationsoption `input.maxFileSize` steuern (Standard: 50MB). Dateien, die größer als dieser Grenzwert sind, werden vollständig übersprungen.

## Erweiterte Funktionen

### Code-Komprimierung
Expand Down
2 changes: 1 addition & 1 deletion website/client/src/de/guide/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Oder in `repomix.config.json`:

## Sicherheitsmaßnahmen

1. **Ausschluss von Binärdateien**: Binärdateien werden nicht in die Ausgabe aufgenommen
1. **Binärdateiverarbeitung**: Binärdateiinhalte werden von der Ausgabe ausgeschlossen, aber ihre Pfade werden in der Verzeichnisstruktur für eine vollständige Repository-Übersicht aufgelistet
2. **Git-bewusst**: Berücksichtigt `.gitignore`-Muster
3. **Automatische Erkennung**: Sucht nach häufigen Sicherheitsproblemen:
- AWS-Anmeldedaten
Expand Down
69 changes: 64 additions & 5 deletions website/client/src/en/guide/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,43 @@ Repomix looks for configuration files in the following order:

Command-line options take precedence over configuration file settings.

## Include Patterns

Repomix supports specifying files to include using [glob patterns](https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax). This allows for more flexible and powerful file selection:

- Use `**/*.js` to include all JavaScript files in any directory
- Use `src/**/*` to include all files within the `src` directory and its subdirectories
- Combine multiple patterns like `["src/**/*.js", "**/*.md"]` to include JavaScript files in `src` and all Markdown files

You can specify include patterns in your configuration file:

```json
{
"include": ["src/**/*", "tests/**/*.test.js"]
}
```

Or use the `--include` command-line option for one-time filtering.

## Ignore Patterns

Repomix provides multiple ways to specify which files should be ignored. The patterns are processed in the following priority order:
Repomix offers multiple methods to set ignore patterns for excluding specific files or directories during the packing process:

- **.gitignore**: By default, patterns listed in your project's `.gitignore` files and `.git/info/exclude` are used. This behavior can be controlled with the `ignore.useGitignore` setting or the `--no-gitignore` CLI option.
- **Default patterns**: Repomix includes a default list of commonly excluded files and directories (e.g., node_modules, .git, binary files). This feature can be controlled with the `ignore.useDefaultPatterns` setting or the `--no-default-patterns` CLI option. Please see [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts) for more details.
- **.repomixignore**: You can create a `.repomixignore` file in your project root to define Repomix-specific ignore patterns. This file follows the same format as `.gitignore`.
- **Custom patterns**: Additional ignore patterns can be specified using the `ignore.customPatterns` option in the configuration file. You can overwrite this setting with the `-i, --ignore` command line option.

**Priority Order** (from highest to lowest):

1. Custom patterns (`ignore.customPatterns`)
2. `.repomixignore`
3. `.gitignore` and `.git/info/exclude` (if `ignore.useGitignore` is true and `--no-gitignore` is not used)
4. Default patterns (if `ignore.useDefaultPatterns` is true and `--no-default-patterns` is not used)

1. CLI options (`--ignore`)
2. `.repomixignore` file in the project directory
3. `.gitignore` and `.git/info/exclude` (if `ignore.useGitignore` is true)
4. Default patterns (if `ignore.useDefaultPatterns` is true)
This approach allows for flexible file exclusion configuration based on your project's needs. It helps optimize the size of the generated pack file by ensuring the exclusion of security-sensitive files and large binary files, while preventing the leakage of confidential information.

**Note:** Binary files are not included in the packed output by default, but their paths are listed in the "Repository Structure" section of the output file. This provides a complete overview of the repository structure while keeping the packed file efficient and text-based. See [Binary Files Handling](#binary-files-handling) for more details.

Example of `.repomixignore`:
```text
Expand Down Expand Up @@ -168,6 +197,36 @@ dist/**

For the complete list, see [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts)

## Binary Files Handling

Binary files (such as images, PDFs, compiled binaries, archives, etc.) are handled specially to maintain an efficient, text-based output:

- **File Contents**: Binary files are **not included** in the packed output to keep the file text-based and efficient for AI processing
- **Directory Structure**: Binary file **paths are listed** in the directory structure section, providing a complete overview of your repository

This approach ensures you get a complete view of your repository structure while maintaining an efficient, text-based output optimized for AI consumption.

**Example:**

If your repository contains `logo.png` and `app.jar`:
- They will appear in the Directory Structure section
- Their contents will not be included in the Files section

**Directory Structure Output:**
```
src/
index.ts
utils.ts
assets/
logo.png
build/
app.jar
```

This way, AI tools can understand that these binary files exist in your project structure without processing their binary contents.

**Note:** You can control the maximum file size threshold using the `input.maxFileSize` configuration option (default: 50MB). Files larger than this limit will be skipped entirely.

## Advanced Features

### Code Compression
Expand Down
2 changes: 1 addition & 1 deletion website/client/src/en/guide/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Or in `repomix.config.json`:

## Security Measures

1. **Binary File Exclusion**: Binary files are not included in output
1. **Binary File Handling**: Binary file contents are excluded from output, but their paths are listed in the directory structure for complete repository overview
2. **Git-Aware**: Respects `.gitignore` patterns
3. **Automated Detection**: Scans for common security issues:
- AWS credentials
Expand Down
69 changes: 64 additions & 5 deletions website/client/src/es/guide/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,43 @@ Repomix busca los archivos de configuración en el siguiente orden:

Las opciones de línea de comandos tienen prioridad sobre la configuración del archivo.

## Patrones de inclusión

Repomix admite especificar archivos para incluir usando [patrones glob](https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax). Esto permite una selección de archivos más flexible y potente:

- Use `**/*.js` para incluir todos los archivos JavaScript en cualquier directorio
- Use `src/**/*` para incluir todos los archivos dentro del directorio `src` y sus subdirectorios
- Combine múltiples patrones como `["src/**/*.js", "**/*.md"]` para incluir archivos JavaScript en `src` y todos los archivos Markdown

Puede especificar patrones de inclusión en su archivo de configuración:

```json
{
"include": ["src/**/*", "tests/**/*.test.js"]
}
```

O use la opción de línea de comandos `--include` para filtrado único.

## Patrones de ignorar

Repomix proporciona múltiples formas de especificar qué archivos deben ignorarse. Los patrones se procesan en el siguiente orden de prioridad:
Repomix ofrece múltiples métodos para establecer patrones de ignorar para excluir archivos o directorios específicos durante el proceso de empaquetado:

- **.gitignore**: Por defecto, se utilizan los patrones listados en los archivos `.gitignore` de su proyecto y `.git/info/exclude`. Este comportamiento se puede controlar con la configuración `ignore.useGitignore` o la opción CLI `--no-gitignore`.
- **Patrones predeterminados**: Repomix incluye una lista predeterminada de archivos y directorios comúnmente excluidos (por ejemplo, node_modules, .git, archivos binarios). Esta característica se puede controlar con la configuración `ignore.useDefaultPatterns` o la opción CLI `--no-default-patterns`. Consulte [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts) para más detalles.
- **.repomixignore**: Puede crear un archivo `.repomixignore` en la raíz de su proyecto para definir patrones de ignorar específicos de Repomix. Este archivo sigue el mismo formato que `.gitignore`.
- **Patrones personalizados**: Se pueden especificar patrones de ignorar adicionales usando la opción `ignore.customPatterns` en el archivo de configuración. Puede sobrescribir esta configuración con la opción de línea de comandos `-i, --ignore`.

**Orden de prioridad** (de mayor a menor):

1. Patrones personalizados (`ignore.customPatterns`)
2. `.repomixignore`
3. `.gitignore` y `.git/info/exclude` (si `ignore.useGitignore` es verdadero y `--no-gitignore` no se usa)
4. Patrones predeterminados (si `ignore.useDefaultPatterns` es verdadero y `--no-default-patterns` no se usa)

1. Opciones de CLI (`--ignore`)
2. Archivo `.repomixignore` en el directorio del proyecto
3. `.gitignore` y `.git/info/exclude` (si `ignore.useGitignore` es verdadero)
4. Patrones predeterminados (si `ignore.useDefaultPatterns` es verdadero)
Este enfoque permite una configuración flexible de exclusión de archivos basada en las necesidades de su proyecto. Ayuda a optimizar el tamaño del archivo empaquetado generado asegurando la exclusión de archivos sensibles a la seguridad y archivos binarios grandes, mientras previene la fuga de información confidencial.

**Nota:** Los archivos binarios no se incluyen en la salida empaquetada por defecto, pero sus rutas se listan en la sección "Estructura del Repositorio" del archivo de salida. Esto proporciona una visión completa de la estructura del repositorio mientras mantiene el archivo empaquetado eficiente y basado en texto. Consulte [Manejo de archivos binarios](#manejo-de-archivos-binarios) para más detalles.

Ejemplo de `.repomixignore`:
```text
Expand Down Expand Up @@ -168,6 +197,36 @@ dist/**

Para la lista completa, vea [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts)

## Manejo de archivos binarios

Los archivos binarios (como imágenes, PDFs, binarios compilados, archivos, etc.) se manejan de manera especial para mantener una salida eficiente basada en texto:

- **Contenidos de archivo**: Los archivos binarios **no se incluyen** en la salida empaquetada para mantener el archivo basado en texto y eficiente para el procesamiento de IA
- **Estructura de directorios**: Las rutas de archivos binarios **se listan** en la sección de estructura de directorios, proporcionando una visión completa de su repositorio

Este enfoque garantiza que obtenga una vista completa de la estructura de su repositorio mientras mantiene una salida eficiente basada en texto optimizada para el consumo de IA.

**Ejemplo:**

Si su repositorio contiene `logo.png` y `app.jar`:
- Aparecerán en la sección Estructura de Directorios
- Sus contenidos no se incluirán en la sección Archivos

**Salida de Estructura de Directorios:**
```
src/
index.ts
utils.ts
assets/
logo.png
build/
app.jar
```

De esta manera, las herramientas de IA pueden entender que estos archivos binarios existen en la estructura de su proyecto sin procesar sus contenidos binarios.

**Nota:** Puede controlar el umbral de tamaño máximo de archivo usando la opción de configuración `input.maxFileSize` (predeterminado: 50MB). Los archivos más grandes que este límite se omitirán por completo.

## Características avanzadas

### Compresión de código
Expand Down
2 changes: 1 addition & 1 deletion website/client/src/es/guide/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ O en `repomix.config.json`:

## Medidas de seguridad

1. **Exclusión de archivos binarios**: Los archivos binarios no se incluyen en la salida
1. **Manejo de archivos binarios**: Los contenidos de archivos binarios se excluyen de la salida, pero sus rutas se listan en la estructura de directorios para una vista completa del repositorio
2. **Compatible con Git**: Respeta los patrones de `.gitignore`
3. **Detección automatizada**: Busca problemas de seguridad comunes:
- Credenciales de AWS
Expand Down
Loading
Loading