Skip to main content
Glama
MIT License
27,120
19,746
  • Linux
  • Apple
configSchema.test.ts8.04 kB
import { describe, expect, it } from 'vitest'; import { z } from 'zod'; import { repomixConfigBaseSchema, repomixConfigCliSchema, repomixConfigDefaultSchema, repomixConfigFileSchema, repomixConfigMergedSchema, repomixOutputStyleSchema, } from '../../src/config/configSchema.js'; describe('configSchema', () => { describe('repomixOutputStyleSchema', () => { it('should accept valid output styles', () => { expect(repomixOutputStyleSchema.parse('plain')).toBe('plain'); expect(repomixOutputStyleSchema.parse('xml')).toBe('xml'); }); it('should reject invalid output styles', () => { expect(() => repomixOutputStyleSchema.parse('invalid')).toThrow(z.ZodError); }); }); describe('tokenCountTree option', () => { it('should accept boolean values for tokenCountTree', () => { const configWithBooleanTrue = { output: { tokenCountTree: true, }, }; const configWithBooleanFalse = { output: { tokenCountTree: false, }, }; expect(repomixConfigBaseSchema.parse(configWithBooleanTrue)).toEqual(configWithBooleanTrue); expect(repomixConfigBaseSchema.parse(configWithBooleanFalse)).toEqual(configWithBooleanFalse); }); it('should accept string values for tokenCountTree', () => { const configWithString = { output: { tokenCountTree: '100', }, }; expect(repomixConfigBaseSchema.parse(configWithString)).toEqual(configWithString); }); it('should reject invalid types for tokenCountTree', () => { const configWithInvalidType = { output: { tokenCountTree: [], // Should be boolean, number, or string }, }; expect(() => repomixConfigBaseSchema.parse(configWithInvalidType)).toThrow(z.ZodError); }); }); describe('repomixConfigBaseSchema', () => { it('should accept valid base config', () => { const validConfig = { output: { filePath: 'output.txt', style: 'plain', removeComments: true, tokenCountTree: true, }, include: ['**/*.js'], ignore: { useGitignore: true, customPatterns: ['node_modules'], }, security: { enableSecurityCheck: true, }, }; expect(repomixConfigBaseSchema.parse(validConfig)).toEqual(validConfig); }); it('should accept empty object', () => { expect(repomixConfigBaseSchema.parse({})).toEqual({}); }); it('should reject invalid types', () => { const invalidConfig = { output: { filePath: 123, // Should be string style: 'invalid', // Should be 'plain' or 'xml' }, include: 'not-an-array', // Should be an array }; expect(() => repomixConfigBaseSchema.parse(invalidConfig)).toThrow(z.ZodError); }); }); describe('repomixConfigDefaultSchema', () => { it('should accept valid default config', () => { const validConfig = { input: { maxFileSize: 50 * 1024 * 1024, }, output: { filePath: 'output.txt', style: 'plain', parsableStyle: false, fileSummary: true, directoryStructure: true, files: true, removeComments: false, removeEmptyLines: false, compress: false, topFilesLength: 5, showLineNumbers: false, truncateBase64: true, copyToClipboard: true, includeFullDirectoryStructure: false, tokenCountTree: '100', git: { sortByChanges: true, sortByChangesMaxCommits: 100, includeDiffs: false, includeLogs: false, includeLogsCount: 50, }, }, include: [], ignore: { useGitignore: true, useDefaultPatterns: true, customPatterns: [], }, security: { enableSecurityCheck: true, }, tokenCount: { encoding: 'o200k_base', }, }; expect(repomixConfigDefaultSchema.parse(validConfig)).toEqual(validConfig); }); it('should reject incomplete config', () => { const validConfig = {}; expect(() => repomixConfigDefaultSchema.parse(validConfig)).not.toThrow(); }); }); describe('repomixConfigFileSchema', () => { it('should accept valid file config', () => { const validConfig = { output: { filePath: 'custom-output.txt', style: 'xml', }, ignore: { customPatterns: ['*.log'], }, }; expect(repomixConfigFileSchema.parse(validConfig)).toEqual(validConfig); }); it('should accept partial config', () => { const partialConfig = { output: { filePath: 'partial-output.txt', }, }; expect(repomixConfigFileSchema.parse(partialConfig)).toEqual(partialConfig); }); }); describe('repomixConfigCliSchema', () => { it('should accept valid CLI config', () => { const validConfig = { output: { filePath: 'cli-output.txt', showLineNumbers: true, }, include: ['src/**/*.ts'], }; expect(repomixConfigCliSchema.parse(validConfig)).toEqual(validConfig); }); it('should reject invalid CLI options', () => { const invalidConfig = { output: { filePath: 123, // Should be string }, }; expect(() => repomixConfigCliSchema.parse(invalidConfig)).toThrow(z.ZodError); }); }); describe('repomixConfigMergedSchema', () => { it('should accept valid merged config', () => { const validConfig = { cwd: '/path/to/project', input: { maxFileSize: 50 * 1024 * 1024, }, output: { filePath: 'merged-output.txt', style: 'plain', parsableStyle: false, fileSummary: true, directoryStructure: true, files: true, removeComments: true, removeEmptyLines: false, compress: false, topFilesLength: 10, showLineNumbers: true, truncateBase64: true, copyToClipboard: false, includeFullDirectoryStructure: false, tokenCountTree: false, git: { sortByChanges: true, sortByChangesMaxCommits: 100, includeDiffs: false, includeLogs: false, includeLogsCount: 50, }, }, include: ['**/*.js', '**/*.ts'], ignore: { useGitignore: true, useDefaultPatterns: true, customPatterns: ['*.log'], }, security: { enableSecurityCheck: true, }, tokenCount: { encoding: 'o200k_base', }, }; expect(repomixConfigMergedSchema.parse(validConfig)).toEqual(validConfig); }); it('should reject merged config missing required fields', () => { const invalidConfig = { output: { filePath: 'output.txt', // Missing required fields }, }; expect(() => repomixConfigMergedSchema.parse(invalidConfig)).toThrow(z.ZodError); }); it('should reject merged config with invalid types', () => { const invalidConfig = { cwd: '/path/to/project', output: { filePath: 'output.txt', style: 'plain', removeComments: 'not-a-boolean', // Should be boolean removeEmptyLines: false, compress: false, topFilesLength: '5', // Should be number showLineNumbers: false, }, include: ['**/*.js'], ignore: { useGitignore: true, useDefaultPatterns: true, }, security: { enableSecurityCheck: true, }, }; expect(() => repomixConfigMergedSchema.parse(invalidConfig)).toThrow(z.ZodError); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yamadashy/repomix'

If you have feedback or need assistance with the MCP directory API, please join our Discord server