A service to help easily find plugins for your services, using Composer metadata!
You can install this package via composer:
composer require myerscode/package-discovery
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.
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"
]
}
}
}
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"
]
]
]
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": [ "*" ]
}
}
}
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
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"
]
]
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"
]
]
]
Bug reports and feature requests can be submitted on the Github Issue Tracker.
See the Myerscode contributing page for information.
The MIT License (MIT). Please see License File for more information.