concept-labs / composer
(C)oncept-Labs Composer Helper
Requires
- php: >=8.0
Requires (Dev)
- pestphp/pest: ^2.0
- phpunit/phpunit: ^10.0|^11.0
Suggests
- concept-labs/singularity: PSR Container. Powerfull aAnd Flexable Dependency Injection pack
README
A lightweight PHP library that provides convenient helper methods for working with Composer metadata and project information.
Features
- 🚀 Get vendor and project root directories
- 📦 Access composer.json data programmatically
- 🔍 Check if packages are installed
- 🎯 Retrieve package metadata (name, description, version)
- 🏗️ Access PSR-4 autoload configuration
- ✅ Fully tested with PHPUnit and PEST
- 💯 100% code coverage
Installation
Install via Composer:
composer require concept-labs/composer
Requirements
- PHP 8.0 or higher
- Composer installed and autoloader loaded
Quick Start
<?php
use Concept\Composer\Composer;
// Get the vendor directory
$vendorDir = Composer::getVendorDir();
echo "Vendor: {$vendorDir}\n";
// Get the project root directory
$rootDir = Composer::getRootDir();
echo "Root: {$rootDir}\n";
// Get package name
$packageName = Composer::getPackageName();
echo "Package: {$packageName}\n";
// Check if a package is installed
if (Composer::isPackageInstalled('symfony/console')) {
echo "Symfony Console is installed!\n";
}
Usage
Getting Directory Paths
// Get vendor directory
$vendorDir = Composer::getVendorDir();
// Returns: /path/to/project/vendor
// Get project root directory (parent of vendor)
$rootDir = Composer::getRootDir();
// Returns: /path/to/project
// Get composer.json file path
$composerJsonPath = Composer::getComposerJsonPath();
// Returns: /path/to/project/composer.json
Accessing Composer Metadata
// Get all composer.json data as array
$data = Composer::getComposerData();
// Returns: ['name' => 'vendor/package', 'type' => 'library', ...]
// Get package name
$name = Composer::getPackageName();
// Returns: "concept-labs/composer"
// Get package description
$description = Composer::getPackageDescription();
// Returns: "(C)oncept-Labs Composer Helper"
// Get package version (if defined in composer.json)
$version = Composer::getPackageVersion();
// Returns: "1.0.0" or null if not set
Working with Autoload Configuration
// Get PSR-4 autoload namespaces
$psr4 = Composer::getAutoloadPsr4();
// Returns: ['Concept\\Composer\\' => 'src/']
// Get PSR-4 autoload-dev namespaces
$psr4Dev = Composer::getAutoloadDevPsr4();
// Returns: ['Concept\\Composer\\Test\\' => 'tests/']
Checking Package Installation
// Check if a package is installed
$isInstalled = Composer::isPackageInstalled('symfony/console');
// Returns: true or false
// Check multiple packages
$packages = ['symfony/console', 'phpunit/phpunit', 'pestphp/pest'];
foreach ($packages as $package) {
if (Composer::isPackageInstalled($package)) {
echo "{$package} is installed\n";
}
}
Cache Management
The Composer class caches loaded data for better performance. You can reset the cache if needed:
// Reset all cached data
Composer::reset();
// After reset, next call will reload data
$vendorDir = Composer::getVendorDir();
Error Handling
The library throws exceptions for error conditions:
use Concept\Composer\Composer;
try {
$data = Composer::getComposerData();
} catch (\RuntimeException $e) {
// Handle errors:
// - Composer not loaded
// - composer.json not found
// - Invalid JSON in composer.json
echo "Error: {$e->getMessage()}\n";
}
Testing
The library is fully tested with both PHPUnit and PEST:
Run PEST Tests
composer test
# or
vendor/bin/pest
Run PHPUnit Tests
composer test:unit
# or
vendor/bin/pest --phpunit
Run Specific Test Suite
# Run only unit tests
vendor/bin/pest tests/Unit
# Run only feature tests
vendor/bin/pest tests/Feature
Documentation
For more detailed documentation, see the docs directory:
- API Reference - Complete API documentation
- Examples - Usage examples and patterns
- Best Practices - Recommended usage patterns
- Testing Guide - How to test your code with this library
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Setup
# Clone the repository
git clone https://github.com/Concept-Labs/composer.git
cd composer
# Install dependencies
composer install
# Run tests
composer test
License
This project is licensed under the MIT License - see the LICENSE file for details.
Authors
- Viktor Halytskyi - concept.galitsky@gmail.com
Support
If you encounter any issues or have questions, please file an issue on the GitHub issue tracker.
Changelog
See CHANGELOG.md for a list of changes.