Aller au contenu
← Retour aux projets

Laravel Topic Normalizer

Laravel Topic Normalizer

#Laravel Topic Normalizer

Buy Me A Coffee

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Merge raw topic / keyword lists from several sources — GitHub topics, composer.json + package.json keywords, Packagist keywords — into one clean list: slugged, deduplicated, length-filtered and capped.

#Installation

composer require jeffersongoncalves/laravel-topic-normalizer

#Usage

use JeffersonGoncalves\TopicNormalizer\TopicNormalizer;

$topics = TopicNormalizer::normalize(
    $repo['topics'] ?? [],          // GitHub topics
    $composer['keywords'] ?? [],    // composer.json
    $packageJson['keywords'] ?? [], // package.json
);
// => ['laravel', 'filament', 'php-package', …]  (slugged, unique, max 20)

Pass any number of lists. Non-strings are skipped; values are Str::slug()-ed, empties and out-of-range slugs dropped, duplicates removed (first occurrence wins, order preserved), and the result capped.

#Per-call overrides

The config defaults can be overridden per call with named arguments (each falls back to its config value):

$topics = TopicNormalizer::normalize(
    $repo['topics'] ?? [],
    $composer['keywords'] ?? [],
    max: 10,        // cap this call at 10
    maxLength: 30,  // drop slugs longer than 30 chars
    minLength: 2,   // drop single-character noise
);

max_length / min_length are accepted as snake_case aliases. A max of 0 (or less) returns an empty list.

#Configuration

php artisan vendor:publish --tag="topic-normalizer-config"
Key Default Description
max 20 Maximum number of topics returned (0 or less returns nothing).
max_length 50 Slugs longer than this are dropped as junk.
min_length 0 Slugs shorter than this are dropped as junk (0 disables the check).

#Testing

composer test

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

Please see CONTRIBUTING for details.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

Nouvelle version disponible.