From 5bf7e6fd430db83879a40d2e47bd3d92099e949b Mon Sep 17 00:00:00 2001 From: awcodes Date: Fri, 7 Jul 2023 16:03:27 -0400 Subject: [PATCH] wip 3.x updates --- .gitattributes | 35 ++++++---- ...le-issues.yml => fix-php-code-styling.yml} | 0 .github/workflows/run-tests.yml | 12 ++-- .gitignore | 1 + bin/build.js | 50 +++++++++++++ composer.json | 13 ++-- configure-stubs/package/package.json | 23 ------ configure-stubs/package/plugin.css | 1 - configure-stubs/package/tailwind.config.js | 9 --- configure-stubs/theme/package.json | 15 ---- configure-stubs/theme/plugin.css | 1 - configure.php | 20 ++---- package-theme.json | 13 ++++ package.json | 23 ++++++ pint.json | 14 ++++ resources/css/skeleton.css | 5 ++ resources/js/plugin.js | 0 resources/{css/.gitkeep => js/skeleton.js} | 0 resources/lang/en/.gitkeep | 0 resources/lang/en/skeleton.php | 5 ++ src/Facades/Skeleton.php | 2 +- src/SkeletonPlugin.php | 36 ++++++++++ src/SkeletonServiceProvider.php | 70 ++++++++----------- src/SkeletonTheme.php | 12 ++-- .../tailwind.config.js => tailwind.config.js | 4 +- 25 files changed, 224 insertions(+), 140 deletions(-) rename .github/workflows/{fix-php-code-style-issues.yml => fix-php-code-styling.yml} (100%) create mode 100644 bin/build.js delete mode 100644 configure-stubs/package/package.json delete mode 100644 configure-stubs/package/plugin.css delete mode 100644 configure-stubs/package/tailwind.config.js delete mode 100644 configure-stubs/theme/package.json delete mode 100644 configure-stubs/theme/plugin.css create mode 100644 package-theme.json create mode 100644 package.json create mode 100644 pint.json create mode 100644 resources/css/skeleton.css delete mode 100644 resources/js/plugin.js rename resources/{css/.gitkeep => js/skeleton.js} (100%) delete mode 100644 resources/lang/en/.gitkeep create mode 100644 resources/lang/en/skeleton.php create mode 100644 src/SkeletonPlugin.php rename configure-stubs/theme/tailwind.config.js => tailwind.config.js (52%) diff --git a/.gitattributes b/.gitattributes index 9e9519b..dcb9f5b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,18 +2,25 @@ # https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html # Ignore all test and documentation with "export-ignore". -/.github export-ignore -/.gitattributes export-ignore -/.gitignore export-ignore -/phpunit.xml.dist export-ignore -/art export-ignore -/docs export-ignore -/tests export-ignore -/.editorconfig export-ignore -/.php_cs.dist.php export-ignore -/psalm.xml export-ignore -/psalm.xml.dist export-ignore -/testbench.yaml export-ignore -/UPGRADING.md export-ignore -/phpstan.neon.dist export-ignore +/.github export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/.idea export-ignore +/.prettierrc export-ignore +/.package-lock.json export-ignore +/.editorconfig export-ignore +/.php_cs.dist.php export-ignore +/phpunit.xml.dist export-ignore +/art export-ignore +/docs export-ignore +/tests export-ignore +/psalm.xml export-ignore +/psalm.xml.dist export-ignore +/testbench.yaml export-ignore +/UPGRADING.md export-ignore +/phpstan.neon.dist export-ignore /phpstan-baseline.neon export-ignore +/images export-ignore +/package.json export-ignore +/postcss.config.js export-ignore +/tailwind.config.js export-ignore diff --git a/.github/workflows/fix-php-code-style-issues.yml b/.github/workflows/fix-php-code-styling.yml similarity index 100% rename from .github/workflows/fix-php-code-style-issues.yml rename to .github/workflows/fix-php-code-styling.yml diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 20dfd1e..1295711 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -2,9 +2,7 @@ name: Run Tests on: push: - branches: [main] pull_request: - branches: [main] jobs: test: @@ -13,10 +11,12 @@ jobs: fail-fast: true matrix: os: [ubuntu-latest, windows-latest] - php: [8.1] - laravel: [9.*] - stability: [prefer-lowest, prefer-stable] + php: [8.2, 8.1] + laravel: [10.*, 9.*] + stability: [prefer-stable] include: + - laravel: 10.* + testbench: 8.* - laravel: 9.* testbench: 7.* @@ -44,4 +44,4 @@ jobs: composer update --${{ matrix.stability }} --prefer-dist --no-interaction - name: Execute tests - run: vendor/bin/pest + run: ./vendor/bin/pest --verbose diff --git a/.gitignore b/.gitignore index 83c9b9f..6fdb03b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea .phpunit.result.cache +.DS_Store build composer.lock coverage diff --git a/bin/build.js b/bin/build.js new file mode 100644 index 0000000..374c1e3 --- /dev/null +++ b/bin/build.js @@ -0,0 +1,50 @@ +import * as esbuild from 'esbuild' + +const isDev = process.argv.includes('--dev') + +async function compile(options) { + const context = await esbuild.context(options) + + if (isDev) { + await context.watch() + } else { + await context.rebuild() + await context.dispose() + } +} + +const defaultOptions = { + define: { + 'process.env.NODE_ENV': isDev ? `'development'` : `'production'`, + }, + bundle: true, + mainFields: ['module', 'main'], + platform: 'neutral', + sourcemap: isDev ? 'inline' : false, + sourcesContent: isDev, + treeShaking: true, + target: ['es2020'], + minify: !isDev, + plugins: [{ + name: 'watchPlugin', + setup: function (build) { + build.onStart(() => { + console.log(`Build started at ${new Date(Date.now()).toLocaleTimeString()}: ${build.initialOptions.outfile}`) + }) + + build.onEnd((result) => { + if (result.errors.length > 0) { + console.log(`Build failed at ${new Date(Date.now()).toLocaleTimeString()}: ${build.initialOptions.outfile}`, result.errors) + } else { + console.log(`Build finished at ${new Date(Date.now()).toLocaleTimeString()}: ${build.initialOptions.outfile}`) + } + }) + } + }], +} + +compile({ + ...defaultOptions, + entryPoints: ['./resources/js/skeleton.js'], + outfile: './resources/dist/skeleton.js', +}) diff --git a/composer.json b/composer.json index 97073df..1f85b2b 100644 --- a/composer.json +++ b/composer.json @@ -24,22 +24,21 @@ "filament/filament": "^3.0", "filament/forms": "^3.0", "filament/tables": "^3.0", - "spatie/laravel-package-tools": "^1.13.5", + "spatie/laravel-package-tools": "^1.15.0", "illuminate/contracts": "^9.0|^10.0" }, "require-dev": { "laravel/pint": "^1.0", - "nunomaduro/collision": "^6.0", + "nunomaduro/collision": "^6.0|^7.0", "nunomaduro/larastan": "^2.0.1", "orchestra/testbench": "^7.0", - "pestphp/pest": "^1.21", - "pestphp/pest-plugin-laravel": "^1.1", - "pestphp/pest-plugin-livewire": "^1.0", - "pestphp/pest-plugin-parallel": "^0.3", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "pestphp/pest-plugin-livewire": "^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^9.5|^10.0", "spatie/laravel-ray": "^1.26" }, "autoload": { diff --git a/configure-stubs/package/package.json b/configure-stubs/package/package.json deleted file mode 100644 index c08ba0e..0000000 --- a/configure-stubs/package/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "private": true, - "scripts": { - "dev:styles": "npx tailwindcss -i resources/css/plugin.css -o resources/dist/skeleton.css --postcss --watch", - "dev:scripts": "esbuild resources/js/plugin.js --bundle --sourcemap=inline --outfile=resources/dist/skeleton.js --watch", - "build:styles": "npx tailwindcss -i resources/css/plugin.css -o resources/dist/skeleton.css --postcss --minify && npm run purge", - "build:scripts": "esbuild resources/js/plugin.js --bundle --minify --outfile=resources/dist/skeleton.js", - "purge": "filament-purge -i resources/dist/skeleton.css -o resources/dist/skeleton.css", - "dev": "npm-run-all --parallel dev:*", - "build": "npm-run-all build:*" - }, - "devDependencies": { - "@awcodes/filament-plugin-purge": "^1.0.2", - "autoprefixer": "^10.4.7", - "esbuild": "^0.8.57", - "npm-run-all": "^4.1.5", - "postcss": "^8.4.14", - "postcss-import": "^15.0.0", - "prettier": "^2.7.1", - "prettier-plugin-tailwindcss": "^0.1.13", - "tailwindcss": "^3.2" - } -} diff --git a/configure-stubs/package/plugin.css b/configure-stubs/package/plugin.css deleted file mode 100644 index 65dd5f6..0000000 --- a/configure-stubs/package/plugin.css +++ /dev/null @@ -1 +0,0 @@ -@tailwind utilities; diff --git a/configure-stubs/package/tailwind.config.js b/configure-stubs/package/tailwind.config.js deleted file mode 100644 index c6d238e..0000000 --- a/configure-stubs/package/tailwind.config.js +++ /dev/null @@ -1,9 +0,0 @@ -const preset = require('./vendor/filament/filament/tailwind.config.preset') - -module.exports = { - presets: [preset], - content: ['./resources/**/*.{blade.php,js}'], - corePlugins: { - preflight: false, - }, -} diff --git a/configure-stubs/theme/package.json b/configure-stubs/theme/package.json deleted file mode 100644 index 6922d50..0000000 --- a/configure-stubs/theme/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "private": true, - "scripts": { - "dev": "npx tailwindcss -i resources/css/plugin.css -o resources/dist/skeleton.css --postcss --watch", - "build": "npx tailwindcss -i resources/css/plugin.css -o resources/dist/skeleton.css --postcss --minify" - }, - "devDependencies": { - "autoprefixer": "^10.4.7", - "postcss": "^8.4.14", - "postcss-import": "^15.0.0", - "prettier": "^2.7.1", - "prettier-plugin-tailwindcss": "^0.1.13", - "tailwindcss": "^3.2" - } -} diff --git a/configure-stubs/theme/plugin.css b/configure-stubs/theme/plugin.css deleted file mode 100644 index 1f7b952..0000000 --- a/configure-stubs/theme/plugin.css +++ /dev/null @@ -1 +0,0 @@ -@import "../../vendor/filament/filament/resources/css/index.css"; diff --git a/configure.php b/configure.php index b76cb0c..4442e50 100644 --- a/configure.php +++ b/configure.php @@ -32,7 +32,7 @@ $description = ask('Package description'); $usePhpStan = confirm('Enable PhpStan?', true); $usePint = confirm('Enable Pint?', true); $useDependabot = confirm('Enable Dependabot?', true); -$useLaravelRay = confirm('Use Ray for debugging?', true); +$useLaravelRay = confirm('Enable Ray?', true); $useUpdateChangelogWorkflow = confirm('Use automatic changelog updater workflow?', true); $isTheme = confirm('Is this a custom theme?'); @@ -51,7 +51,7 @@ writeln("\e[1;37mPackages & Utilities\e[0m"); writeln('Larastan/PhpStan : '.($usePhpStan ? "\e[0;32mYes" : "\e[0;31mNo")."\e[0m"); writeln('Pint : '.($usePint ? "\e[0;32mYes" : "\e[0;31mNo")."\e[0m"); writeln('Use Dependabot : '.($useDependabot ? "\e[0;32mYes" : "\e[0;31mNo")."\e[0m"); -writeln('Use Ray App : '.($useLaravelRay ? "\e[0;32mYes" : "\e[0;31mNo")."\e[0m"); +writeln('Use Ray : '.($useLaravelRay ? "\e[0;32mYes" : "\e[0;31mNo")."\e[0m"); writeln('Auto-Changelog : '.($useUpdateChangelogWorkflow ? "\e[0;32mYes" : "\e[0;31mNo")."\e[0m"); if ($formsOnly) { writeln("Filament/Forms : \e[0;32mYes\e[0m"); @@ -71,6 +71,7 @@ if (! confirm('Modify files?', true)) { if ($formsOnly) { safeUnlink(__DIR__.'/src/SkeletonTheme.php'); + safeUnlink(__DIR__.'/src/SkeletonPlugin.php'); remove_composer_filament_deps([ 'filament/filament', @@ -78,6 +79,7 @@ if ($formsOnly) { ]); } elseif ($tablesOnly) { safeUnlink(__DIR__.'/src/SkeletonTheme.php'); + safeUnlink(__DIR__.'/src/SkeletonPlugin.php'); remove_composer_filament_deps([ 'filament/filament', @@ -86,6 +88,7 @@ if ($formsOnly) { } else { if ($isTheme) { safeUnlink(__DIR__.'/src/SkeletonServiceProvider.php'); + safeUnlink(__DIR__.'/src/SkeletonPlugin.php'); safeUnlink(__DIR__.'/src/Skeleton.php'); removeDirectory(__DIR__.'/config'); removeDirectory(__DIR__.'/database'); @@ -106,16 +109,6 @@ if ($formsOnly) { ]); } -if ($isTheme) { - copy(__DIR__.'/configure-stubs/theme/package.json', __DIR__.'/package.json'); - copy(__DIR__.'/configure-stubs/theme/plugin.css', __DIR__.'/resources/css/plugin.css'); - copy(__DIR__.'/configure-stubs/theme/tailwind.config.js', __DIR__.'/tailwind.config.js'); -} else { - copy(__DIR__.'/configure-stubs/package/package.json', __DIR__.'/package.json'); - copy(__DIR__.'/configure-stubs/package/plugin.css', __DIR__.'/resources/css/plugin.css'); - copy(__DIR__.'/configure-stubs/package/tailwind.config.js', __DIR__.'/tailwind.config.js'); -} - $files = (str_starts_with(strtoupper(PHP_OS), 'WIN') ? replaceForWindows() : replaceForAllOtherOSes()); foreach ($files as $file) { @@ -138,6 +131,7 @@ foreach ($files as $file) { str_contains($file, determineSeparator('src/Skeleton.php')) => rename($file, determineSeparator('./src/'.$className.'.php')), str_contains($file, determineSeparator('src/SkeletonServiceProvider.php')) => rename($file, determineSeparator('./src/'.$className.'ServiceProvider.php')), str_contains($file, determineSeparator('src/SkeletonTheme.php')) => rename($file, determineSeparator('./src/'.$className.'Theme.php')), + str_contains($file, determineSeparator('src/SkeletonPlugin.php')) => rename($file, determineSeparator('./src/'.$className.'Plugin.php')), str_contains($file, determineSeparator('src/Facades/Skeleton.php')) => rename($file, determineSeparator('./src/Facades/'.$className.'.php')), str_contains($file, determineSeparator('src/Commands/SkeletonCommand.php')) => rename($file, determineSeparator('./src/Commands/'.$className.'Command.php')), str_contains($file, determineSeparator('src/Testing/TestsSkeleton.php')) => rename($file, determineSeparator('./src/Testing/Tests'.$className.'.php')), @@ -177,6 +171,7 @@ if (! $usePhpStan) { if (! $usePint) { safeUnlink(__DIR__.'/.github/workflows/fix-php-code-style-issues.yml'); + safeUnlink(__DIR__.'/pint.json'); remove_composer_deps([ 'laravel/pint', @@ -192,7 +187,6 @@ if (! $useUpdateChangelogWorkflow) { confirm('Execute `composer install` and run tests?') && run('composer install && composer test'); if (confirm('Let this script delete itself?', true)) { - removeDirectory(__DIR__.'/configure-stubs'); unlink(__FILE__); } diff --git a/package-theme.json b/package-theme.json new file mode 100644 index 0000000..bfe2d9e --- /dev/null +++ b/package-theme.json @@ -0,0 +1,13 @@ +{ + "private": true, + "scripts": { + "dev": "npx tailwindcss -i resources/css/skeleton.css -o resources/dist/skeleton.css --postcss --watch", + "build": "npx tailwindcss -i resources/css/skeleton.css -o resources/dist/skeleton.css --postcss --minify" + }, + "devDependencies": { + "autoprefixer": "^10.4.7", + "postcss": "^8.4.14", + "postcss-import": "^15.0.0", + "tailwindcss": "^3.3.2" + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..03b470c --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "private": true, + "scripts": { + "dev:styles": "npx tailwindcss -i resources/css/skeleton.css -o resources/dist/skeleton.css --postcss --watch", + "dev:scripts": "node bin/build.js --dev", + "build:styles": "npx tailwindcss -i resources/css/skeleton.css -o resources/dist/skeleton.css --postcss --minify && npm run purge", + "build:scripts": "node bin/build.js", + "purge": "filament-purge -i resources/dist/skeleton.css -o resources/dist/skeleton.css -v 3.x", + "dev": "npm-run-all --parallel dev:*", + "build": "npm-run-all build:*" + }, + "devDependencies": { + "@awcodes/filament-plugin-purge": "^1.1.1", + "autoprefixer": "^10.4.7", + "esbuild": "^0.17.19", + "npm-run-all": "^4.1.5", + "postcss": "^8.4.14", + "postcss-import": "^15.0.0", + "prettier": "^2.7.1", + "prettier-plugin-tailwindcss": "^0.1.13", + "tailwindcss": "^3.3.2" + } +} diff --git a/pint.json b/pint.json new file mode 100644 index 0000000..c6ddb49 --- /dev/null +++ b/pint.json @@ -0,0 +1,14 @@ +{ + "preset": "laravel", + "rules": { + "blank_line_before_statement": true, + "concat_space": { + "spacing": "one" + }, + "method_argument_space": true, + "single_trait_insert_per_statement": true, + "types_spaces": { + "space": "single" + } + } +} diff --git a/resources/css/skeleton.css b/resources/css/skeleton.css new file mode 100644 index 0000000..cd6d01a --- /dev/null +++ b/resources/css/skeleton.css @@ -0,0 +1,5 @@ +@import '../../vendor/filament/forms/dist/index.css'; + +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/js/plugin.js b/resources/js/plugin.js deleted file mode 100644 index e69de29..0000000 diff --git a/resources/css/.gitkeep b/resources/js/skeleton.js similarity index 100% rename from resources/css/.gitkeep rename to resources/js/skeleton.js diff --git a/resources/lang/en/.gitkeep b/resources/lang/en/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/resources/lang/en/skeleton.php b/resources/lang/en/skeleton.php new file mode 100644 index 0000000..3ac44ad --- /dev/null +++ b/resources/lang/en/skeleton.php @@ -0,0 +1,5 @@ +getId()); + } +} diff --git a/src/SkeletonServiceProvider.php b/src/SkeletonServiceProvider.php index 882cfb5..c54f9a5 100644 --- a/src/SkeletonServiceProvider.php +++ b/src/SkeletonServiceProvider.php @@ -2,7 +2,7 @@ namespace VendorName\Skeleton; -use Filament\Context; +use Filament\Panel; use Filament\Facades\Filament; use Filament\Support\Assets\AlpineComponent; use Filament\Support\Assets\Asset; @@ -58,52 +58,50 @@ class SkeletonServiceProvider extends PackageServiceProvider } } - public function packageRegistered(): void + public function register(): void { - // Facade Registration - $this->app->bind('skeleton', function (): Skeleton { + parent::register(); + + // Facade Registration + app()->bind('skeleton', function (): Skeleton { return new Skeleton(); }); - - // Context Registration - $this->app->resolving('skeleton', function () { - foreach ($this->getContexts() as $context) { - Filament::registerContext($context); - } - }); - - // Asset Registration - $this->app->resolving(AssetManager::class, function () { - FilamentAsset::register($this->getAssets(), $this->getAssetPackage()); - FilamentAsset::registerScriptData($this->getScriptData(), $this->getAssetPackage()); - }); - - // Icon Registration - $this->app->resolving(IconManager::class, function () { - FilamentIcon::register($this->getIcons()); - }); } - public function packageBooted(): void + public function boot(): void { - $this->registerMacros(); + parent::boot(); - // Handle Stubs - if ($this->app->runningInConsole()) { + // Asset Registration + FilamentAsset::register( + $this->getAssets(), + $this->getAssetPackage() + ); + + FilamentAsset::registerScriptData( + $this->getScriptData(), + $this->getAssetPackage() + ); + + // Icon Registration + FilamentIcon::register($this->getIcons()); + + // Handle Stubs + if (app()->runningInConsole()) { foreach (app(Filesystem::class)->files(__DIR__.'/../stubs/') as $file) { $this->publishes([ $file->getRealPath() => base_path("stubs/skeleton/{$file->getFilename()}"), - ], 'forms-stubs'); + ], 'skeleton-stubs'); } } - // Testing + // Testing TestableLivewire::mixin(new TestsSkeleton()); } protected function getAssetPackage(): ?string { - return static::$name ?? null; + return ':vendor_slug/:package_slug'; } /** @@ -112,7 +110,7 @@ class SkeletonServiceProvider extends PackageServiceProvider protected function getAssets(): array { return [ - // AlpineComponent::make('skeleton', __DIR__ . '/../resources/dist/components/skeleton.js'), + // AlpineComponent::make('skeleton', __DIR__ . '/../resources/dist/components/skeleton.js'), Css::make('skeleton-styles', __DIR__.'/../resources/dist/skeleton.js'), Js::make('skeleton-scripts', __DIR__.'/../resources/dist/skeleton.js'), ]; @@ -128,14 +126,6 @@ class SkeletonServiceProvider extends PackageServiceProvider ]; } - /** - * @return array - */ - protected function getContexts(): array - { - return []; - } - /** * @return array */ @@ -169,8 +159,4 @@ class SkeletonServiceProvider extends PackageServiceProvider 'create_skeleton_table', ]; } - - protected function registerMacros(): void - { - } } diff --git a/src/SkeletonTheme.php b/src/SkeletonTheme.php index 7cf21b4..ade8356 100644 --- a/src/SkeletonTheme.php +++ b/src/SkeletonTheme.php @@ -2,7 +2,7 @@ namespace VendorName; -use Filament\Context; +use Filament\Panel; use Filament\Contracts\Plugin; use Filament\Support\Assets\Theme; use Filament\Support\Color; @@ -15,26 +15,24 @@ class Skeleton implements Plugin return 'skeleton-theme'; } - public function register(Context $context): void + public function register(Panel $panel): void { FilamentAsset::register([ Theme::make('skeleton', __DIR__.'/../resources/dist/skeleton.css'), ]); - $context + $panel ->font('DM Sans') ->primaryColor(Color::Amber) ->secondaryColor(Color::Gray) ->warningColor(Color::Amber) ->dangerColor(Color::Rose) ->successColor(Color::Green) - ->grayColor(Color::Slate) - ->sidebarWidth('20rem') - ->collapsedSidebarWidth('5.4rem') + ->grayColor(Color::Gray) ->theme('skeleton'); } - public function boot(Context $context): void + public function boot(Panel $panel): void { // } diff --git a/configure-stubs/theme/tailwind.config.js b/tailwind.config.js similarity index 52% rename from configure-stubs/theme/tailwind.config.js rename to tailwind.config.js index 1b10da1..7ae2ac4 100644 --- a/configure-stubs/theme/tailwind.config.js +++ b/tailwind.config.js @@ -3,6 +3,8 @@ const preset = require('./vendor/filament/filament/tailwind.config.preset') module.exports = { presets: [preset], content: [ - './vendor/filament/**/*.blade.php' + './app/Filament/**/*.php', + './resources/views/filament/**/*.blade.php', + './vendor/filament/**/*.blade.php', ], }