From b36c555362fe9cb9f13d2c5542344e580240fc94 Mon Sep 17 00:00:00 2001 From: Kazuki Yamada Date: Sat, 27 Jul 2024 12:02:15 +0900 Subject: [PATCH 1/2] feat(ignore): Add .repopackignore support --- README.md | 22 ++-- repopack.config.json | 1 + src/config/defaultConfig.ts | 1 + src/core/packager.ts | 23 +--- src/types/index.ts | 4 + src/utils/gitignoreUtils.ts | 29 ----- src/utils/ignoreUtils.ts | 53 ++++++++++ tests/core/packager.test.ts | 5 +- ...gnoreUtils.test.ts => ignoreUtils.test.ts} | 100 ++++++++++++------ 9 files changed, 149 insertions(+), 89 deletions(-) delete mode 100644 src/utils/gitignoreUtils.ts create mode 100644 src/utils/ignoreUtils.ts rename tests/utils/{gitignoreUtils.test.ts => ignoreUtils.test.ts} (60%) diff --git a/README.md b/README.md index 8fa4655b..815b2699 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ Create a `repopack.config.json` file in your project root for custom configurati |`output.removeEmptyLines`| Whether to remove empty lines from the output | `false` | |`output.topFilesLength`| Number of top files to display in the summary. If set to 0, no summary will be displayed |`5`| |`output.showLineNumbers`| Whether to add line numbers to each line in the output |`false`| +|`ignore.useGitignorePatterns`| Whether to use patterns from `.gitignore` files |`true`| |`ignore.useDefaultPatterns`| Whether to use default ignore patterns |`true`| |`ignore.customPatterns`| Additional patterns to ignore |`[]`| @@ -162,23 +163,28 @@ Example configuration: "showLineNumbers": false }, "ignore": { + "useGitignorePatterns": true, "useDefaultPatterns": true, "customPatterns": ["additional-folder", "*.log"] } } ``` -### Default Ignore Patterns +### Ignore Patterns +Repopack offers multiple methods to set ignore patterns for excluding specific files or directories during the packing process: -Repopack automatically ignores certain files and directories by default: +- **.gitignore**: By default, patterns listed in your project's `.gitignore` file are used. This behavior can be controlled with the `ignore.useGitignorePatterns` setting. +- **Default patterns**: Repopack 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. Please see [defaultIgnore.ts](src/utils/defaultIgnore.ts) for more details. +- **.repopackignore**: You can create a `.repopackignore` file in your project root to define Repopack-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. -- All patterns specified in your project's `.gitignore` file -- Git-related files and directories (e.g., `.git`, `.gitattributes`) -- Binary files (e.g., images, executables) -- Common build output and dependency directories (e.g., `node_modules`, `dist`) -- System and IDE-specific files (e.g., `.DS_Store`, `.vscode`) +Priority Order (from highest to lowest): +1. Custom patterns `ignore.customPatterns` +2. `.repopackignore` +3. `.gitignore` (if `ignore.useGitignorePatterns` is true) +4. Default patterns (if `ignore.useDefaultPatterns` is true) -This ensures that only relevant source code is included in the packed file. You can add additional ignore patterns using the `ignore.customPatterns` configuration option or the `-i` command line flag. +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. ### Comment Removal diff --git a/repopack.config.json b/repopack.config.json index 74d49780..8454b218 100644 --- a/repopack.config.json +++ b/repopack.config.json @@ -8,6 +8,7 @@ "showLineNumbers": false }, "ignore": { + "useGitignorePatterns": true, "useDefaultPatterns": true, "customPatterns": [] } diff --git a/src/config/defaultConfig.ts b/src/config/defaultConfig.ts index 2fe5419a..851e88f3 100644 --- a/src/config/defaultConfig.ts +++ b/src/config/defaultConfig.ts @@ -9,6 +9,7 @@ export const defaultConfig: RepopackConfigDefault = { showLineNumbers: false, }, ignore: { + useGitignorePatterns: true, useDefaultPatterns: true, customPatterns: [], }, diff --git a/src/core/packager.ts b/src/core/packager.ts index bf6e4a27..2aa02127 100644 --- a/src/core/packager.ts +++ b/src/core/packager.ts @@ -4,17 +4,16 @@ import type { SecretLintCoreResult } from '@secretlint/types'; import { RepopackConfigMerged } from '../types/index.js'; import { processFile as defaultProcessFile } from '../utils/fileHandler.js'; import { - getGitignorePatterns as defaultGetGitignorePatterns, + getAllIgnorePatterns as defaultGetAllIgnorePatterns, createIgnoreFilter as defaultCreateIgnoreFilter, IgnoreFilter, -} from '../utils/gitignoreUtils.js'; +} from '../utils/ignoreUtils.js'; import { generateOutput as defaultGenerateOutput } from './outputGenerator.js'; -import { defaultIgnoreList } from '../utils/defaultIgnore.js'; import { checkFileWithSecretLint, createSecretLintConfig } from '../utils/secretLintUtils.js'; import { logger } from '../utils/logger.js'; export interface Dependencies { - getGitignorePatterns: typeof defaultGetGitignorePatterns; + getAllIgnorePatterns: typeof defaultGetAllIgnorePatterns; createIgnoreFilter: typeof defaultCreateIgnoreFilter; processFile: typeof defaultProcessFile; generateOutput: typeof defaultGenerateOutput; @@ -36,15 +35,14 @@ export async function pack( rootDir: string, config: RepopackConfigMerged, deps: Dependencies = { - getGitignorePatterns: defaultGetGitignorePatterns, + getAllIgnorePatterns: defaultGetAllIgnorePatterns, createIgnoreFilter: defaultCreateIgnoreFilter, processFile: defaultProcessFile, generateOutput: defaultGenerateOutput, }, ): Promise { // Get ignore patterns - const gitignorePatterns = await deps.getGitignorePatterns(rootDir); - const ignorePatterns = getIgnorePatterns(gitignorePatterns, config); + const ignorePatterns = await deps.getAllIgnorePatterns(rootDir, config); const ignoreFilter = deps.createIgnoreFilter(ignorePatterns); // Get all file paths in the directory @@ -73,17 +71,6 @@ export async function pack( }; } -function getIgnorePatterns(gitignorePatterns: string[], config: RepopackConfigMerged): string[] { - let ignorePatterns = [...gitignorePatterns]; - if (config.ignore.useDefaultPatterns) { - ignorePatterns = [...ignorePatterns, ...defaultIgnoreList]; - } - if (config.ignore.customPatterns) { - ignorePatterns = [...ignorePatterns, ...config.ignore.customPatterns]; - } - return ignorePatterns; -} - async function getFilePaths(dir: string, relativePath: string, ignoreFilter: IgnoreFilter): Promise { const entries = await fs.readdir(dir, { withFileTypes: true }); const filePaths: string[] = []; diff --git a/src/types/index.ts b/src/types/index.ts index 65b93afe..483d57be 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -8,6 +8,7 @@ interface RepopackConfigBase { showLineNumbers?: boolean; }; ignore?: { + useGitignorePatterns?: boolean; useDefaultPatterns?: boolean; customPatterns?: string[]; }; @@ -23,6 +24,7 @@ export type RepopackConfigDefault = RepopackConfigBase & { showLineNumbers: boolean; }; ignore: { + useGitignorePatterns: boolean; useDefaultPatterns: boolean; customPatterns?: string[]; }; @@ -38,6 +40,7 @@ export type RepopackConfigFile = RepopackConfigBase & { showLineNumbers?: boolean; }; ignore?: { + useGitignorePatterns?: boolean; useDefaultPatterns?: boolean; customPatterns?: string[]; }; @@ -53,6 +56,7 @@ export type RepopackConfigCli = RepopackConfigBase & { showLineNumbers?: boolean; }; ignore?: { + useGitignorePatterns?: boolean; useDefaultPatterns?: boolean; customPatterns?: string[]; }; diff --git a/src/utils/gitignoreUtils.ts b/src/utils/gitignoreUtils.ts deleted file mode 100644 index 83e276cf..00000000 --- a/src/utils/gitignoreUtils.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as fs from 'fs/promises'; -import path from 'path'; -import ignore from 'ignore'; -import { logger } from './logger.js'; - -export async function getGitignorePatterns(rootDir: string, fsModule = fs): Promise { - const gitignorePath = path.join(rootDir, '.gitignore'); - try { - const gitignoreContent = await fsModule.readFile(gitignorePath, 'utf-8'); - return parseGitignoreContent(gitignoreContent); - } catch (error) { - logger.warn('No .gitignore file found or unable to read it.'); - return []; - } -} - -export function parseGitignoreContent(content: string): string[] { - return content - .split('\n') - .map((line) => line.trim()) - .filter((line) => line && !line.startsWith('#')); -} - -export type IgnoreFilter = (path: string) => boolean; - -export function createIgnoreFilter(patterns: string[]): IgnoreFilter { - const ig = ignore.default().add(patterns); - return ig.createFilter(); -} diff --git a/src/utils/ignoreUtils.ts b/src/utils/ignoreUtils.ts new file mode 100644 index 00000000..031e4f00 --- /dev/null +++ b/src/utils/ignoreUtils.ts @@ -0,0 +1,53 @@ +import * as fs from 'fs/promises'; +import path from 'path'; +import ignore from 'ignore'; +import { logger } from './logger.js'; +import { RepopackConfigMerged } from '../types/index.js'; +import { defaultIgnoreList } from './defaultIgnore.js'; + +export async function getIgnorePatterns(filename: string, rootDir: string, fsModule = fs): Promise { + const ignorePath = path.join(rootDir, filename); + try { + const ignoreContent = await fsModule.readFile(ignorePath, 'utf-8'); + return parseIgnoreContent(ignoreContent); + } catch (error) { + logger.debug(`No ${filename} file found or unable to read it.`); + return []; + } +} + +export function parseIgnoreContent(content: string): string[] { + return content + .split('\n') + .map((line) => line.trim()) + .filter((line) => line && !line.startsWith('#')); +} + +export type IgnoreFilter = (path: string) => boolean; + +export function createIgnoreFilter(patterns: string[]): IgnoreFilter { + const ig = ignore.default().add(patterns); + return ig.createFilter(); +} + +export async function getAllIgnorePatterns(rootDir: string, config: RepopackConfigMerged): Promise { + let ignorePatterns: string[] = []; + + if (config.ignore.useDefaultPatterns) { + ignorePatterns = [...ignorePatterns, ...defaultIgnoreList]; + } + + const gitignorePatterns = await getIgnorePatterns('.gitignore', rootDir); + if (config.ignore.useGitignorePatterns) { + ignorePatterns = [...ignorePatterns, ...gitignorePatterns]; + } + + const repopackIgnorePatterns = await getIgnorePatterns('.repopackignore', rootDir); + ignorePatterns = [...ignorePatterns, ...repopackIgnorePatterns]; + + if (config.ignore.customPatterns) { + ignorePatterns = [...ignorePatterns, ...config.ignore.customPatterns]; + } + + return ignorePatterns; +} diff --git a/tests/core/packager.test.ts b/tests/core/packager.test.ts index 90e9e288..509a1820 100644 --- a/tests/core/packager.test.ts +++ b/tests/core/packager.test.ts @@ -13,7 +13,7 @@ describe('packager', () => { beforeEach(() => { vi.resetAllMocks(); mockDeps = { - getGitignorePatterns: vi.fn().mockResolvedValue([]), + getAllIgnorePatterns: vi.fn().mockResolvedValue([]), createIgnoreFilter: vi.fn().mockReturnValue(() => true), processFile: vi.fn().mockResolvedValue('processed content'), generateOutput: vi.fn().mockResolvedValue(undefined), @@ -36,6 +36,9 @@ describe('packager', () => { expect(vi.mocked(fs.readdir).mock.calls[0][0]).toBe('root'); expect(vi.mocked(fs.readdir).mock.calls[1][0]).toBe(path.join('root', 'dir1')); + expect(mockDeps.getAllIgnorePatterns).toHaveBeenCalledWith('root', mockConfig); + expect(mockDeps.createIgnoreFilter).toHaveBeenCalled(); + expect(mockDeps.processFile).toHaveBeenCalledTimes(2); expect(mockDeps.generateOutput).toHaveBeenCalledWith('root', mockConfig, [ { path: 'file1.txt', content: 'processed content' }, { path: path.join('dir1', 'file2.txt'), content: 'processed content' }, diff --git a/tests/utils/gitignoreUtils.test.ts b/tests/utils/ignoreUtils.test.ts similarity index 60% rename from tests/utils/gitignoreUtils.test.ts rename to tests/utils/ignoreUtils.test.ts index 78c62306..464b9b6e 100644 --- a/tests/utils/gitignoreUtils.test.ts +++ b/tests/utils/ignoreUtils.test.ts @@ -1,19 +1,25 @@ import { expect, test, vi, describe, beforeEach } from 'vitest'; -import { getGitignorePatterns, parseGitignoreContent, createIgnoreFilter } from '../../src/utils/gitignoreUtils.js'; +import { + getIgnorePatterns, + parseIgnoreContent, + createIgnoreFilter, + getAllIgnorePatterns, +} from '../../src/utils/ignoreUtils.js'; import path from 'path'; import * as fs from 'fs/promises'; import os from 'os'; +import { createMockConfig } from '../testing/testUtils.js'; vi.mock('fs/promises'); const isWindows = os.platform() === 'win32'; -describe('gitignoreUtils', () => { +describe('ignoreUtils', () => { beforeEach(() => { vi.resetAllMocks(); }); - describe('getGitignorePatterns', () => { + describe('getIgnorePatterns', () => { test('should read and parse .gitignore file', async () => { const mockContent = ` # Comment @@ -23,16 +29,16 @@ node_modules `; vi.mocked(fs.readFile).mockResolvedValue(mockContent); - const patterns = await getGitignorePatterns('/mock/root'); + const patterns = await getIgnorePatterns('.gitignore', '/mock/root'); expect(fs.readFile).toHaveBeenCalledWith(path.join('/mock/root', '.gitignore'), 'utf-8'); expect(patterns).toEqual(['node_modules', '*.log', '.DS_Store']); }); - test('should return empty array if .gitignore is not found', async () => { + test('should return empty array if ignore file is not found', async () => { vi.mocked(fs.readFile).mockRejectedValue(new Error('File not found')); - const patterns = await getGitignorePatterns('/mock/root'); + const patterns = await getIgnorePatterns('.repopackignore', '/mock/root'); expect(patterns).toEqual([]); }); @@ -41,14 +47,14 @@ node_modules const mockContent = 'node_modules\r\n*.log\r\n.DS_Store'; vi.mocked(fs.readFile).mockResolvedValue(mockContent); - const patterns = await getGitignorePatterns('/mock/root'); + const patterns = await getIgnorePatterns('.gitignore', '/mock/root'); expect(patterns).toEqual(['node_modules', '*.log', '.DS_Store']); }); }); - describe('parseGitignoreContent', () => { - test('should correctly parse gitignore content', () => { + describe('parseIgnoreContent', () => { + test('should correctly parse ignore content', () => { const content = ` # Comment node_modules @@ -57,7 +63,7 @@ node_modules .DS_Store `; - const patterns = parseGitignoreContent(content); + const patterns = parseIgnoreContent(content); expect(patterns).toEqual(['node_modules', '*.log', '.DS_Store']); }); @@ -65,7 +71,7 @@ node_modules test('should handle mixed line endings', () => { const content = 'node_modules\n*.log\r\n.DS_Store\r'; - const patterns = parseGitignoreContent(content); + const patterns = parseIgnoreContent(content); expect(patterns).toEqual(['node_modules', '*.log', '.DS_Store']); }); @@ -113,7 +119,6 @@ node_modules expect(filter('test/unit/component.spec.js')).toBe(false); expect(filter('build/output.js')).toBe(false); - expect(filter('src/test/helper.js')).toBe(true); }); @@ -121,9 +126,9 @@ node_modules const patterns = ['test/**/*.spec.js', 'build/**']; const filter = createIgnoreFilter(patterns); - expect(filter('src\\build\\utils.js')).toBe(true); - expect(filter('test\\integration\\api.spec.js')).toBe(false); - expect(filter('build\\temp\\cache.json')).toBe(false); + expect(filter('test\\unit\\component.spec.js')).toBe(false); + expect(filter('build\\output.js')).toBe(false); + expect(filter('src\\test\\helper.js')).toBe(true); }); test('should correctly handle patterns with special characters', () => { @@ -148,32 +153,61 @@ node_modules expect(filter('README.MD')).toBe(false); expect(filter('TEST/file.txt')).toBe(false); }); + }); - test('should handle symlinks correctly', () => { - const patterns = ['symlink', 'real_dir']; - const filter = createIgnoreFilter(patterns); + describe('getAllIgnorePatterns', () => { + test('should merge patterns from .gitignore and .repopackignore when useGitignorePatterns is true', async () => { + const mockConfig = createMockConfig({ + ignore: { + useGitignorePatterns: true, + useDefaultPatterns: false, + customPatterns: [], + }, + }); - expect(filter('symlink')).toBe(false); - expect(filter('real_dir')).toBe(false); - expect(filter('symlink/file.txt')).toBe(false); - expect(filter('real_dir/file.txt')).toBe(false); + vi.mocked(fs.readFile) + .mockResolvedValueOnce('node_modules\n*.log') // .gitignore + .mockResolvedValueOnce('dist\n*.tmp'); // .repopackignore + + const patterns = await getAllIgnorePatterns('/mock/root', mockConfig); + + expect(patterns).toEqual(['node_modules', '*.log', 'dist', '*.tmp']); }); - test('should handle long paths correctly', () => { - const longPath = 'a'.repeat(200) + '/file.txt'; - const patterns = ['**/*.txt']; - const filter = createIgnoreFilter(patterns); + test('should only use .repopackignore when useGitignorePatterns is false', async () => { + const mockConfig = createMockConfig({ + ignore: { + useGitignorePatterns: false, + useDefaultPatterns: false, + customPatterns: [], + }, + }); - expect(filter(longPath)).toBe(false); + vi.mocked(fs.readFile) + .mockResolvedValueOnce('node_modules\n*.log') // .gitignore (should be ignored) + .mockResolvedValueOnce('dist\n*.tmp'); // .repopackignore + + const patterns = await getAllIgnorePatterns('/mock/root', mockConfig); + + expect(patterns).toEqual(['dist', '*.tmp']); }); - test('should handle Unicode characters in paths and patterns', () => { - const patterns = ['📁/*', '*.🚀']; - const filter = createIgnoreFilter(patterns); + test('should include custom patterns when provided', async () => { + const mockConfig = createMockConfig({ + ignore: { + useGitignorePatterns: true, + useDefaultPatterns: false, + customPatterns: ['*.custom', 'temp/'], + }, + }); + + vi.mocked(fs.readFile) + .mockResolvedValueOnce('node_modules\n*.log') // .gitignore + .mockResolvedValueOnce('dist\n*.tmp'); // .repopackignore + + const patterns = await getAllIgnorePatterns('/mock/root', mockConfig); - expect(filter('📁/file.txt')).toBe(false); - expect(filter('document.🚀')).toBe(false); - expect(filter('normal/path/file.txt')).toBe(true); + expect(patterns).toEqual(['node_modules', '*.log', 'dist', '*.tmp', '*.custom', 'temp/']); }); }); }); From 002c76fbc9390914eff3f8d8e40746f487584e06 Mon Sep 17 00:00:00 2001 From: Kazuki Yamada Date: Sat, 27 Jul 2024 17:09:40 +0900 Subject: [PATCH 2/2] feat(config): Rename config useGitignorePatterns to useGitignore --- README.md | 8 ++++---- repopack.config.json | 2 +- src/config/defaultConfig.ts | 2 +- src/types/index.ts | 8 ++++---- src/utils/ignoreUtils.ts | 2 +- tests/utils/ignoreUtils.test.ts | 10 +++++----- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 815b2699..50b0dc87 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,7 @@ Create a `repopack.config.json` file in your project root for custom configurati |`output.removeEmptyLines`| Whether to remove empty lines from the output | `false` | |`output.topFilesLength`| Number of top files to display in the summary. If set to 0, no summary will be displayed |`5`| |`output.showLineNumbers`| Whether to add line numbers to each line in the output |`false`| -|`ignore.useGitignorePatterns`| Whether to use patterns from `.gitignore` files |`true`| +|`ignore.useGitignore`| Whether to use patterns from the project's `.gitignore` file |`true`| |`ignore.useDefaultPatterns`| Whether to use default ignore patterns |`true`| |`ignore.customPatterns`| Additional patterns to ignore |`[]`| @@ -163,7 +163,7 @@ Example configuration: "showLineNumbers": false }, "ignore": { - "useGitignorePatterns": true, + "useGitignore": true, "useDefaultPatterns": true, "customPatterns": ["additional-folder", "*.log"] } @@ -173,7 +173,7 @@ Example configuration: ### Ignore Patterns Repopack 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` file are used. This behavior can be controlled with the `ignore.useGitignorePatterns` setting. +- **.gitignore**: By default, patterns listed in your project's `.gitignore` file are used. This behavior can be controlled with the `ignore.useGitignore` setting. - **Default patterns**: Repopack 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. Please see [defaultIgnore.ts](src/utils/defaultIgnore.ts) for more details. - **.repopackignore**: You can create a `.repopackignore` file in your project root to define Repopack-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. @@ -181,7 +181,7 @@ Repopack offers multiple methods to set ignore patterns for excluding specific f Priority Order (from highest to lowest): 1. Custom patterns `ignore.customPatterns` 2. `.repopackignore` -3. `.gitignore` (if `ignore.useGitignorePatterns` is true) +3. `.gitignore` (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. diff --git a/repopack.config.json b/repopack.config.json index 8454b218..bb0be5bb 100644 --- a/repopack.config.json +++ b/repopack.config.json @@ -8,7 +8,7 @@ "showLineNumbers": false }, "ignore": { - "useGitignorePatterns": true, + "useGitignore": true, "useDefaultPatterns": true, "customPatterns": [] } diff --git a/src/config/defaultConfig.ts b/src/config/defaultConfig.ts index 851e88f3..a085a484 100644 --- a/src/config/defaultConfig.ts +++ b/src/config/defaultConfig.ts @@ -9,7 +9,7 @@ export const defaultConfig: RepopackConfigDefault = { showLineNumbers: false, }, ignore: { - useGitignorePatterns: true, + useGitignore: true, useDefaultPatterns: true, customPatterns: [], }, diff --git a/src/types/index.ts b/src/types/index.ts index 483d57be..9706abb0 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -8,7 +8,7 @@ interface RepopackConfigBase { showLineNumbers?: boolean; }; ignore?: { - useGitignorePatterns?: boolean; + useGitignore?: boolean; useDefaultPatterns?: boolean; customPatterns?: string[]; }; @@ -24,7 +24,7 @@ export type RepopackConfigDefault = RepopackConfigBase & { showLineNumbers: boolean; }; ignore: { - useGitignorePatterns: boolean; + useGitignore: boolean; useDefaultPatterns: boolean; customPatterns?: string[]; }; @@ -40,7 +40,7 @@ export type RepopackConfigFile = RepopackConfigBase & { showLineNumbers?: boolean; }; ignore?: { - useGitignorePatterns?: boolean; + useGitignore?: boolean; useDefaultPatterns?: boolean; customPatterns?: string[]; }; @@ -56,7 +56,7 @@ export type RepopackConfigCli = RepopackConfigBase & { showLineNumbers?: boolean; }; ignore?: { - useGitignorePatterns?: boolean; + useGitignore?: boolean; useDefaultPatterns?: boolean; customPatterns?: string[]; }; diff --git a/src/utils/ignoreUtils.ts b/src/utils/ignoreUtils.ts index 031e4f00..d5e87288 100644 --- a/src/utils/ignoreUtils.ts +++ b/src/utils/ignoreUtils.ts @@ -38,7 +38,7 @@ export async function getAllIgnorePatterns(rootDir: string, config: RepopackConf } const gitignorePatterns = await getIgnorePatterns('.gitignore', rootDir); - if (config.ignore.useGitignorePatterns) { + if (config.ignore.useGitignore) { ignorePatterns = [...ignorePatterns, ...gitignorePatterns]; } diff --git a/tests/utils/ignoreUtils.test.ts b/tests/utils/ignoreUtils.test.ts index 464b9b6e..319aa36a 100644 --- a/tests/utils/ignoreUtils.test.ts +++ b/tests/utils/ignoreUtils.test.ts @@ -156,10 +156,10 @@ node_modules }); describe('getAllIgnorePatterns', () => { - test('should merge patterns from .gitignore and .repopackignore when useGitignorePatterns is true', async () => { + test('should merge patterns from .gitignore and .repopackignore when useGitignore is true', async () => { const mockConfig = createMockConfig({ ignore: { - useGitignorePatterns: true, + useGitignore: true, useDefaultPatterns: false, customPatterns: [], }, @@ -174,10 +174,10 @@ node_modules expect(patterns).toEqual(['node_modules', '*.log', 'dist', '*.tmp']); }); - test('should only use .repopackignore when useGitignorePatterns is false', async () => { + test('should only use .repopackignore when useGitignore is false', async () => { const mockConfig = createMockConfig({ ignore: { - useGitignorePatterns: false, + useGitignore: false, useDefaultPatterns: false, customPatterns: [], }, @@ -195,7 +195,7 @@ node_modules test('should include custom patterns when provided', async () => { const mockConfig = createMockConfig({ ignore: { - useGitignorePatterns: true, + useGitignore: true, useDefaultPatterns: false, customPatterns: ['*.custom', 'temp/'], },