myerscode/package-discovery

There is no license information available for the latest version (1.0.0) of this package.

A package to help find plugins for your product through Composer meta data!

1.0.0 2022-09-25 21:34 UTC

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!

Latest Stable Version Total Downloads License Tests codecov

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.