myerscode / package-discovery
A package to help find plugins for your product through Composer meta data!
Requires
- php: ^8.1
- myerscode/utilities-bags: ^2.0
- myerscode/utilities-files: ^2.0
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-11-16 17:35:08 UTC
README
A service to help easily find plugins for your services, using Composer metadata!
Install
You can install this package via composer:
composer require myerscode/package-discovery
Usage
Publishing projects just need to add appropriate metadata in their package, which can be then detected by a consuming
project. A project which wants to disover projects will need to instantiate a Finder
to look up the project namespace.
You will then be able to consume the found metadata in the project as desired.
Publishing project
In your package.json
file, add a object in the extras
object, with a key that relates to the project namespace you
want to discover it.
{ "name": "myerscode/corgis", "extra": { "myerscode": { "corgis": ["Gerald", "Rupert"], "providers": [ "Myerscode\\Corgis\\CorgiProvider" ] } } }
Consuming project
Using the Finder
class, initiate passing in the root path, relative to the vendor
directory.
Then use the discover
method to find all packages that have the given name in its extras field.
$finder = new Finder(__DIR__); // would find all installed packages that have a myerscode namespace in the extras $packages = $finder->discover('myerscode');
After discovering package you would have an array of metadata for each one discovered.
[ "myerscode/corgis" => [ "corgis": ["Gerald", "Rupert"], "providers": [ "Myerscode\\Corgis\\CorgiProvider" ] ] ]
Avoiding discovery
If you don't want to discover a specific project, then you can add some metadata in the consuming package to prevent this.
You would do this by adding the package name to avoid
under the projects namespace in the extras field of package.json
.
{ "name": "myerscode/demo-project", "extra": { "myerscode": { "avoid": [ "myerscode/corgis" ] } } }
If you want to avoid loading in all discoverable packages, simply add *
in the avoid field.
{ "name": "myerscode/demo-project", "extra": { "myerscode": { "avoid": [ "*" ] } } }
Locating a package
When you want to find out where a package is located on the disk, you can use the locate
method to look up its absolute
path.
$finder = new Finder(__DIR__); echo $finder->locate('myerscode/test-package'); // /User/fred/project-name/vendor/myerscode/test-package
Getting package meta for a service
To get package meta for a specific service call the packageMetaForService
method, passing the package name and the service name.
$finder = new Finder(__DIR__); echo $finder->packageMetaForService('myerscode/test-package', 'myerscode'); [ "corgis": ["Gerald", "Rupert"], "providers": [ "Myerscode\\Corgis\\CorgiProvider" ] ]
Getting package extra
To get all the extras data for a package call the packageExtra
method.
$finder = new Finder(__DIR__); echo $finder->packageExtra('myerscode/test-package'); [ "myerscode" => [ "corgis": ["Gerald", "Rupert"], "providers": [ "Myerscode\\Corgis\\CorgiProvider" ] ] ]
Issues
Bug reports and feature requests can be submitted on the Github Issue Tracker.
Contributing
See the Myerscode contributing page for information.
License
The MIT License (MIT). Please see License File for more information.