Packages

phoenix_kit

1.7.27
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 phoenix_kit install endpoint_integration.ex
Raw

lib/phoenix_kit/install/endpoint_integration.ex

defmodule PhoenixKit.Install.EndpointIntegration do
@moduledoc """
Endpoint integration for PhoenixKit installation.
Previously, this module added the `phoenix_kit_socket()` macro to the parent app's
endpoint. This is no longer needed as the Sync websocket is now handled automatically
via `phoenix_kit_routes()` in the router.
This module now removes any existing deprecated `phoenix_kit_socket()` calls from
endpoints during installation/updates.
"""
use PhoenixKit.Install.IgniterCompat
alias Igniter.Code.{Common, Function}
alias Igniter.Project.Application
alias Igniter.Project.Module, as: IgniterModule
alias PhoenixKit.Install.IgniterHelpers
@doc """
Removes deprecated `phoenix_kit_socket()` and its import from the endpoint.
The `phoenix_kit_socket()` macro is deprecated. Sync websocket is now handled
automatically via `phoenix_kit_routes()` in the router.
## Parameters
- `igniter` - The igniter context
## Returns
Updated igniter with deprecated socket code and import removed.
"""
def add_endpoint_integration(igniter) do
case find_endpoint(igniter) do
{igniter, nil} ->
# No endpoint found, nothing to clean up
igniter
{igniter, endpoint_module} ->
igniter
|> remove_deprecated_socket(endpoint_module)
|> remove_deprecated_import(endpoint_module)
end
end
# Find endpoint module
defp find_endpoint(igniter) do
case Application.app_name(igniter) do
:phoenix_kit ->
{igniter, nil}
_app_name ->
endpoint_module = IgniterHelpers.get_parent_app_module_web_endpoint(igniter)
case IgniterModule.module_exists(igniter, endpoint_module) do
{true, igniter} ->
{igniter, endpoint_module}
{false, igniter} ->
{igniter, nil}
end
end
end
# Remove phoenix_kit_socket() if it exists
defp remove_deprecated_socket(igniter, endpoint_module) do
IgniterModule.find_and_update_module!(igniter, endpoint_module, fn zipper ->
case Function.move_to_function_call(zipper, :phoenix_kit_socket, 0) do
{:ok, socket_zipper} ->
# Remove the deprecated phoenix_kit_socket() call
zipper_after_removal = Sourceror.Zipper.remove(socket_zipper)
{:ok, zipper_after_removal}
:error ->
# phoenix_kit_socket() not found, nothing to remove
{:ok, zipper}
end
end)
end
# Remove import PhoenixKitWeb.Integration if it exists
defp remove_deprecated_import(igniter, endpoint_module) do
IgniterModule.find_and_update_module!(igniter, endpoint_module, fn zipper ->
case find_integration_import(zipper) do
{:ok, import_zipper} ->
# Remove the deprecated import
zipper_after_removal = Sourceror.Zipper.remove(import_zipper)
{:ok, zipper_after_removal}
:error ->
# Import not found, nothing to remove
{:ok, zipper}
end
end)
end
# Find import PhoenixKitWeb.Integration
defp find_integration_import(zipper) do
Function.move_to_function_call(zipper, :import, 1, fn call_zipper ->
case Function.move_to_nth_argument(call_zipper, 0) do
{:ok, arg_zipper} -> Common.nodes_equal?(arg_zipper, PhoenixKitWeb.Integration)
:error -> false
end
end)
end
end