Aller au contenu
← Retour aux projets

Laravel Zero Package Scaffold

laravel-zero-package-scaffold

#laravel-zero-package-scaffold

The file templates and namespace-casing rules shared by package generator CLIs (laravel-package-cli, filament-plugin-cli). Everything here was byte-identical in both binaries before extraction — the LICENSE, .editorconfig, .gitattributes, .gitignore, CHANGELOG, phpstan/phpunit configs, the three reusable GitHub workflows and the README skeleton.

  • No runtime dependencies (only php: ^8.2).
  • Static templates: no state, no container, nothing to register.
  • Namespace casing lives in user config, not in a table compiled into each CLI.

#Installation

composer require jeffersongoncalves/laravel-zero-package-scaffold

#Templates

Every method returns the finished file contents as a string.

Method File
Scaffold::license($author, $year) LICENSE.md
Scaffold::editorconfig() .editorconfig
Scaffold::gitattributes() .gitattributes
Scaffold::gitignore() .gitignore
Scaffold::changelog() CHANGELOG.md
Scaffold::phpstanNeon() phpstan.neon.dist
Scaffold::phpunitXml($suiteName) phpunit.xml.dist
Scaffold::workflowPint($branches) .github/workflows/pint.yml
Scaffold::workflowPhpstan($branches) .github/workflows/phpstan.yml
Scaffold::workflowChangelog() .github/workflows/update-changelog.yml
Scaffold::readme($title, $vendor, $package, $description, $installRequire) README.md

Scaffold::studly($slug) is the plain kebab/snake/space → StudlyCase helper the templates and the namespace resolver share.

Anything that differs between generators — Filament version matrices, per-branch CI, the shape of the generated composer.json — deliberately stays in the CLI that owns it.

#Namespace casing

studly() cannot see camel-case boundaries inside a single lowercase word: jeffersongoncalves becomes Jeffersongoncalves, posthog becomes Posthog. That is per-slug data, not logic, so it lives in one config file the user owns and every generator CLI reads:

{
    "jeffersongoncalves": "JeffersonGoncalves",
    "jeffersonsimaogoncalves": "JeffersonSimaoGoncalves",
    "posthog": "PostHog"
}
use JeffersonGoncalves\LaravelZero\PackageScaffold\Namespaces;

Namespaces::file();                        // ~/.package/vendornamespace.json
Namespaces::segment('jeffersongoncalves'); // JeffersonGoncalves  (from the file)
Namespaces::segment('cep-field');          // CepField            (studly fallback)
Namespaces::all();                         // the whole map, lowercased keys
Behaviour Result
Slug listed in the file The configured casing (slug matched case-insensitively)
Slug not listed Scaffold::studly($slug)
File absent, unreadable, malformed, or not an object Empty map — never an error
Entry that isn't string => string Ignored

Point it somewhere else with the PACKAGE_NAMESPACES_FILE environment variable — which is also how the tests avoid touching a real home directory.

Home resolution reads HOME, then USERPROFILE, then HOMEDRIVE+HOMEPATH, and prefers the first candidate that is an existing directory: some Windows shells export HOME as an MSYS path (/c/Users/...) that PHP cannot stat, and reading config from a bogus home is indistinguishable from an empty map.

Like its sibling laravel-zero-* packages, this one declares no dependency on them, so it carries its own home-dir and JSON reading.

#Testing

composer test

#Changelog

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

#Security

If you discover any security related issues, please see SECURITY.

#Credits

#License

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

Nouvelle version disponible.