jeffersongoncalves / laravel-topic-normalizer
A tiny Laravel helper that merges raw topic/keyword lists (GitHub topics, composer.json + package.json keywords, Packagist keywords, …) into one slugged, deduplicated, length-filtered and capped list.
Package info
github.com/jeffersongoncalves/laravel-topic-normalizer
pkg:composer/jeffersongoncalves/laravel-topic-normalizer
Requires
- php: ^8.2
- illuminate/contracts: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
- spatie/laravel-package-tools: ^1.14
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.0
- orchestra/testbench: ^9.0|^10.0|^11.0
- pestphp/pest: ^3.7.4|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-06 00:25:32 UTC
README
Laravel Topic Normalizer
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.
