diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ddea126bf56..2786a3ae1ae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: mix docs - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4.7.6 + uses: JamesIves/github-pages-deploy-action@v4.8.0 with: branch: gh-pages # The branch the action should deploy to. folder: doc # The folder the action should deploy. diff --git a/Dockerfile b/Dockerfile index c49ec58f27a..c2079203317 100644 --- a/Dockerfile +++ b/Dockerfile @@ -66,12 +66,12 @@ RUN mix lightning.install_adaptor_icons RUN mix lightning.install_schemas RUN npm install --prefix assets -# compile assets -RUN mix assets.deploy - # Compile the release RUN mix compile +# compile assets +RUN mix assets.deploy + # Changes to config/runtime.exs don't require recompiling the code COPY config/runtime.exs config/ diff --git a/assets/js/app.js b/assets/js/app.js index e21ddcdbed0..864ad3d5d61 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -28,6 +28,7 @@ import * as Sentry from '@sentry/react'; import { enableMapSet } from 'immer'; import { Socket } from 'phoenix'; import { LiveSocket } from 'phoenix_live_view'; +import { hooks as colocatedHooks } from 'phoenix-colocated/lightning'; import topbar from '../vendor/topbar.cjs'; @@ -55,6 +56,7 @@ window.sentry = sentry; const hooks = { LogViewer, ...Hooks, + ...colocatedHooks, }; // @ts-ignore diff --git a/config/config.exs b/config/config.exs index bf2a1de80c3..00eb7eef22b 100644 --- a/config/config.exs +++ b/config/config.exs @@ -23,8 +23,7 @@ config :hammer, config :lightning, LightningWeb.Endpoint, url: [host: "localhost"], render_errors: [ - view: LightningWeb.ErrorView, - accepts: ~w(html json), + formats: [html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON], layout: false ], pubsub_server: Lightning.PubSub, @@ -101,6 +100,7 @@ config :esbuild, --external:path --external:/fonts/* --external:/images/* + --alias:@=. js/app.js js/storybook.js js/editor/Editor.tsx @@ -131,7 +131,9 @@ config :esbuild, end end), cd: Path.expand("../assets", __DIR__), - env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)} + env: %{ + "NODE_PATH" => [Path.expand("../deps", __DIR__), Mix.Project.build_path()] + } ] # https://fly.io/phoenix-files/tailwind-standalone/ diff --git a/config/dev.exs b/config/dev.exs index ad4124a0307..38bcf3b0e8a 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -127,6 +127,11 @@ config :phoenix, :stacktrace_depth, 20 # Initialize plugs at runtime for faster development compilation config :phoenix, :plug_init_mode, :runtime +config :phoenix_live_view, + debug_heex_annotations: true, + debug_attributes: true, + enable_expensive_runtime_checks: true + config :lightning, :is_resettable_demo, true config :lightning, :apollo, endpoint: "http://localhost:3000", timeout: 30_000 diff --git a/lib/lightning_web/components/viewers.ex b/lib/lightning_web/components/viewers.ex index bc9331a263b..d8f413f1b8b 100644 --- a/lib/lightning_web/components/viewers.ex +++ b/lib/lightning_web/components/viewers.ex @@ -16,7 +16,7 @@ defmodule LightningWeb.Components.Viewers do import React alias Lightning.Invocation.Dataclip - alias LightningWeb.Components.Icon + # alias LightningWeb.Components.Icon alias Phoenix.LiveView.JS require Lightning.Run @@ -340,39 +340,6 @@ defmodule LightningWeb.Components.Viewers do """ end - attr :id, :string, required: true - - attr :type, :atom, - default: nil, - values: [nil | Dataclip.source_types()] - - defp dataclip_type(assigns) do - assigns = - assign(assigns, - icon: Icon.dataclip_icon_class(assigns.type), - color: Icon.dataclip_icon_color(assigns.type) - ) - - ~H""" -
- -
- <.icon :if={@icon} name={@icon} class="h-4 w-4 inline-block align-middle" /> -
-
- """ - end - defp step_finished?(%{finished_at: %_{}}), do: true defp step_finished?(_other), do: false diff --git a/lib/lightning_web/controllers/api/provisioning_controller.ex b/lib/lightning_web/controllers/api/provisioning_controller.ex index d993d4b3ac3..86211860e92 100644 --- a/lib/lightning_web/controllers/api/provisioning_controller.ex +++ b/lib/lightning_web/controllers/api/provisioning_controller.ex @@ -87,7 +87,7 @@ defmodule LightningWeb.API.ProvisioningController do {:error, error} -> conn |> put_status(:forbidden) - |> put_view(LightningWeb.ErrorView) + |> put_view(json: LightningWeb.ErrorJSON) |> render(:"403", error: case error do diff --git a/lib/lightning_web/views/error_view.ex b/lib/lightning_web/controllers/error_html.ex similarity index 64% rename from lib/lightning_web/views/error_view.ex rename to lib/lightning_web/controllers/error_html.ex index 938d9f5389e..ad3a0644c59 100644 --- a/lib/lightning_web/views/error_view.ex +++ b/lib/lightning_web/controllers/error_html.ex @@ -1,14 +1,11 @@ -defmodule LightningWeb.ErrorView do +defmodule LightningWeb.ErrorHTML do @moduledoc false - # This module needs to be changed to use Layouts - use LightningWeb, :view - - use Phoenix.Component + use LightningWeb, :html def render("404.html", assigns) do ~H""" - <.logo_bar conn={@conn} /> + <.logo_bar />
@@ -26,7 +23,7 @@ defmodule LightningWeb.ErrorView do def render("401.html", assigns) do ~H""" - <.logo_bar conn={@conn} /> + <.logo_bar />
@@ -37,7 +34,7 @@ defmodule LightningWeb.ErrorView do :if={assigns[:error]} class="mt-4 p-4 text-xs font-mono text-gray-600 border rounded-md bg-gray-200 grid grid-cols-2 gap-2" > - <%= for {k,v} <- @error do %> + <%= for {k, v} <- @error do %>
{k}
{v}
<% end %> @@ -48,6 +45,10 @@ defmodule LightningWeb.ErrorView do """ end + def render(template, _assigns) do + Phoenix.Controller.status_message_from_template(template) + end + defp logo_bar(assigns) do ~H""" """ end - - # By default, Phoenix returns the status message from - # the template name. For example, "404.html" becomes - # "Not Found". - def template_not_found(template, assigns) do - if String.match?(template, ~r/.json$/) do - %{ - "error" => - case assigns do - %{error: error} -> error - _ -> Phoenix.Controller.status_message_from_template(template) - end - } - else - Phoenix.Controller.status_message_from_template(template) - end - end end diff --git a/lib/lightning_web/controllers/error_json.ex b/lib/lightning_web/controllers/error_json.ex new file mode 100644 index 00000000000..5c815cf8667 --- /dev/null +++ b/lib/lightning_web/controllers/error_json.ex @@ -0,0 +1,11 @@ +defmodule LightningWeb.ErrorJSON do + @moduledoc false + + def render(_template, %{error: error}) do + %{"error" => error} + end + + def render(template, _assigns) do + %{"error" => Phoenix.Controller.status_message_from_template(template)} + end +end diff --git a/lib/lightning_web/controllers/fallback_controller.ex b/lib/lightning_web/controllers/fallback_controller.ex index 6e3f3c590bf..c75ac41585a 100644 --- a/lib/lightning_web/controllers/fallback_controller.ex +++ b/lib/lightning_web/controllers/fallback_controller.ex @@ -10,28 +10,28 @@ defmodule LightningWeb.FallbackController do def call(conn, {:error, :not_found}) do conn |> put_status(:not_found) - |> put_view(LightningWeb.ErrorView) + |> put_view(html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON) |> render(:"404") end def call(conn, {:error, :bad_request}) do conn |> put_status(:bad_request) - |> put_view(LightningWeb.ErrorView) + |> put_view(html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON) |> render(:"400") end def call(conn, {:error, :unauthorized}) do conn |> put_status(:unauthorized) - |> put_view(LightningWeb.ErrorView) + |> put_view(html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON) |> render(:"401") end def call(conn, {:error, :forbidden}) do conn |> put_status(:forbidden) - |> put_view(LightningWeb.ErrorView) + |> put_view(html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON) |> render(:"403") end @@ -61,7 +61,7 @@ defmodule LightningWeb.FallbackController do def call(conn, {:error, error}) when is_map(error) do conn |> put_status(:unauthorized) - |> put_view(LightningWeb.ErrorView) + |> put_view(html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON) |> render(:"401", error: error) end end diff --git a/lib/lightning_web/controllers/user_auth.ex b/lib/lightning_web/controllers/user_auth.ex index 7cd2343dbb4..dc7867c7f39 100644 --- a/lib/lightning_web/controllers/user_auth.ex +++ b/lib/lightning_web/controllers/user_auth.ex @@ -230,7 +230,10 @@ defmodule LightningWeb.UserAuth do "json" -> conn |> put_status(:unauthorized) - |> put_view(LightningWeb.ErrorView) + |> put_view( + html: LightningWeb.ErrorHTML, + json: LightningWeb.ErrorJSON + ) |> render(:"401") |> halt() @@ -263,7 +266,7 @@ defmodule LightningWeb.UserAuth do if is_nil(conn.assigns[:current_resource]) do conn |> put_status(:unauthorized) - |> put_view(LightningWeb.ErrorView) + |> put_view(html: LightningWeb.ErrorHTML, json: LightningWeb.ErrorJSON) |> render(:"401") |> halt() else @@ -313,7 +316,10 @@ defmodule LightningWeb.UserAuth do "json" -> conn |> put_status(:forbidden) - |> put_view(LightningWeb.ErrorView) + |> put_view( + html: LightningWeb.ErrorHTML, + json: LightningWeb.ErrorJSON + ) |> render(:"403") |> halt() diff --git a/lib/lightning_web/controllers/webhooks_controller.ex b/lib/lightning_web/controllers/webhooks_controller.ex index 1c9d1d0247b..6915ff6eca7 100644 --- a/lib/lightning_web/controllers/webhooks_controller.ex +++ b/lib/lightning_web/controllers/webhooks_controller.ex @@ -16,7 +16,7 @@ defmodule LightningWeb.WebhooksController do %Plug.Conn.Unfetched{} -> conn |> put_status(415) - |> put_view(LightningWeb.ErrorView) + |> put_view(json: LightningWeb.ErrorJSON) |> render(:"415") |> halt() diff --git a/lib/lightning_web/live/dashboard_live/components.ex b/lib/lightning_web/live/dashboard_live/components.ex index 82fb17d9c47..0923d94444c 100644 --- a/lib/lightning_web/live/dashboard_live/components.ex +++ b/lib/lightning_web/live/dashboard_live/components.ex @@ -158,24 +158,4 @@ defmodule LightningWeb.DashboardLive.Components do <% end %> """ end - - attr :current_sort_key, :string, required: true - attr :current_sort_direction, :string, required: true - attr :target, :any, required: true - attr :target_sort_key, :string, required: true - slot :inner_block, required: true - - defp sortable_table_header(assigns) do - ~H""" - - {render_slot(@inner_block)} - - """ - end end diff --git a/lib/lightning_web/live/workflow_live/dashboard_components.ex b/lib/lightning_web/live/workflow_live/dashboard_components.ex index 9c59f8f6f62..4a5fbd977bb 100644 --- a/lib/lightning_web/live/workflow_live/dashboard_components.ex +++ b/lib/lightning_web/live/workflow_live/dashboard_components.ex @@ -279,24 +279,6 @@ defmodule LightningWeb.WorkflowLive.DashboardComponents do """ end - attr :current_sort_key, :string, required: true - attr :current_sort_direction, :string, required: true - attr :target_sort_key, :string, required: true - slot :inner_block, required: true - - defp sortable_table_header(assigns) do - ~H""" - - {render_slot(@inner_block)} - - """ - end - attr :project, :map, required: true attr :workflow, :map, required: true attr :trigger_enabled, :boolean diff --git a/lib/lightning_web/live/workflow_live/job_view.ex b/lib/lightning_web/live/workflow_live/job_view.ex index 59e37e929b8..089fa57024a 100644 --- a/lib/lightning_web/live/workflow_live/job_view.ex +++ b/lib/lightning_web/live/workflow_live/job_view.ex @@ -41,18 +41,6 @@ defmodule LightningWeb.WorkflowLive.JobView do """ end - slot :inner_block, required: true - attr :class, :string, default: "" - attr :id, :string, required: true - - defp column(assigns) do - ~H""" -
- {render_slot(@inner_block)} -
- """ - end - attr :job, :map, required: true attr :form, :map, required: true, doc: "A form built from a job" attr :current_user, :map, required: true diff --git a/lib/lightning_web/plugs/api_auth.ex b/lib/lightning_web/plugs/api_auth.ex index b37b2d7eeda..d1f0c63d3e3 100644 --- a/lib/lightning_web/plugs/api_auth.ex +++ b/lib/lightning_web/plugs/api_auth.ex @@ -2,7 +2,7 @@ defmodule LightningWeb.Plugs.ApiAuth do @moduledoc """ Authenticates api calls based on JWT bearer token. """ - use Phoenix.Controller + use Phoenix.Controller, formats: [:json] import Plug.Conn def init(opts) do @@ -41,7 +41,7 @@ defmodule LightningWeb.Plugs.ApiAuth do defp deny_access(conn) do conn |> put_status(:unauthorized) - |> put_view(LightningWeb.ErrorView) + |> put_view(json: LightningWeb.ErrorJSON) |> render(:"401") |> halt() end diff --git a/lib/lightning_web/plugs/block_routes.ex b/lib/lightning_web/plugs/block_routes.ex index 6414d58aa59..7395f862dee 100644 --- a/lib/lightning_web/plugs/block_routes.ex +++ b/lib/lightning_web/plugs/block_routes.ex @@ -2,7 +2,7 @@ defmodule LightningWeb.Plugs.BlockRoutes do @moduledoc """ Plug to conditionally block specified routes based on configuration flags and custom messages. """ - use Phoenix.Controller + use Phoenix.Controller, formats: [:html, :json] import Plug.Conn def init(opts) do diff --git a/lib/lightning_web/router.ex b/lib/lightning_web/router.ex index b1488f6b4e8..9fdffd22fc1 100644 --- a/lib/lightning_web/router.ex +++ b/lib/lightning_web/router.ex @@ -207,8 +207,6 @@ defmodule LightningWeb.Router do end live_session :settings, on_mount: LightningWeb.InitAssigns do - live "/settings", SettingsLive.Index, :index - live "/settings/users/new", UserLive.Edit, :new live "/settings/users/:id", UserLive.Edit, :edit live "/settings/users/:id/delete", UserLive.Index, :delete @@ -230,8 +228,6 @@ defmodule LightningWeb.Router do live "/mfa_required", ProjectLive.MFARequired, :index scope "/projects/:project_id", as: :project do - live "/jobs", JobLive.Index, :index - live "/settings/delete", ProjectLive.Settings, :delete live "/history", RunLive.Index, :index @@ -281,7 +277,7 @@ defmodule LightningWeb.Router do live_session :services, @services_opts do Enum.each(@services_routes, fn {path, module, action, opts} -> - live(path, module, action, opts) + live(path, Module.concat([module]), action, opts) end) end end diff --git a/mix.exs b/mix.exs index ee3d841b0b7..f2a63b20cbe 100644 --- a/mix.exs +++ b/mix.exs @@ -28,7 +28,7 @@ defmodule Lightning.MixProject do coveralls: :test, verify: :test ], - compilers: Mix.compilers(), + compilers: [:phoenix_live_view] ++ Mix.compilers(), # Docs name: "Lightning", @@ -103,20 +103,21 @@ defmodule Lightning.MixProject do {:libcluster_postgres, "~> 0.2.0"}, {:live_debugger, "~> 0.3.0", only: :dev}, {:mimic, "~> 1.12.0", only: :test}, - {:mix_test_watch, "~> 1.2.0", only: [:test, :dev], runtime: false}, + {:mix_test_watch, "~> 1.4.0", only: [:test, :dev], runtime: false}, {:mock, "~> 0.3.8", only: :test}, {:mox, "~> 1.2.0", only: :test}, {:oauth2, "~> 2.1"}, - {:oban, "~> 2.19"}, + {:oban, "~> 2.20"}, {:petal_components, "~> 3.0"}, - {:phoenix, "~> 1.7.11"}, + {:phoenix, "~> 1.8"}, {:phoenix_ecto, "~> 4.6"}, {:phoenix_html, "~> 4.1"}, {:phoenix_html_helpers, "~> 1.0"}, {:phoenix_live_dashboard, "~> 0.8"}, {:phoenix_live_reload, "~> 1.5", only: :dev}, - {:phoenix_live_view, "~> 1.0.17"}, - {:phoenix_storybook, "~> 0.9.2", only: :dev}, + {:phoenix_live_view, "~> 1.1"}, + {:lazy_html, ">= 0.0.0", only: :test}, + {:phoenix_storybook, "~> 1.0", only: :dev}, {:cors_plug, "~> 3.0"}, {:plug_cowboy, "~> 2.5"}, {:postgrex, ">= 0.0.0"}, @@ -152,7 +153,7 @@ defmodule Lightning.MixProject do {:eventually, "~> 1.1", only: [:test]}, {:benchee, "~> 1.5.0", only: :dev}, {:statistics, "~> 0.6", only: :dev}, - {:y_ex, "~> 0.8.0"}, + {:y_ex, "~> 0.10.2"}, {:chameleon, "~> 2.5"} ] end diff --git a/mix.lock b/mix.lock index 1ff96a874b5..f916ea05be9 100644 --- a/mix.lock +++ b/mix.lock @@ -10,6 +10,7 @@ "bypass": {:hex, :bypass, "2.1.0", "909782781bf8e20ee86a9cabde36b259d44af8b9f38756173e8f5e2e1fabb9b1", [:mix], [{:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "d9b5df8fa5b7a6efa08384e9bbecfe4ce61c77d28a4282f79e02f1ef78d96b80"}, "cachex": {:hex, :cachex, "4.1.1", "574c5cd28473db313a0a76aac8c945fe44191659538ca6a1e8946ec300b1a19f", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:ex_hash_ring, "~> 6.0", [hex: :ex_hash_ring, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "d6b7449ff98d6bb92dda58bd4fc3189cae9f99e7042054d669596f56dc503cd8"}, "castore": {:hex, :castore, "1.0.17", "4f9770d2d45fbd91dcf6bd404cf64e7e58fed04fadda0923dc32acca0badffa2", [:mix], [], "hexpm", "12d24b9d80b910dd3953e165636d68f147a31db945d2dcb9365e441f8b5351e5"}, + "cc_precompiler": {:hex, :cc_precompiler, "0.1.11", "8c844d0b9fb98a3edea067f94f616b3f6b29b959b6b3bf25fee94ffe34364768", [:mix], [{:elixir_make, "~> 0.7", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "3427232caf0835f94680e5bcf082408a70b48ad68a5f5c0b02a3bea9f3a075b9"}, "certifi": {:hex, :certifi, "2.15.0", "0e6e882fcdaaa0a5a9f2b3db55b1394dba07e8d6d9bcad08318fb604c6839712", [:rebar3], [], "hexpm", "b147ed22ce71d72eafdad94f055165c1c182f61a2ff49df28bcc71d1d5b94a60"}, "chameleon": {:hex, :chameleon, "2.5.0", "102dd809f78701875efd0a203730dd64296a1f2d29c8efa6b00cc029d58ff39e", [:mix], [], "hexpm", "f3559827d8b4fe53a44e19e56ae94bedd36a355e0d33e18067b8abc37ec428db"}, "circular_buffer": {:hex, :circular_buffer, "1.0.0", "25c004da0cba7bd8bc1bdabded4f9a902d095e20600fd15faf1f2ffbaea18a07", [:mix], [], "hexpm", "c829ec31c13c7bafd1f546677263dff5bfb006e929f25635878ac3cfba8749e5"}, @@ -50,7 +51,8 @@ "expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"}, "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, "finch": {:hex, :finch, "0.20.0", "5330aefb6b010f424dcbbc4615d914e9e3deae40095e73ab0c1bb0968933cadf", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2658131a74d051aabfcba936093c903b8e89da9a1b63e430bee62045fa9b2ee2"}, - "floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"}, + "fine": {:hex, :fine, "0.1.4", "b19a89c1476c7c57afb5f9314aed5960b5bc95d5277de4cb5ee8e1d1616ce379", [:mix], [], "hexpm", "be3324cc454a42d80951cf6023b9954e9ff27c6daa255483b3e8d608670303f5"}, + "floki": {:hex, :floki, "0.38.1", "f002ccac94b3bcb21d40d9b34cc2cc9fd88a8311879120330075b5dde657ebee", [:mix], [], "hexpm", "e744bf0db7ee34b2c8b62767f04071107af0516a81144b9a2f73fe0494200e5b"}, "gcs_signed_url": {:hex, :gcs_signed_url, "0.4.6", "bfcbe59ed28424064c709b4cd31e1215808d66f509b618ecbcff3f70bd151ca1", [:mix], [{:httpoison, "~> 2.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "0516bb4ce0cdb740e21d01dc4346f2a9054c7ee1b67a885674ba78ce18fca33a"}, "gen_smtp": {:hex, :gen_smtp, "1.3.0", "62c3d91f0dcf6ce9db71bcb6881d7ad0d1d834c7f38c13fa8e952f4104a8442e", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "0b73fbf069864ecbce02fe653b16d3f35fd889d0fdd4e14527675565c39d84e6"}, "gen_stage": {:hex, :gen_stage, "1.3.2", "7c77e5d1e97de2c6c2f78f306f463bca64bf2f4c3cdd606affc0100b89743b7b", [:mix], [], "hexpm", "0ffae547fa777b3ed889a6b9e1e64566217413d018cabd825f786e843ffe63e7"}, @@ -74,6 +76,7 @@ "jumper": {:hex, :jumper, "1.0.2", "68cdcd84472a00ac596b4e6459a41b3062d4427cbd4f1e8c8793c5b54f1406a7", [:mix], [], "hexpm", "9b7782409021e01ab3c08270e26f36eb62976a38c1aa64b2eaf6348422f165e1"}, "junit_formatter": {:hex, :junit_formatter, "3.4.0", "d0e8db6c34dab6d3c4154c3b46b21540db1109ae709d6cf99ba7e7a2ce4b1ac2", [:mix], [], "hexpm", "bb36e2ae83f1ced6ab931c4ce51dd3dbef1ef61bb4932412e173b0cfa259dacd"}, "kafka_protocol": {:hex, :kafka_protocol, "4.2.8", "441e233f0ef44db2c2adf6674b38bc2f1d2bd95a6d2bb2039614cd05ea5876b0", [:rebar3], [{:crc32cer, "1.0.4", [hex: :crc32cer, repo: "hexpm", optional: false]}], "hexpm", "8004e8918f6abfe75f6a2e98b607b7ae88620ba6c3fce3515bd36ca99150770d"}, + "lazy_html": {:hex, :lazy_html, "0.1.10", "ffe42a0b4e70859cf21a33e12a251e0c76c1dff76391609bd56702a0ef5bc429", [:make, :mix], [{:cc_precompiler, "~> 0.1", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.9.0", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:fine, "~> 0.1.0", [hex: :fine, repo: "hexpm", optional: false]}], "hexpm", "50f67e5faa09d45a99c1ddf3fac004f051997877dc8974c5797bb5ccd8e27058"}, "libcluster": {:hex, :libcluster, "3.5.0", "5ee4cfde4bdf32b2fef271e33ce3241e89509f4344f6c6a8d4069937484866ba", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ebf6561fcedd765a4cd43b4b8c04b1c87f4177b5fb3cbdfe40a780499d72f743"}, "libcluster_postgres": {:hex, :libcluster_postgres, "0.2.0", "14a5064b78f891c46935a66489454814d949a52b447fc1daff5d4a440e6f5847", [:mix], [{:libcluster, "~> 3.3", [hex: :libcluster, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm", "ab2e952371c5a0a0fcb263216c7eae2a2267977b3bb3236650daed3054a93edd"}, "live_debugger": {:hex, :live_debugger, "0.3.2", "b67baa8ed6a4329fe0c6aaf21a403cce4d0bac9b33d90707fe2609108614ac69", [:mix], [{:igniter, ">= 0.5.40 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20.4 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}], "hexpm", "5050b37af05a2b84d429e7256a41d3612283c4c802edd23e6eeb4e0b6fc2a712"}, @@ -88,7 +91,7 @@ "mimerl": {:hex, :mimerl, "1.4.0", "3882a5ca67fbbe7117ba8947f27643557adec38fa2307490c4c4207624cb213b", [:rebar3], [], "hexpm", "13af15f9f68c65884ecca3a3891d50a7b57d82152792f3e19d88650aa126b144"}, "mimic": {:hex, :mimic, "1.12.0", "34c9d1fb8e756df09ca5f96861d273f2bb01063df1a6a51a4c101f9ad7f07a9c", [:mix], [{:ham, "~> 0.2", [hex: :ham, repo: "hexpm", optional: false]}], "hexpm", "eaa43d495d6f3bc8099b28886e05a1b09a2a6be083f6385c3abc17599e5e2c43"}, "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, - "mix_test_watch": {:hex, :mix_test_watch, "1.2.0", "1f9acd9e1104f62f280e30fc2243ae5e6d8ddc2f7f4dc9bceb454b9a41c82b42", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "278dc955c20b3fb9a3168b5c2493c2e5cffad133548d307e0a50c7f2cfbf34f6"}, + "mix_test_watch": {:hex, :mix_test_watch, "1.4.0", "d88bcc4fbe3198871266e9d2f00cd8ae350938efbb11d3fa1da091586345adbb", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "2b4693e17c8ead2ef56d4f48a0329891e8c2d0d73752c0f09272a2b17dc38d1b"}, "mock": {:hex, :mock, "0.3.9", "10e44ad1f5962480c5c9b9fa779c6c63de9bd31997c8e04a853ec990a9d841af", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "9e1b244c4ca2551bb17bb8415eed89e40ee1308e0fbaed0a4fdfe3ec8a4adbd3"}, "mox": {:hex, :mox, "1.2.0", "a2cd96b4b80a3883e3100a221e8adc1b98e4c3a332a8fc434c39526babafd5b3", [:mix], [{:nimble_ownership, "~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}], "hexpm", "c7b92b3cc69ee24a7eeeaf944cd7be22013c52fcb580c1f33f50845ec821089a"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, @@ -103,20 +106,20 @@ "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, "peep": {:hex, :peep, "3.5.0", "9f6ead7b0f2c684494200c8fc02e7e62e8c459afe861b29bd859e4c96f402ed8", [:mix], [{:nimble_options, "~> 1.1", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:plug, "~> 1.16", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry_metrics, "~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "5a73a99c6e60062415efeb7e536a663387146463a3d3df1417da31fd665ac210"}, "petal_components": {:hex, :petal_components, "3.0.1", "58cd70f9c5e4896ed8e41b095f19770fa56ca0855d99790c4a26b5f04fa52283", [:mix], [{:phoenix, "~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_ecto, "~> 4.4", [hex: :phoenix_ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.7", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1195bc30979284f01a5fa2430e370d8378c635e083179c2b2fdbecf21cce05c1"}, - "phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"}, + "phoenix": {:hex, :phoenix, "1.8.5", "919db335247e6d4891764dc3063415b0d2457641c5f9b3751b5df03d8e20bbcf", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "83b2bb125127e02e9f475c8e3e92736325b5b01b0b9b05407bcb4083b7a32485"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.5", "c4ef322acd15a574a8b1a08eff0ee0a85e73096b53ce1403b6563709f15e1cea", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "26ec3208eef407f31b748cadd044045c6fd485fbff168e35963d2f9dfff28d4b"}, "phoenix_html": {:hex, :phoenix_html, "4.3.0", "d3577a5df4b6954cd7890c84d955c470b5310bb49647f0a114a6eeecc850f7ad", [:mix], [], "hexpm", "3eaa290a78bab0f075f791a46a981bbe769d94bc776869f4f3063a14f30497ad"}, "phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.6.2", "b18b0773a1ba77f28c52decbb0f10fd1ac4d3ae5b8632399bbf6986e3b665f62", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "d1f89c18114c50d394721365ffb428cce24f1c13de0467ffa773e2ff4a30d5b9"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "1.0.18", "943431edd0ef8295ffe4949f0897e2cb25c47d3d7ebba2b008d7c68598b887f1", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "724934fd0a68ecc57281cee863674454b06163fed7f5b8005b5e201ba4b23316"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "1.1.27", "9afcab28b0c82afdc51044e661bcd5b8de53d242593d34c964a37710b40a42af", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "415735d0b2c612c9104108b35654e977626a0cb346711e1e4f1ed16e3c827ede"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.2.0", "ff3a5616e1bed6804de7773b92cbccfc0b0f473faf1f63d7daf1206c7aeaaa6f", [:mix], [], "hexpm", "adc313a5bf7136039f63cfd9668fde73bba0765e0614cba80c06ac9460ff3e96"}, - "phoenix_storybook": {:hex, :phoenix_storybook, "0.9.2", "6bc80f89284e47c8f53a39ddf80ce19dff459d3a3490dce11349a280c6192762", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:jason, "~> 1.3", [hex: :jason, repo: "hexpm", optional: true]}, {:makeup_eex, "~> 2.0.2", [hex: :makeup_eex, repo: "hexpm", optional: false]}, {:makeup_html, "~> 0.2.0", [hex: :makeup_html, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "4dbfd43e85a5d578235fb53df38f9f7ba0809156b56d55a52e7cec0b2648aba2"}, + "phoenix_storybook": {:hex, :phoenix_storybook, "1.0.0", "99753f788b752be07b1afe5d75075425b792c82687613747a5653de950faf363", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:jason, "~> 1.3", [hex: :jason, repo: "hexpm", optional: true]}, {:makeup_eex, "~> 2.0.2", [hex: :makeup_eex, repo: "hexpm", optional: false]}, {:makeup_html, "~> 0.2.0", [hex: :makeup_html, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.8.1", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "4fbc5b0e23eeed3b879e9a249603259245885e880236b1b796631cdff3fcddb9"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.1", "b74ccaa8046fbc388a62134360ee7d9742d5a8ae74063f34eb050279de7a99e1", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "4000eeba3f9d7d1a6bf56d2bd56733d5cadf41a7f0d8ffe5bb67e7d667e204a2"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, "plug": {:hex, :plug, "1.19.1", "09bac17ae7a001a68ae393658aa23c7e38782be5c5c00c80be82901262c394c0", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "560a0017a8f6d5d30146916862aaf9300b7280063651dd7e532b8be168511e62"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.7.5", "261f21b67aea8162239b2d6d3b4c31efde4daa22a20d80b19c2c0f21b34b270e", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "20884bf58a90ff5a5663420f5d2c368e9e15ed1ad5e911daf0916ea3c57f77ac"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.8.0", "07789e9c03539ee51bb14a07839cc95aa96999fd8846ebfd28c97f0b50c7b612", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "9cbfaaf17463334ca31aed38ea7e08a68ee37cabc077b1e9be6d2fb68e0171d0"}, "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, "poison": {:hex, :poison, "4.0.1", "bcb755a16fac91cad79bfe9fc3585bb07b9331e50cfe3420a24bcc2d735709ae", [:mix], [], "hexpm", "ba8836feea4b394bb718a161fc59a288fe0109b5006d6bdf97b6badfcf6f0f25"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, @@ -129,7 +132,7 @@ "req": {:hex, :req, "0.5.1", "90584216d064389a4ff2d4279fe2c11ff6c812ab00fa01a9fb9d15457f65ba70", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7ea96a1a95388eb0fefa92d89466cdfedba24032794e5c1147d78ec90db7edca"}, "retry": {:hex, :retry, "0.19.0", "aeb326d87f62295d950f41e1255fe6f43280a1b390d36e280b7c9b00601ccbc2", [:mix], [], "hexpm", "85ef376aa60007e7bff565c366310966ec1bd38078765a0e7f20ec8a220d02ca"}, "rustler": {:hex, :rustler, "0.32.1", "f4cf5a39f9e85d182c0a3f75fa15b5d0add6542ab0bf9ceac6b4023109ebd3fc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:toml, "~> 0.6", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "b96be75526784f86f6587f051bc8d6f4eaff23d6e0f88dbcfe4d5871f52946f7"}, - "rustler_precompiled": {:hex, :rustler_precompiled, "0.8.3", "4e741024b0b097fe783add06e53ae9a6f23ddc78df1010f215df0c02915ef5a8", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "c23f5f33cb6608542de4d04faf0f0291458c352a4648e4d28d17ee1098cddcc4"}, + "rustler_precompiled": {:hex, :rustler_precompiled, "0.8.4", "700a878312acfac79fb6c572bb8b57f5aae05fe1cf70d34b5974850bbf2c05bf", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "3b33d99b540b15f142ba47944f7a163a25069f6d608783c321029bc1ffb09514"}, "scrivener": {:hex, :scrivener, "2.7.2", "1d913c965ec352650a7f864ad7fd8d80462f76a32f33d57d1e48bc5e9d40aba2", [:mix], [], "hexpm", "7866a0ec4d40274efbee1db8bead13a995ea4926ecd8203345af8f90d2b620d9"}, "sentry": {:hex, :sentry, "10.9.0", "503575bc98ef268ad75e9792e17637ab7b270ed8036614f777a1833272409016", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "9abf07e6a757f6650e2429b5773f546ff119f6980b9bb02067a7eb510a75c9f2"}, "sleeplocks": {:hex, :sleeplocks, "1.1.3", "96a86460cc33b435c7310dbd27ec82ca2c1f24ae38e34f8edde97f756503441a", [:rebar3], [], "hexpm", "d3b3958552e6eb16f463921e70ae7c767519ef8f5be46d7696cc1ed649421321"}, @@ -141,7 +144,7 @@ "swoosh": {:hex, :swoosh, "1.18.2", "41279e8449b65d14b571b66afe9ab352c3b0179291af8e5f4ad9207f489ad11a", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "032fcb2179f6d4e3b90030514ddc8d3946d8b046be939d121db480ca78adbc38"}, "table_rex": {:hex, :table_rex, "4.1.0", "fbaa8b1ce154c9772012bf445bfb86b587430fb96f3b12022d3f35ee4a68c918", [:mix], [], "hexpm", "95932701df195d43bc2d1c6531178fc8338aa8f38c80f098504d529c43bc2601"}, "tailwind": {:hex, :tailwind, "0.4.1", "e7bcc222fe96a1e55f948e76d13dd84a1a7653fb051d2a167135db3b4b08d3e9", [:mix], [], "hexpm", "6249d4f9819052911120dbdbe9e532e6bd64ea23476056adb7f730aa25c220d1"}, - "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, + "telemetry": {:hex, :telemetry, "1.4.1", "ab6de178e2b29b58e8256b92b382ea3f590a47152ca3651ea857a6cae05ac423", [:rebar3], [], "hexpm", "2172e05a27531d3d31dd9782841065c50dd5c3c7699d95266b2edd54c2dafa1c"}, "telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"}, "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.2.1", "c9755987d7b959b557084e6990990cb96a50d6482c683fb9622a63837f3cd3d8", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "5e2c599da4983c4f88a33e9571f1458bf98b0cf6ba930f1dc3a6e8cf45d5afb6"}, "telemetry_poller": {:hex, :telemetry_poller, "1.3.0", "d5c46420126b5ac2d72bc6580fb4f537d35e851cc0f8dbd571acf6d6e10f5ec7", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "51f18bed7128544a50f75897db9974436ea9bfba560420b646af27a9a9b35211"}, @@ -153,6 +156,6 @@ "unsafe": {:hex, :unsafe, "1.0.2", "23c6be12f6c1605364801f4b47007c0c159497d0446ad378b5cf05f1855c0581", [:mix], [], "hexpm", "b485231683c3ab01a9cd44cb4a79f152c6f3bb87358439c6f68791b85c2df675"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.9", "43dc3ba6d89ef5dec5b1d0a39698436a1e856d000d84bf31a3149862b01a287f", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "5534d5c9adad3c18a0f58a9371220d75a803bf0b9a3d87e6fe072faaeed76a08"}, - "y_ex": {:hex, :y_ex, "0.8.0", "e1591d97a487a15fe93eb29b88685d0ccb6f76403cdd2b8c60e9cebb9a2d204e", [:mix], [{:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, ">= 0.6.0", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "d2ce875481c28896d5d9037d8cb5d859ddbcfb047dcfebdcd0d33c6ebfd3d506"}, + "y_ex": {:hex, :y_ex, "0.10.2", "0304498e1f8f0c056fb56413fb06df37875366e9fc0f0aec13cf3c108cf9e540", [:mix], [{:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, ">= 0.6.0", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "8773efc24e57d53304b072240b3a9e46258557031e6464fb4a0455e92e495f75"}, "yex": {:hex, :yex, "0.0.1", "99ad1448ac9f7482b40fea8fc5ba23c92933a435b96935b079854e362e8b2353", [:mix], [{:rustler, "~> 0.32.1", [hex: :rustler, repo: "hexpm", optional: false]}], "hexpm", "8304c754ea0856f88f5f1f089191641393fae2791780a8b8865f7b4f9c6069b6"}, } diff --git a/test/lightning/workflow_versions_test.exs b/test/lightning/workflow_versions_test.exs index 251ca02d12b..1c431f19973 100644 --- a/test/lightning/workflow_versions_test.exs +++ b/test/lightning/workflow_versions_test.exs @@ -6,7 +6,7 @@ defmodule Lightning.WorkflowVersionsTest do alias Lightning.Repo alias Lightning.WorkflowVersions - alias Lightning.Workflows.{Workflow, WorkflowVersion} + alias Lightning.Workflows.{WorkflowVersion} @a "aaaaaaaaaaaa" @b "bbbbbbbbbbbb" diff --git a/test/lightning_web/live/ai_assistant_live_test.exs b/test/lightning_web/live/ai_assistant_live_test.exs index 589c77cc72e..909dbd41bf1 100644 --- a/test/lightning_web/live/ai_assistant_live_test.exs +++ b/test/lightning_web/live/ai_assistant_live_test.exs @@ -310,10 +310,10 @@ defmodule LightningWeb.AiAssistantLiveTest do ) assert has_element?(input_element) - refute render(input_element) =~ "disabled=\"disabled\"" + refute render(input_element) =~ "disabled=\"\"" assert has_element?(submit_btn) # Submit button should be disabled when no content is entered - assert render(submit_btn) =~ "disabled=\"disabled\"" + assert render(submit_btn) =~ "disabled=\"\"" html = view @@ -367,9 +367,9 @@ defmodule LightningWeb.AiAssistantLiveTest do ) assert has_element?(input_element) - assert render(input_element) =~ "disabled=\"disabled\"" + assert render(input_element) =~ "disabled=\"\"" assert has_element?(submit_btn) - assert render(submit_btn) =~ "disabled=\"disabled\"" + assert render(submit_btn) =~ "disabled=\"\"" html = view @@ -431,9 +431,9 @@ defmodule LightningWeb.AiAssistantLiveTest do ) assert has_element?(input_element) - assert render(input_element) =~ "disabled=\"disabled\"" + assert render(input_element) =~ "disabled=\"\"" assert has_element?(submit_btn) - assert render(submit_btn) =~ "disabled=\"disabled\"" + assert render(submit_btn) =~ "disabled=\"\"" assert render(input_element) =~ ~s(placeholder="Save your workflow first to use the AI Assistant") @@ -2077,7 +2077,7 @@ defmodule LightningWeb.AiAssistantLiveTest do create_btn_after = element(view, "#create_workflow_btn") create_btn_html_after = render(create_btn_after) - refute create_btn_html_after =~ "disabled=\"disabled\"", + refute create_btn_html_after =~ "disabled=\"\"", "Create button should be enabled after template selection" end @@ -2353,9 +2353,9 @@ defmodule LightningWeb.AiAssistantLiveTest do "#ai-assistant-form-submit-btn-chat-input-new-workflow-panel-assistant" ) - refute render(input_element) =~ "disabled=\"disabled\"" + refute render(input_element) =~ "disabled=\"\"" # Submit button should be disabled when no content is entered - assert render(submit_btn) =~ "disabled=\"disabled\"" + assert render(submit_btn) =~ "disabled=\"\"" refute render(input_element) =~ "Save your workflow first" end diff --git a/test/lightning_web/live/credential_live_test.exs b/test/lightning_web/live/credential_live_test.exs index 3ba57540ff1..f934b723058 100644 --- a/test/lightning_web/live/credential_live_test.exs +++ b/test/lightning_web/live/credential_live_test.exs @@ -2865,7 +2865,7 @@ defmodule LightningWeb.CredentialLiveTest do refute view |> has_element?( - "span[phx-hook='Tooltip', aria-label='OAuth client not found']" + "span[phx-hook='Tooltip'][aria-label='OAuth client not found']" ) # Now lets delete the oauth client diff --git a/test/lightning_web/live/project_live_test.exs b/test/lightning_web/live/project_live_test.exs index 11b5718e2f3..6a23e92dd82 100644 --- a/test/lightning_web/live/project_live_test.exs +++ b/test/lightning_web/live/project_live_test.exs @@ -1835,14 +1835,10 @@ defmodule LightningWeb.ProjectLiveTest do assert html =~ "Project settings" assert view - |> has_element?( - "input[disabled='disabled'][name='project[raw_name]']" - ) + |> has_element?("input[disabled][name='project[raw_name]']") assert view - |> has_element?( - "textarea[disabled='disabled'][name='project[description]']" - ) + |> has_element?("textarea[disabled][name='project[description]']") assert view |> has_element?("button[disabled][type=submit]") @@ -1869,14 +1865,10 @@ defmodule LightningWeb.ProjectLiveTest do assert html =~ "Project settings" assert view - |> has_element?( - "input[disabled='disabled'][name='project[raw_name]']" - ) + |> has_element?("input[disabled][name='project[raw_name]']") assert view - |> has_element?( - "textarea[disabled='disabled'][name='project[description]']" - ) + |> has_element?("textarea[disabled][name='project[description]']") assert view |> has_element?("button[disabled][type=submit]") @@ -2755,7 +2747,7 @@ defmodule LightningWeb.ProjectLiveTest do assert html =~ "Should OpenFn store input/output data for workflow runs?" # retain_all is the default - assert ["checked"] == + assert [""] == view |> element("#retain_all") |> render() @@ -2770,7 +2762,7 @@ defmodule LightningWeb.ProjectLiveTest do # |> Floki.parse_fragment!() # |> Floki.attribute("input", "checked") - refute ["checked"] == + assert [] == view |> element("#erase_all") |> render() @@ -2783,7 +2775,7 @@ defmodule LightningWeb.ProjectLiveTest do # 3 radio buttons descriptions assert "Retain input/output data for all workflow runs" = view - |> element(~s{label#[for="retain_all"]}) + |> element(~s{label[for="retain_all"]}) |> render() |> Floki.parse_fragment!() |> Floki.text() @@ -2800,7 +2792,7 @@ defmodule LightningWeb.ProjectLiveTest do assert "Never retain input/output data (zero-persistence)" = view - |> element(~s{label#[for="erase_all"]}) + |> element(~s{label[for="erase_all"]}) |> render() |> Floki.parse_fragment!() |> Floki.text() @@ -2841,7 +2833,7 @@ defmodule LightningWeb.ProjectLiveTest do ) |> render_change() - assert ["checked"] == + assert [""] == view |> element("#erase_all") |> render() @@ -2873,7 +2865,7 @@ defmodule LightningWeb.ProjectLiveTest do ) |> render_change() - assert ["checked"] == + assert [""] == view |> element("#erase_all") |> render() @@ -2886,7 +2878,7 @@ defmodule LightningWeb.ProjectLiveTest do |> render_click() # Verify it resets back to retain_all (the default) - assert ["checked"] == + assert [""] == view |> element("#retain_all") |> render() @@ -2972,7 +2964,7 @@ defmodule LightningWeb.ProjectLiveTest do ) |> render_change() - assert ["checked"] == + assert [""] == view |> element("#" <> policy) |> render() @@ -2998,7 +2990,7 @@ defmodule LightningWeb.ProjectLiveTest do {:ok, view, _html} = live(conn, ~p"/projects/#{project.id}/settings#data-storage") - assert ["checked"] == + assert [""] == view |> element("#" <> policy) |> render() @@ -5217,7 +5209,7 @@ defmodule LightningWeb.ProjectLiveTest do "Connect Branch & Initiate First Sync" ) - assert render(submit_btn) =~ "disabled=\"disabled\"" + assert render(submit_btn) =~ "disabled=\"\"" end @tag :capture_log @@ -6229,7 +6221,7 @@ defmodule LightningWeb.ProjectLiveTest do button = element(view, "#initiate-sync-button") assert has_element?(button) - assert render(button) =~ "disabled=\"disabled\"" + assert render(button) =~ "disabled=\"\"" end end diff --git a/test/lightning_web/live/sandbox_live/form_component_test.exs b/test/lightning_web/live/sandbox_live/form_component_test.exs index f3bbab06082..5e132d1bba5 100644 --- a/test/lightning_web/live/sandbox_live/form_component_test.exs +++ b/test/lightning_web/live/sandbox_live/form_component_test.exs @@ -121,7 +121,7 @@ defmodule LightningWeb.SandboxLive.FormComponentTest do ) html = render(view) - assert html =~ ~s(