Skip to main content

Customization Guide

This guide explains how to customize Project Mapper to better suit your specific needs.

Configuration Options​

Project Mapper provides several configuration options that can be used to customize its behavior.

Command Line Options​

All of these options can be set via the command line interface:

OptionDescriptionDefault
-o, --output <file>Output file pathproject-knowledge-transfer.md
-i, --ignore <patterns...>Additional glob patterns to ignore
-d, --depth <level>Maximum directory depth to analyze10
-f, --format <format>Output format (markdown, json)markdown
-t, --template <n>Knowledge transfer template to usestandard
-v, --verboseEnable verbose output
-s, --semanticEnable semantic analysis of codetrue
--skip-analysisSkip code analysis and use existing analysis file
--analysis-file <file>Path to analysis fileproject-analysis.json
--include-guideInclude LLM knowledge transfer guidefalse
--generate-questionnaireGenerate a context questionnaire for the project
--questionnaire-output <file>Output file for the questionnaireproject-context-questionnaire.md

Programmatic Options​

When using the API, you can provide the same options as objects:

const options = {
template: 'detailed',
format: 'markdown',
includeGuide: true,
ignore: ['node_modules/**', 'dist/**'],
depth: 5,
verbose: true
};

const result = await generateProjectMap('./my-project', options);

Creating Custom Templates​

One of the most powerful ways to customize Project Mapper is by creating your own templates for knowledge transfer documents.

Understanding Template Structure​

Templates are defined in src/knowledge-transfer.js as functions that generate content from analysis data. Here's the structure of a template function:

function generateCustomTemplate(analysis, projectName) {
let content = `# ${projectName} Custom Knowledge Transfer\n\n`;

// Add sections based on analysis data
content += `## Your Section Title\n\n`;
content += `Your section content...\n\n`;

// Return both the content and a list of sections
return {
content,
sections: [
'Your Section Title',
// Other sections...
]
};
}

Adding Your Custom Template​

To add your own template:

  1. Fork the Project Mapper repository
  2. Open src/knowledge-transfer.js
  3. Add your template function
  4. Register it in the TEMPLATES object:
const TEMPLATES = {
standard: generateStandardTemplate,
minimal: generateMinimalTemplate,
detailed: generateDetailedTemplate,
custom: generateCustomTemplate // Add your template here
};
  1. Update the CLI options in src/cli.js to include your new template in the help text

Example: Creating a Custom Template​

Here's an example of a custom template focused on security aspects:

function generateSecurityTemplate(analysis, projectName) {
let content = `# ${projectName} Security Overview\n\n`;

// Project Basics
content += `## Project Identification\n\n`;
content += `**Name:** ${analysis.overview.name || projectName}\n\n`;
content += `**Description:** ${analysis.overview.description || 'No description available'}\n\n`;

// Dependencies (focusing on security aspects)
content += `## Dependencies\n\n`;
if (analysis.package && analysis.package.dependencies) {
content += `### Production Dependencies\n\n`;
content += `| Dependency | Version | Security Notes |\n`;
content += `|------------|---------|---------------|\n`;

Object.entries(analysis.package.dependencies).forEach(([name, version]) => {
content += `| ${name} | ${version} | Needs review |\n`;
});
content += '\n';
}

// Entry Points
content += `## Entry Points\n\n`;
content += `The following files serve as entry points and should be prioritized for security reviews:\n\n`;

if (analysis.structure && analysis.structure.entryPoints) {
analysis.structure.entryPoints.forEach(entry => {
content += `- \`${entry.path}\` (${entry.type})\n`;
});
}
content += '\n';

// Data Processing
content += `## Data Processing\n\n`;
content += `Files that likely handle user input or data processing:\n\n`;

if (analysis.structure && analysis.structure.importantFiles) {
const dataFiles = analysis.structure.importantFiles
.filter(file => file.path.includes('data') ||
file.path.includes('input') ||
file.path.includes('parse'))
.slice(0, 10);

dataFiles.forEach(file => {
content += `- \`${file.path}\` (importance score: ${Math.round(file.score)})\n`;
});
}
content += '\n';

// Return the template result
return {
content,
sections: [
'Project Identification',
'Dependencies',
'Entry Points',
'Data Processing'
]
};
}

// Add to TEMPLATES object
const TEMPLATES = {
// ... existing templates
security: generateSecurityTemplate
};

Customizing Ignore Patterns​

You can customize which files and directories are ignored during analysis.

Default Ignore Patterns​

By default, Project Mapper ignores:

const DEFAULT_IGNORES = [
'node_modules/**',
'.git/**',
'dist/**',
'build/**',
'.vscode/**',
'.idea/**',
'coverage/**',
'**/test/**',
'**/tests/**',
'**/*.min.js',
'**/*.min.css',
'**/*.map',
'package-lock.json',
'yarn.lock',
'pnpm-lock.yaml'
];

Adding Custom Ignore Patterns​

You can add your own ignore patterns:

project-mapper -i "**/*.spec.js" "docs/**" "examples/**"

Or programmatically:

const options = {
ignore: ['**/*.spec.js', 'docs/**', 'examples/**']
};

const result = await generateProjectMap('./my-project', options);

Customizing Semantic Analysis​

You can customize how semantic analysis extracts domain concepts.

Semantic Analysis Options​

const options = {
// Project directory to analyze
projectDir: './my-project',

// Semantic analysis options
semanticOptions: {
// Paths to ignore
ignorePaths: ['node_modules/**', 'dist/**'],

// Include code comments in analysis
includeComments: true,

// Include documentation files in analysis
includeDocs: true,

// Include code identifiers in analysis
includeIdentifiers: true,

// Minimum frequency for a term to be included
minTermFrequency: 2,

// Maximum number of terms to include
maxTerms: 50
}
};

// Perform semantic analysis
const semantics = await analyzeProjectSemantics(options.projectDir, options.semanticOptions);

Filtering Domain Concepts​

You might want to filter domain concepts to focus on specific areas:

// Get semantic analysis
const semantics = await analyzeProjectSemantics('./my-project');

// Filter concepts to those related to a specific domain
const filteredConcepts = semantics.domainConcepts.filter(concept => {
// Only include concepts related to authentication/security
return concept.name.includes('auth') ||
concept.name.includes('secur') ||
concept.name.includes('user') ||
concept.name.includes('login');
});

// Replace the concepts in the semantics object
semantics.domainConcepts = filteredConcepts;

// Use the filtered semantics in knowledge transfer
analysis.semantics = semantics;
const document = await enhancedKnowledgeTransfer(analysis);

Creating Custom Visualizations​

Project Mapper includes several visualization functions