Packages

phoenix_kit

1.2.2
1.7.211 1.7.210 1.7.209 1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib mix tasks phoenix_kit.assets.rebuild.ex
Raw

lib/mix/tasks/phoenix_kit.assets.rebuild.ex

defmodule Mix.Tasks.PhoenixKit.Assets.Rebuild do
use Mix.Task
@impl Mix.Task
@spec run([String.t()]) :: :ok
@moduledoc """
Rebuilds assets for PhoenixKit when CSS configuration changes.
This task is designed to rebuild assets when PhoenixKit CSS integration
has been modified or when daisyUI/Tailwind configuration requires updates.
## Usage
$ mix phoenix_kit.assets.rebuild
$ mix phoenix_kit.assets.rebuild --check
$ mix phoenix_kit.assets.rebuild --force
## Options
* `--check` - Only check if rebuild is needed, don't execute
* `--force` - Force rebuild even if not detected as needed
* `--verbose` - Show detailed output during process (default: true)
* `--silent` - Suppress all output except errors
## When to use
This task is automatically called by:
- `mix phoenix_kit.install` (when CSS integration is set up)
- `mix phoenix_kit.update` (when version requires asset changes)
You may need to run it manually when:
- CSS @source directives were manually modified
- Tailwind/daisyUI configuration was changed
- PhoenixKit assets are not displaying correctly
## Examples
# Check if rebuild is needed
mix phoenix_kit.assets.rebuild --check
# Force rebuild all assets
mix phoenix_kit.assets.rebuild --force
# Silent rebuild (only show errors)
mix phoenix_kit.assets.rebuild --silent
## Integration with CSS
This task works closely with CSS integration to determine when rebuilds
are needed based on:
- Changes in @source "../../deps/phoenix_kit" directives
- daisyUI plugin configuration
- PhoenixKit version updates that include CSS changes
"""
alias PhoenixKit.Install.{AssetRebuild, CssIntegration}
@shortdoc "Rebuilds PhoenixKit assets when CSS configuration changes"
@switches [
check: :boolean,
force: :boolean,
verbose: :boolean,
silent: :boolean
]
@aliases [
c: :check,
f: :force,
v: :verbose,
s: :silent
]
def run(argv) do
{opts, _argv, _errors} = OptionParser.parse(argv, switches: @switches, aliases: @aliases)
# Determine verbosity
verbose =
cond do
opts[:silent] -> false
opts[:verbose] -> true
# Default to verbose
true -> true
end
if opts[:check] do
perform_check(verbose)
else
perform_rebuild(opts[:force] || false, verbose)
end
end
# Perform check-only operation
defp perform_check(verbose) do
if verbose do
IO.puts("""
🔍 Checking if PhoenixKit asset rebuild is needed...
""")
end
case AssetRebuild.check_and_rebuild(check_only: true, verbose: verbose) do
:needed ->
IO.puts("""
⚠️ Asset rebuild is NEEDED
Reasons rebuild is recommended:
#{analyze_rebuild_reasons(verbose)}
To rebuild assets, run:
mix phoenix_kit.assets.rebuild
""")
:not_needed ->
IO.puts("""
✅ Asset rebuild is NOT NEEDED
Your PhoenixKit CSS configuration appears to be up to date.
#{check_css_integration_status(verbose)}
""")
end
end
# Perform actual rebuild
defp perform_rebuild(force, verbose) do
if verbose do
IO.puts("""
🎨 PhoenixKit Asset Rebuild
""")
if force do
IO.puts("Force rebuild enabled - will rebuild regardless of checks")
end
end
case AssetRebuild.check_and_rebuild(force: force, verbose: verbose) do
:rebuild_completed ->
if verbose do
IO.puts("""
✅ PhoenixKit assets rebuilt successfully!
Your application should now have the latest CSS integration.
If you're running a dev server, you may need to refresh your browser.
""")
end
:rebuild_failed ->
IO.puts(:stderr, """
❌ Asset rebuild failed
This could be due to:
- Missing 'mix assets.build' task in your project
- Tailwind CSS configuration issues
- Asset compilation errors
To manually rebuild assets, try:
mix assets.build
# or
cd assets && npm run build
""")
:not_needed ->
if verbose do
IO.puts("""
ℹ️ Asset rebuild was not needed
Your PhoenixKit CSS configuration is already up to date.
Use --force to rebuild anyway.
""")
end
end
end
# Analyze and explain why rebuild is needed
@spec analyze_rebuild_reasons(boolean()) :: String.t()
defp analyze_rebuild_reasons(_verbose) do
reasons = collect_rebuild_reasons()
if Enum.empty?(reasons) do
"• General asset compilation recommended for optimal performance"
else
Enum.join(reasons, "\n")
end
end
# Helper function to collect rebuild reasons
@spec collect_rebuild_reasons() :: [String.t()]
defp collect_rebuild_reasons do
base_reasons =
if AssetRebuild.asset_rebuild_needed?(false) do
[
"• PhoenixKit contains daisyUI/theme assets that need compilation",
"• Project uses Tailwind CSS with daisyUI integration",
"• CSS @source directives include PhoenixKit paths"
]
else
[]
end
# Add version-specific reasons
version_reasons =
if AssetRebuild.check_version_requires_rebuild(false) do
["• Current PhoenixKit version includes CSS changes"]
else
[]
end
base_reasons ++ version_reasons
end
# Check CSS integration status for informational purposes
defp check_css_integration_status(_verbose) do
css_paths = [
"assets/css/app.css",
"priv/static/assets/app.css",
"assets/app.css"
]
css_status =
Enum.find_value(css_paths, fn path ->
if File.exists?(path) do
check_file_css_integration(path)
else
nil
end
end)
case css_status do
nil -> "\nNo CSS files found in common locations."
status -> "\n#{status}"
end
rescue
_ -> "\nCould not analyze CSS integration status."
end
# Helper function to check CSS integration in a specific file
defp check_file_css_integration(path) do
content = File.read!(path)
integration_status = CssIntegration.check_existing_integration(content)
integration_details = []
integration_details =
if integration_status.phoenix_kit_source do
integration_details ++ ["@source directives"]
else
integration_details
end
integration_details =
if integration_status.daisyui_plugin do
integration_details ++ ["daisyUI plugin"]
else
integration_details
end
if integration_details != [] do
"Found CSS integration in #{path}: #{Enum.join(integration_details, ", ")}"
else
"No PhoenixKit CSS integration found in #{path}"
end
end
end