diff --git a/lib/arrow_web/controllers/shuttle_html/new.html.heex b/lib/arrow_web/controllers/shuttle_html/new.html.heex
index 071a3b9b..eff21ff7 100644
--- a/lib/arrow_web/controllers/shuttle_html/new.html.heex
+++ b/lib/arrow_web/controllers/shuttle_html/new.html.heex
@@ -1,7 +1,12 @@
<.header>
- New Shuttle
+ new shuttle
-<.shuttle_form changeset={@changeset} action={~p"/shuttles"} />
+<.shuttle_form
+ changeset={@changeset}
+ action={~p"/shuttles"}
+ gtfs_disruptable_routes={@gtfs_disruptable_routes}
+ shapes={@shapes}
+/>
<.back navigate={~p"/shuttles"}>Back to shuttles
diff --git a/lib/arrow_web/controllers/shuttle_html/show.html.heex b/lib/arrow_web/controllers/shuttle_html/show.html.heex
index c28dc2c8..cf15265c 100644
--- a/lib/arrow_web/controllers/shuttle_html/show.html.heex
+++ b/lib/arrow_web/controllers/shuttle_html/show.html.heex
@@ -1,5 +1,5 @@
<.header>
- Shuttle <%= @shuttle.id %>
+ shuttle <%= @shuttle.id %>
<:actions>
<.link href={~p"/shuttles/#{@shuttle}/edit"}>
<.button>Edit shuttle
@@ -9,6 +9,7 @@
<.list>
<:item title="Shuttle name"><%= @shuttle.shuttle_name %>
+ <:item title="Disrupted route"><%= @shuttle.disrupted_route_id %>
<:item title="Status"><%= @shuttle.status %>
diff --git a/lib/arrow_web/controllers/shuttle_html/shuttle_form.html.heex b/lib/arrow_web/controllers/shuttle_html/shuttle_form.html.heex
index 69d8b346..0cfcd2fb 100644
--- a/lib/arrow_web/controllers/shuttle_html/shuttle_form.html.heex
+++ b/lib/arrow_web/controllers/shuttle_html/shuttle_form.html.heex
@@ -1,15 +1,79 @@
<.simple_form :let={f} for={@changeset} action={@action}>
+
<.error :if={@changeset.action}>
Oops, something went wrong! Please check the errors below.
- <.input field={f[:shuttle_name]} type="text" label="Shuttle name" />
- <.input
- field={f[:status]}
- type="select"
- label="Status"
- prompt="Choose a value"
- options={Ecto.Enum.values(Arrow.Shuttles.Shuttle, :status)}
- />
+
+
+ <.input field={f[:shuttle_name]} type="text" label="Shuttle Name" />
+
+
+ <.input
+ field={f[:disrupted_route_id]}
+ type="select"
+ label="Disrupted Route"
+ prompt="Choose a route"
+ options={Enum.map(@gtfs_disruptable_routes, &{&1.long_name, &1.id})}
+ />
+
+
+ <.input
+ field={f[:status]}
+ type="select"
+ label="Status"
+ prompt="Choose a value"
+ options={Ecto.Enum.values(Arrow.Shuttles.Shuttle, :status)}
+ />
+
+
+
+
define route
+ <.inputs_for :let={f_route} field={f[:routes]}>
+
direction <%= input_value(f_route, :direction_id) %>
+
+
+ <.input field={f_route[:direction_id]} type="text" label="Direction id" />
+
+
+ <.input field={f_route[:direction_desc]} type="text" label="Direction desc" />
+
+
+ <.input
+ field={f_route[:shape_id]}
+ type="select"
+ label="Shape"
+ prompt="Choose a shape"
+ options={Enum.map(@shapes, &{&1.name, &1.id})}
+ />
+
+
+
+
+ <.input field={f_route[:destination]} type="text" label="Destination" />
+
+
+
+ <.input field={f_route[:waypoint]} type="text" label="Waypoint" />
+
+
+
+
+ <.input field={f_route[:suffix]} type="text" label="Suffix" />
+
+
+
<:actions>
<.button>Save Shuttle
diff --git a/priv/repo/migrations/20241018202407_add_fk_gtfs_route_shuttles.exs b/priv/repo/migrations/20241018202407_add_fk_gtfs_route_shuttles.exs
new file mode 100644
index 00000000..f59849d7
--- /dev/null
+++ b/priv/repo/migrations/20241018202407_add_fk_gtfs_route_shuttles.exs
@@ -0,0 +1,10 @@
+defmodule Arrow.Repo.Migrations.AddFkGtfsRouteShuttles do
+ use Ecto.Migration
+
+ def change do
+ alter table(:shuttles) do
+ modify :disrupted_route_id, references(:gtfs_routes, type: :varchar, on_delete: :nothing),
+ from: :string
+ end
+ end
+end
diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs
index d2407441..0bcc6c5b 100644
--- a/priv/repo/seeds.exs
+++ b/priv/repo/seeds.exs
@@ -11,27 +11,34 @@
# and so on) as they will fail if something goes wrong.
alias Arrow.Repo
-# alias Arrow.Gtfs.Route
+alias Arrow.Gtfs
alias Arrow.Shuttles.{Shape, Stop, Shuttle, Route, RouteStop}
# For testing locally with dependency on /import-gtfs
-# Repo.insert %Route{
-# id: "Red-dev",
-# agency_id: "1",
-# short_name: nil,
-# long_name: "Red Line",
-# desc: "Rapid Transit",
-# type: :heavy_rail,
-# url: "https://www.mbta.com/schedules/Red",
-# color: "DA291C",
-# text_color: "FFFFFF",
-# sort_order: 10010,
-# fare_class: "Rapid Transit",
-# line_id: "line-Red",
-# listed_route: nil,
-# network_id: "rapid_transit"
-# }
-#
+Repo.insert(%Gtfs.Route{
+ id: "Red-dev",
+ agency: %Gtfs.Agency{id: "1", name: "MBTA", url: "https://www.mbta.com", timezone: "ETC"},
+ short_name: nil,
+ long_name: "Red Line",
+ desc: "Rapid Transit",
+ type: :heavy_rail,
+ url: "https://www.mbta.com/schedules/Red",
+ color: "DA291C",
+ text_color: "FFFFFF",
+ sort_order: 10010,
+ fare_class: "Rapid Transit",
+ line: %Gtfs.Line{
+ id: "line-Red",
+ short_name: "Red",
+ long_name: "Red line",
+ desc: "Red line subway",
+ color: "Red",
+ text_color: "Red",
+ sort_order: 0
+ },
+ listed_route: nil,
+ network_id: "rapid_transit"
+})
Repo.insert!(%Shape{
id: 1,
diff --git a/priv/repo/structure.sql b/priv/repo/structure.sql
index 6deb899c..aa6809e7 100644
--- a/priv/repo/structure.sql
+++ b/priv/repo/structure.sql
@@ -16,6 +16,13 @@ SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
+--
+-- Name: public; Type: SCHEMA; Schema: -; Owner: -
+--
+
+-- *not* creating schema, since initdb creates it
+
+
--
-- Name: day_name; Type: TYPE; Schema: public; Owner: -
--
@@ -854,7 +861,7 @@ ALTER SEQUENCE public.shuttle_routes_id_seq OWNED BY public.shuttle_routes.id;
CREATE TABLE public.shuttles (
id bigint NOT NULL,
shuttle_name character varying(255),
- disrupted_route_id character varying(255),
+ disrupted_route_id character varying,
status character varying(255),
inserted_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL
@@ -1674,6 +1681,14 @@ ALTER TABLE ONLY public.shuttle_routes
ADD CONSTRAINT shuttle_routes_shuttle_id_fkey FOREIGN KEY (shuttle_id) REFERENCES public.shuttles(id);
+--
+-- Name: shuttles shuttles_disrupted_route_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.shuttles
+ ADD CONSTRAINT shuttles_disrupted_route_id_fkey FOREIGN KEY (disrupted_route_id) REFERENCES public.gtfs_routes(id);
+
+
--
-- PostgreSQL database dump complete
--
@@ -1715,3 +1730,4 @@ INSERT INTO public."schema_migrations" (version) VALUES (20241003182524);
INSERT INTO public."schema_migrations" (version) VALUES (20241010164333);
INSERT INTO public."schema_migrations" (version) VALUES (20241010164455);
INSERT INTO public."schema_migrations" (version) VALUES (20241010164555);
+INSERT INTO public."schema_migrations" (version) VALUES (20241018202407);
diff --git a/test/arrow/shuttles_test.exs b/test/arrow/shuttles_test.exs
index 21867d30..228af94e 100644
--- a/test/arrow/shuttles_test.exs
+++ b/test/arrow/shuttles_test.exs
@@ -141,13 +141,68 @@ defmodule Arrow.ShuttlesTest do
test "update_shuttle/2 with valid data updates the shuttle" do
shuttle = shuttle_fixture()
- update_attrs = %{status: :active, shuttle_name: "some updated shuttle_name"}
+ update_attrs = %{status: :draft, shuttle_name: "some updated shuttle_name"}
assert {:ok, %Shuttle{} = shuttle} = Shuttles.update_shuttle(shuttle, update_attrs)
- assert shuttle.status == :active
+ assert shuttle.status == :draft
assert shuttle.shuttle_name == "some updated shuttle_name"
end
+ test "update_shuttle/2 with valid route data updates the shuttle route" do
+ shuttle = shuttle_fixture()
+ [route1, route2] = shuttle.routes
+ destination = unique_shuttle_route_destination()
+ updated_route1 = Map.merge(route1, %{destination: destination})
+
+ update_attrs =
+ Map.from_struct(%Shuttle{
+ shuttle
+ | routes: [Map.from_struct(updated_route1), Map.from_struct(route2)]
+ })
+
+ assert {:ok, %Shuttle{} = shuttle} = Shuttles.update_shuttle(shuttle, update_attrs)
+ assert List.first(shuttle.routes).id == route1.id
+ assert List.first(shuttle.routes).destination == destination
+ end
+
+ test "update_shuttle/2 with valid shape_id updates the shuttle route shape" do
+ shuttle = shuttle_fixture()
+ routes = shuttle.routes
+ first_route = List.first(routes)
+ new_shape = shape_fixture()
+ # Updated shape is set by shape_id param
+ updated_route1 = Map.merge(List.first(routes), %{shape_id: new_shape.id})
+ existing_route2 = Enum.at(routes, 1)
+
+ update_attrs =
+ Map.from_struct(%Shuttle{
+ shuttle
+ | routes: [Map.from_struct(updated_route1), Map.from_struct(existing_route2)]
+ })
+
+ assert {:ok, %Shuttle{} = updated_shuttle} = Shuttles.update_shuttle(shuttle, update_attrs)
+ # Shuttle id is the same
+ assert updated_shuttle.id == shuttle.id
+ # Existing route is unchanged
+ assert Enum.at(updated_shuttle.routes, 1) == existing_route2
+ # Route definition id is the same
+ updated_shuttle_route = List.first(updated_shuttle.routes)
+ assert updated_shuttle_route.id == first_route.id
+ # Shape reference is updated
+ refute updated_shuttle_route.shape == first_route.shape
+ assert updated_shuttle_route.shape.id == updated_route1.shape_id
+ assert updated_shuttle_route.shape == new_shape
+ end
+
+ test "update_shuttle/2 with invalid data updates for status active returns error changeset" do
+ shuttle = shuttle_fixture()
+ update_attrs = %{status: :active, shuttle_name: "some updated shuttle_name"}
+
+ assert {:error, %Ecto.Changeset{}} = Shuttles.update_shuttle(shuttle, update_attrs)
+ assert shuttle == Shuttles.get_shuttle!(shuttle.id)
+ refute shuttle.status == :active
+ end
+
test "update_shuttle/2 with invalid data returns error changeset" do
shuttle = shuttle_fixture()
assert {:error, %Ecto.Changeset{}} = Shuttles.update_shuttle(shuttle, @invalid_attrs)
diff --git a/test/arrow_web/controllers/shuttle_controller_test.exs b/test/arrow_web/controllers/shuttle_controller_test.exs
index 19fb8ea0..07804a2d 100644
--- a/test/arrow_web/controllers/shuttle_controller_test.exs
+++ b/test/arrow_web/controllers/shuttle_controller_test.exs
@@ -4,14 +4,14 @@ defmodule ArrowWeb.ShuttleControllerTest do
import Arrow.ShuttlesFixtures
@create_attrs %{status: :draft, shuttle_name: "some shuttle_name"}
- @update_attrs %{status: :active, shuttle_name: "some updated shuttle_name"}
+ @update_attrs %{status: :inactive, shuttle_name: "some updated shuttle_name"}
@invalid_attrs %{status: nil, shuttle_name: nil}
describe "index" do
@tag :authenticated
test "lists all shuttles", %{conn: conn} do
conn = get(conn, ~p"/shuttles")
- assert html_response(conn, 200) =~ "Listing Shuttles"
+ assert html_response(conn, 200) =~ "shuttles"
end
end
@@ -19,7 +19,7 @@ defmodule ArrowWeb.ShuttleControllerTest do
@tag :authenticated_admin
test "renders form", %{conn: conn} do
conn = get(conn, ~p"/shuttles/new")
- assert html_response(conn, 200) =~ "New Shuttle"
+ assert html_response(conn, 200) =~ "new shuttle"
end
end
@@ -35,7 +35,7 @@ defmodule ArrowWeb.ShuttleControllerTest do
@tag :authenticated_admin
test "renders errors when data is invalid", %{conn: conn} do
conn = post(conn, ~p"/shuttles", shuttle: @invalid_attrs)
- assert html_response(conn, 200) =~ "New Shuttle"
+ assert html_response(conn, 200) =~ "new shuttle"
end
end
@@ -45,7 +45,7 @@ defmodule ArrowWeb.ShuttleControllerTest do
@tag :authenticated_admin
test "renders form for editing chosen shuttle", %{conn: conn, shuttle: shuttle} do
conn = get(conn, ~p"/shuttles/#{shuttle}/edit")
- assert html_response(conn, 200) =~ "Edit Shuttle"
+ assert html_response(conn, 200) =~ "edit shuttle"
end
end
@@ -64,7 +64,7 @@ defmodule ArrowWeb.ShuttleControllerTest do
@tag :authenticated_admin
test "renders errors when data is invalid", %{conn: conn, shuttle: shuttle} do
conn = put(conn, ~p"/shuttles/#{shuttle}", shuttle: @invalid_attrs)
- assert html_response(conn, 200) =~ "Edit Shuttle"
+ assert html_response(conn, 200) =~ "edit shuttle"
end
end
diff --git a/test/support/fixtures/shuttles_fixtures.ex b/test/support/fixtures/shuttles_fixtures.ex
index 8d073b07..5dd761d1 100644
--- a/test/support/fixtures/shuttles_fixtures.ex
+++ b/test/support/fixtures/shuttles_fixtures.ex
@@ -61,6 +61,38 @@ defmodule Arrow.ShuttlesFixtures do
"""
def unique_shuttle_shuttle_name, do: "some shuttle_name#{System.unique_integer([:positive])}"
+ @doc """
+ Generate a unique shuttle route destination.
+ """
+ def unique_shuttle_route_destination,
+ do: "some shuttle_route_destination#{System.unique_integer([:positive])}"
+
+ defp shuttle_routes do
+ shape1 = shape_fixture()
+ shape2 = shape_fixture()
+
+ [
+ %{
+ shape_id: shape1.id,
+ shape: shape1,
+ destination: "Harvard",
+ direction_id: :"0",
+ direction_desc: "Southbound",
+ suffix: nil,
+ waypoint: "Brattle"
+ },
+ %{
+ shape_id: shape2.id,
+ shape: shape2,
+ destination: "Alewife",
+ direction_id: :"1",
+ direction_desc: "Northbound",
+ suffix: nil,
+ waypoint: "Brattle"
+ }
+ ]
+ end
+
@doc """
Generate a shuttle.
"""
@@ -69,7 +101,8 @@ defmodule Arrow.ShuttlesFixtures do
attrs
|> Enum.into(%{
shuttle_name: unique_shuttle_shuttle_name(),
- status: :draft
+ status: :draft,
+ routes: shuttle_routes()
})
|> Arrow.Shuttles.create_shuttle()
From 8c2acde8898bbf14d1654bf21aeec28deba97bc2 Mon Sep 17 00:00:00 2001
From: Walton Hoops
Date: Tue, 29 Oct 2024 11:45:43 -0600
Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=8F=B9=20Upgrade=20Elixir=20version?=
=?UTF-8?q?=20(#1024)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* chore: bump elixir & erlang versions
* fix: resolve warning deprication messages coming from Arrow
* fix: resolve sentry deprecations
* fix: resolve wallaby deprecation warnings
* fix: deprecation warnings in tests
* chore: minor dependency version bumps
* chore: update mox
* chore: update http_poison
* chore: update telemetry
* chore: update debian container
* fix: use string instead of charlist
* fix: address gettext deprecations
* fix: dialyzer deprecation
* fix: ignore .elixir_ls
* fix: remove unecessary error clause
* fix: ssl_opts is deprecated
* fix: using warning instead of warn on LoggerBackend
---
.dialyzer.ignore-warnings | 0
.gitignore | 2 +
.tool-versions | 4 +-
Dockerfile | 7 +-
config/runtime.exs | 5 +-
lib/arrow/disruption_revision.ex | 10 +-
lib/arrow/gtfs.ex | 4 +-
lib/arrow/repo.ex | 2 +-
lib/arrow_web.ex | 8 +-
lib/arrow_web/components/core_components.ex | 2 +-
.../controllers/api/gtfs_import_controller.ex | 2 +-
.../disruption_html/_table.html.heex | 2 +-
lib/arrow_web/controllers/shape_controller.ex | 5 -
lib/arrow_web/gettext.ex | 4 +-
lib/arrow_web/try_api_token_auth/cognito.ex | 2 +-
lib/arrow_web/try_api_token_auth/keycloak.ex | 2 +-
mix.exs | 17 +-
mix.lock | 90 ++--
.../controllers/shape_controller_test.exs | 19 -
.../controllers/stop_controller_test.exs | 2 +-
test/arrow_web/try_api_token_auth_test.exs | 2 +-
.../fixtures/kml/invalid_whitespace_shape.kml | 402 ------------------
22 files changed, 89 insertions(+), 504 deletions(-)
delete mode 100644 .dialyzer.ignore-warnings
delete mode 100644 test/support/fixtures/kml/invalid_whitespace_shape.kml
diff --git a/.dialyzer.ignore-warnings b/.dialyzer.ignore-warnings
deleted file mode 100644
index e69de29b..00000000
diff --git a/.gitignore b/.gitignore
index cc0e5067..7263fc45 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,3 +42,5 @@ npm-debug.log
# Screenshots taken by Wallaby
/test/integration/screenshots
+
+.elixir_ls
diff --git a/.tool-versions b/.tool-versions
index 0a5f51bf..265ee38f 100644
--- a/.tool-versions
+++ b/.tool-versions
@@ -1,3 +1,3 @@
-elixir 1.14.5-otp-26
-erlang 26.1.2
+elixir 1.17.3-otp-27
+erlang 27.1.2
nodejs 20.8.1
diff --git a/Dockerfile b/Dockerfile
index dc1746eb..b86bd158 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
-ARG ELIXIR_VERSION=1.14.5
-ARG ERLANG_VERSION=26.1.2
-ARG DEBIAN_VERSION=bullseye-20230612
+ARG ELIXIR_VERSION=1.17.3
+ARG ERLANG_VERSION=27.1.2
+ARG DEBIAN_VERSION=bullseye-20241016
FROM hexpm/elixir:$ELIXIR_VERSION-erlang-$ERLANG_VERSION-debian-$DEBIAN_VERSION as elixir-builder
@@ -39,6 +39,7 @@ COPY config/config.exs config/
COPY config/prod.exs config/
RUN mix deps.compile
+RUN mix sentry.package_source_code
COPY assets assets
RUN npm ci --prefix assets
diff --git a/config/runtime.exs b/config/runtime.exs
index e5f311d1..eb71a19e 100644
--- a/config/runtime.exs
+++ b/config/runtime.exs
@@ -56,11 +56,10 @@ if config_env() == :prod do
root_source_code_path: File.cwd!(),
tags: %{
env: sentry_env
- },
- included_environments: [sentry_env]
+ }
config :logger, Sentry.LoggerBackend,
- level: :warn,
+ level: :warning,
capture_log_messages: true
end
diff --git a/lib/arrow/disruption_revision.ex b/lib/arrow/disruption_revision.ex
index 453708d1..3316ce0d 100644
--- a/lib/arrow/disruption_revision.ex
+++ b/lib/arrow/disruption_revision.ex
@@ -210,7 +210,7 @@ defmodule Arrow.DisruptionRevision do
Enum.all?(days_of_week, fn day ->
Enum.member?(
- Enum.map(Date.range(start_date, end_date), fn date -> Date.day_of_week(date) end),
+ Enum.map(date_range(start_date, end_date), fn date -> Date.day_of_week(date) end),
DayOfWeek.day_number(day)
)
end) ->
@@ -285,4 +285,12 @@ defmodule Arrow.DisruptionRevision do
changeset
end
end
+
+ defp date_range(start_date, end_date) do
+ if Date.compare(start_date, end_date) == :gt do
+ Date.range(start_date, end_date, -1)
+ else
+ Date.range(start_date, end_date)
+ end
+ end
end
diff --git a/lib/arrow/gtfs.ex b/lib/arrow/gtfs.ex
index e2bb0dd7..2ea1eca7 100644
--- a/lib/arrow/gtfs.ex
+++ b/lib/arrow/gtfs.ex
@@ -38,7 +38,7 @@ defmodule Arrow.Gtfs do
:ok
{:error, reason} = error ->
- Logger.warn(
+ Logger.warning(
"GTFS import or validation failed #{job_logging_params(job)} reason=#{inspect(reason)}"
)
@@ -51,7 +51,7 @@ defmodule Arrow.Gtfs do
:ok
{:error, reason} = error ->
- Logger.warn(
+ Logger.warning(
"GTFS import or validation failed #{job_logging_params(job)} reason=#{inspect(reason)}"
)
diff --git a/lib/arrow/repo.ex b/lib/arrow/repo.ex
index c39ddc27..63adc5d1 100644
--- a/lib/arrow/repo.ex
+++ b/lib/arrow/repo.ex
@@ -22,7 +22,7 @@ defmodule Arrow.Repo do
Keyword.merge(config,
password: token,
- ssl_opts: [
+ ssl: [
cacertfile: Path.join(:code.priv_dir(:arrow), "aws-cert-bundle.pem"),
verify: :verify_peer,
server_name_indication: String.to_charlist(hostname),
diff --git a/lib/arrow_web.ex b/lib/arrow_web.ex
index 9d490076..54309682 100644
--- a/lib/arrow_web.ex
+++ b/lib/arrow_web.ex
@@ -32,7 +32,7 @@ defmodule ArrowWeb do
def channel do
quote do
use Phoenix.Channel
- import ArrowWeb.Gettext
+ use Gettext, backend: ArrowWeb.Gettext
end
end
@@ -41,7 +41,7 @@ defmodule ArrowWeb do
use Phoenix.Controller, namespace: ArrowWeb
import Plug.Conn
- import ArrowWeb.Gettext
+ use Gettext, backend: ArrowWeb.Gettext
alias ArrowWeb.Router.Helpers, as: Routes
unquote(verified_routes())
@@ -63,7 +63,7 @@ defmodule ArrowWeb do
use Phoenix.HTML
import ArrowWeb.ErrorHelpers
- import ArrowWeb.Gettext
+ use Gettext, backend: ArrowWeb.Gettext
alias ArrowWeb.Router.Helpers, as: Routes
# Import the `react_component` helper
@@ -77,7 +77,7 @@ defmodule ArrowWeb do
import Phoenix.HTML
# Core UI components and translation
import ArrowWeb.CoreComponents
- import ArrowWeb.Gettext
+ use Gettext, backend: ArrowWeb.Gettext
# Shortcut for generating JS commands
alias Phoenix.LiveView.JS
diff --git a/lib/arrow_web/components/core_components.ex b/lib/arrow_web/components/core_components.ex
index 7f624ef7..a26c5a75 100644
--- a/lib/arrow_web/components/core_components.ex
+++ b/lib/arrow_web/components/core_components.ex
@@ -17,7 +17,7 @@ defmodule ArrowWeb.CoreComponents do
use Phoenix.Component
alias Phoenix.LiveView.JS
- import ArrowWeb.Gettext
+ use Gettext, backend: ArrowWeb.Gettext
@doc """
Renders a modal.
diff --git a/lib/arrow_web/controllers/api/gtfs_import_controller.ex b/lib/arrow_web/controllers/api/gtfs_import_controller.ex
index 0f8eade5..c08f2c51 100644
--- a/lib/arrow_web/controllers/api/gtfs_import_controller.ex
+++ b/lib/arrow_web/controllers/api/gtfs_import_controller.ex
@@ -101,7 +101,7 @@ defmodule ArrowWeb.API.GtfsImportController do
json(conn, value)
{:error, status, message} ->
- Logger.warn("GtfsImportController unsuccessful request message=#{inspect(message)}")
+ Logger.warning("GtfsImportController unsuccessful request message=#{inspect(message)}")
send_resp(conn, status, message)
{:error, message} ->
diff --git a/lib/arrow_web/controllers/disruption_html/_table.html.heex b/lib/arrow_web/controllers/disruption_html/_table.html.heex
index 2e0b1bf3..1e73b8ea 100644
--- a/lib/arrow_web/controllers/disruption_html/_table.html.heex
+++ b/lib/arrow_web/controllers/disruption_html/_table.html.heex
@@ -13,7 +13,7 @@
<%= for %{revisions: [revision]} = disruption <- @disruptions do %>
-
+
<%= revision.title %>
|
diff --git a/lib/arrow_web/controllers/shape_controller.ex b/lib/arrow_web/controllers/shape_controller.ex
index ecfac3cc..5db22f03 100644
--- a/lib/arrow_web/controllers/shape_controller.ex
+++ b/lib/arrow_web/controllers/shape_controller.ex
@@ -51,11 +51,6 @@ defmodule ArrowWeb.ShapeController do
conn
|> put_flash(:errors, reason)
|> render(:new_bulk, errors: reason, shapes_upload: reset_upload)
-
- error ->
- conn
- |> put_flash(:errors, error)
- |> render(:new_bulk, errors: error, shapes_upload: reset_upload)
end
end
diff --git a/lib/arrow_web/gettext.ex b/lib/arrow_web/gettext.ex
index f4a412ed..321caadf 100644
--- a/lib/arrow_web/gettext.ex
+++ b/lib/arrow_web/gettext.ex
@@ -5,7 +5,7 @@ defmodule ArrowWeb.Gettext do
By using [Gettext](https://hexdocs.pm/gettext),
your module gains a set of macros for translations, for example:
- import ArrowWeb.Gettext
+ use Gettext, backend: ArrowWeb.Gettext
# Simple translation
gettext("Here is the string to translate")
@@ -20,5 +20,5 @@ defmodule ArrowWeb.Gettext do
See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage.
"""
- use Gettext, otp_app: :arrow
+ use Gettext.Backend, otp_app: :arrow
end
diff --git a/lib/arrow_web/try_api_token_auth/cognito.ex b/lib/arrow_web/try_api_token_auth/cognito.ex
index 9e3c66f5..81acbc5f 100644
--- a/lib/arrow_web/try_api_token_auth/cognito.ex
+++ b/lib/arrow_web/try_api_token_auth/cognito.ex
@@ -42,7 +42,7 @@ defmodule ArrowWeb.TryApiTokenAuth.Cognito do
[]
response ->
- :ok = Logger.warn("unexpected_aws_api_response: #{inspect(response)}")
+ :ok = Logger.warning("unexpected_aws_api_response: #{inspect(response)}")
[]
end
diff --git a/lib/arrow_web/try_api_token_auth/keycloak.ex b/lib/arrow_web/try_api_token_auth/keycloak.ex
index 8f3d8de1..18bf8fae 100644
--- a/lib/arrow_web/try_api_token_auth/keycloak.ex
+++ b/lib/arrow_web/try_api_token_auth/keycloak.ex
@@ -17,7 +17,7 @@ defmodule ArrowWeb.TryApiTokenAuth.Keycloak do
)
else
other ->
- Logger.warn(
+ Logger.warning(
"unexpected response when logging #{auth_token.username} in via Keycloak API: #{inspect(other)}"
)
diff --git a/mix.exs b/mix.exs
index f913fc01..3b99c177 100644
--- a/mix.exs
+++ b/mix.exs
@@ -14,11 +14,10 @@ defmodule Arrow.MixProject do
releases: releases(),
dialyzer: [
plt_add_apps: [:mix],
- plt_add_deps: :transitive,
+ plt_add_deps: :app_tree,
flags: [
:unmatched_returns
- ],
- ignore_warnings: ".dialyzer.ignore-warnings"
+ ]
],
preferred_cli_env: ["test.integration": :test],
test_coverage: [tool: LcovEx, ignore_paths: ["deps/"]]
@@ -60,11 +59,11 @@ defmodule Arrow.MixProject do
{:gettext, "~> 0.11"},
{:guardian, "~> 2.0"},
{:hackney, "~> 1.9"},
- {:httpoison, "~> 1.6"},
+ {:httpoison, "~> 2.2"},
{:ja_serializer, github: "mbta/ja_serializer", branch: "master"},
{:jason, "~> 1.0"},
{:lcov_ex, "~> 0.2", only: [:dev, :test], runtime: false},
- {:mox, "~> 1.0.0", only: :test},
+ {:mox, "~> 1.2", only: :test},
{:oban, "~> 2.18"},
{:phoenix_ecto, "~> 4.0"},
{:phoenix_live_reload, "~> 1.5", only: :dev},
@@ -76,8 +75,8 @@ defmodule Arrow.MixProject do
{:phoenix, "~> 1.7.12"},
{:plug_cowboy, "~> 2.1"},
{:telemetry, "~> 1.2", override: true},
- {:telemetry_poller, "~> 0.4"},
- {:telemetry_metrics, "~> 0.4"},
+ {:telemetry_poller, "~> 1.1"},
+ {:telemetry_metrics, "~> 1.0"},
{:postgrex, ">= 0.0.0"},
# If react_phoenix changes, check assets/src/ReactPhoenix.js, too
{:react_phoenix, "1.3.1"},
@@ -85,8 +84,8 @@ defmodule Arrow.MixProject do
{:ueberauth_cognito, "0.4.0"},
{:ueberauth_oidcc, "~> 0.4.0"},
{:ueberauth, "~> 0.10"},
- {:wallaby, "~> 0.30.6", runtime: false, only: :test},
- {:sentry, "~> 8.0"},
+ {:wallaby, "~> 0.30", runtime: false, only: :test},
+ {:sentry, "~> 10.7"},
{:tailwind, "~> 0.2", runtime: Mix.env() == :dev},
{:heroicons,
github: "tailwindlabs/heroicons",
diff --git a/mix.lock b/mix.lock
index 940bc325..ff81aec0 100644
--- a/mix.lock
+++ b/mix.lock
@@ -1,82 +1,84 @@
%{
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
- "castore": {:hex, :castore, "1.0.7", "b651241514e5f6956028147fe6637f7ac13802537e895a724f90bf3e36ddd1dd", [:mix], [], "hexpm", "da7785a4b0d2a021cd1292a60875a784b6caef71e76bf4917bdee1f390455cf5"},
+ "castore": {:hex, :castore, "1.0.9", "5cc77474afadf02c7c017823f460a17daa7908e991b0cc917febc90e466a375c", [:mix], [], "hexpm", "5ea956504f1ba6f2b4eb707061d8e17870de2bee95fb59d512872c2ef06925e7"},
"certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"},
"cowboy": {:hex, :cowboy, "2.12.0", "f276d521a1ff88b2b9b4c54d0e753da6c66dd7be6c9fca3d9418b561828a3731", [:make, :rebar3], [{:cowlib, "2.13.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "8a7abe6d183372ceb21caa2709bec928ab2b72e18a3911aa1771639bef82651e"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
"cowlib": {:hex, :cowlib, "2.13.0", "db8f7505d8332d98ef50a3ef34b34c1afddec7506e4ee4dd4a3a266285d282ca", [:make, :rebar3], [], "hexpm", "e1e1284dc3fc030a64b1ad0d8382ae7e99da46c3246b815318a4b848873800a4"},
- "credo": {:hex, :credo, "1.7.6", "b8f14011a5443f2839b04def0b252300842ce7388f3af177157c86da18dfbeea", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "146f347fb9f8cbc5f7e39e3f22f70acbef51d441baa6d10169dd604bfbc55296"},
+ "credo": {:hex, :credo, "1.7.8", "9722ba1681e973025908d542ec3d95db5f9c549251ba5b028e251ad8c24ab8c5", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cb9e87cc64f152f3ed1c6e325e7b894dea8f5ef2e41123bd864e3cd5ceb44968"},
"csv": {:hex, :csv, "3.2.1", "6d401f1ed33acb2627682a9ab6021e96d33ca6c1c6bccc243d8f7e2197d032f5", [:mix], [], "hexpm", "8f55a0524923ae49e97ff2642122a2ce7c61e159e7fe1184670b2ce847aee6c8"},
- "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"},
+ "db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"},
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
- "dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
- "ecto": {:hex, :ecto, "3.11.0", "ff8614b4e70a774f9d39af809c426def80852048440e8785d93a6e91f48fec00", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7769dad267ef967310d6e988e92d772659b11b09a0c015f101ce0fff81ce1f81"},
- "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.8.1", "cdfee5cb21d51af37d14233e4aa3ef38189bf42c499d6a8160a943c990cc74e2", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "> 0.16.0 and < 0.20.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "c0a1df8181c87a0419afa881452329a9dfd2c1fb2a737bf147f862dfa44a1af0"},
- "ecto_sql": {:hex, :ecto_sql, "3.11.0", "c787b24b224942b69c9ff7ab9107f258ecdc68326be04815c6cce2941b6fad1c", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "77aa3677169f55c2714dda7352d563002d180eb33c0dc29cd36d39c0a1a971f5"},
- "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
- "esbuild": {:hex, :esbuild, "0.8.1", "0cbf919f0eccb136d2eeef0df49c4acf55336de864e63594adcea3814f3edf41", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "25fc876a67c13cb0a776e7b5d7974851556baeda2085296c14ab48555ea7560f"},
- "ex_aws": {:hex, :ex_aws, "2.3.2", "37d6c9d81b641508e1722e69ace6ae7f9f6b3c7984e769e623591f4b2ead766a", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8 or ~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d18fdd9d6827e52e1097b07655fd08977516a2e64e9355c2bcaa30ad092e0ae5"},
+ "dialyxir": {:hex, :dialyxir, "1.4.4", "fb3ce8741edeaea59c9ae84d5cec75da00fa89fe401c72d6e047d11a61f65f70", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "cd6111e8017ccd563e65621a4d9a4a1c5cd333df30cebc7face8029cacb4eff6"},
+ "ecto": {:hex, :ecto, "3.12.4", "267c94d9f2969e6acc4dd5e3e3af5b05cdae89a4d549925f3008b2b7eb0b93c3", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ef04e4101688a67d061e1b10d7bc1fbf00d1d13c17eef08b71d070ff9188f747"},
+ "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.8.2", "79350a53246ac5ec27326d208496aebceb77fa82a91744f66a9154560f0759d3", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "> 0.16.0 and < 0.20.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "6149c1c4a5ba6602a76cb09ee7a269eb60dab9694a1dbbb797f032555212de75"},
+ "ecto_sql": {:hex, :ecto_sql, "3.12.1", "c0d0d60e85d9ff4631f12bafa454bc392ce8b9ec83531a412c12a0d415a3a4d0", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "aff5b958a899762c5f09028c847569f7dfb9cc9d63bdb8133bff8a5546de6bf5"},
+ "erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
+ "esbuild": {:hex, :esbuild, "0.8.2", "5f379dfa383ef482b738e7771daf238b2d1cfb0222bef9d3b20d4c8f06c7a7ac", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "558a8a08ed78eb820efbfda1de196569d8bfa9b51e8371a1934fbb31345feda7"},
+ "ex_aws": {:hex, :ex_aws, "2.5.6", "6f642e0f82eff10a9b470044f084b81a791cf15b393d647ea5f3e65da2794e3d", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8 or ~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:req, "~> 0.3", [hex: :req, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c69eec59e31fdd89d0beeb1d97e16518dd1b23ad95b3d5c9f1dcfec23d97f960"},
"ex_aws_rds": {:hex, :ex_aws_rds, "2.0.2", "38dd8e83d57cf4b7286c4f6f5c978f700c40c207ffcdd6ca5d738e5eba933f9a", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}], "hexpm", "9e5b5cc168077874cbd0d29ba65d01caf1877e705fb5cecacf0667dd19bfa75c"},
- "ex_aws_s3": {:hex, :ex_aws_s3, "2.5.3", "422468e5c3e1a4da5298e66c3468b465cfd354b842e512cb1f6fbbe4e2f5bdaf", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "4f09dd372cc386550e484808c5ac5027766c8d0cd8271ccc578b82ee6ef4f3b8"},
+ "ex_aws_s3": {:hex, :ex_aws_s3, "2.5.4", "87aaf4a2f24a48f516d7f5aaced9d128dd5d0f655c4431f9037a11a85c71109c", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "c06e7f68b33f7c0acba1361dbd951c79661a28f85aa2e0582990fccca4425355"},
"ex_aws_secretsmanager": {:hex, :ex_aws_secretsmanager, "2.0.0", "deff8c12335f0160882afeb9687e55a97fddcd7d9a82fc3a6fbb270797374773", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}], "hexpm", "8b2838af536c32263ff797012b29e87bad73ef34f43cfa60ebca8e84576f6d45"},
- "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"},
- "expo": {:hex, :expo, "0.1.0", "d4e932bdad052c374118e312e35280f1919ac13881cb3ac07a209a54d0c81dd8", [:mix], [], "hexpm", "c22c536021c56de058aaeedeabb4744eb5d48137bacf8c29f04d25b6c6bbbf45"},
- "file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"},
- "floki": {:hex, :floki, "0.36.2", "a7da0193538c93f937714a6704369711998a51a6164a222d710ebd54020aa7a3", [:mix], [], "hexpm", "a8766c0bc92f074e5cb36c4f9961982eda84c5d2b8e979ca67f5c268ec8ed580"},
- "gettext": {:hex, :gettext, "0.21.0", "15bbceb20b317b706a8041061a08e858b5a189654128618b53746bf36c84352b", [:mix], [{:expo, "~> 0.1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "04a66db4103b6d1d18f92240bb2c73167b517229316b7bef84e4eebbfb2f14f6"},
- "guardian": {:hex, :guardian, "2.3.1", "2b2d78dc399a7df182d739ddc0e566d88723299bfac20be36255e2d052fd215d", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bbe241f9ca1b09fad916ad42d6049d2600bbc688aba5b3c4a6c82592a54274c3"},
+ "ex_machina": {:hex, :ex_machina, "2.8.0", "a0e847b5712065055ec3255840e2c78ef9366634d62390839d4880483be38abe", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "79fe1a9c64c0c1c1fab6c4fa5d871682cb90de5885320c187d117004627a7729"},
+ "expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"},
+ "file_system": {:hex, :file_system, "1.0.1", "79e8ceaddb0416f8b8cd02a0127bdbababe7bf4a23d2a395b983c1f8b3f73edd", [:mix], [], "hexpm", "4414d1f38863ddf9120720cd976fce5bdde8e91d8283353f0e31850fa89feb9e"},
+ "floki": {:hex, :floki, "0.36.3", "1102f93b16a55bc5383b85ae3ec470f82dee056eaeff9195e8afdf0ef2a43c30", [:mix], [], "hexpm", "fe0158bff509e407735f6d40b3ee0d7deb47f3f3ee7c6c182ad28599f9f6b27a"},
+ "gettext": {:hex, :gettext, "0.26.1", "38e14ea5dcf962d1fc9f361b63ea07c0ce715a8ef1f9e82d3dfb8e67e0416715", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "01ce56f188b9dc28780a52783d6529ad2bc7124f9744e571e1ee4ea88bf08734"},
+ "guardian": {:hex, :guardian, "2.3.2", "78003504b987f2b189d76ccf9496ceaa6a454bb2763627702233f31eb7212881", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "b189ff38cd46a22a8a824866a6867ca8722942347f13c33f7d23126af8821b52"},
"hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"},
- "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "88ab3a0d790e6a47404cba02800a6b25d2afae50", [tag: "v2.1.1", sparse: "optimized"]},
- "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"},
- "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
+ "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "88ab3a0d790e6a47404cba02800a6b25d2afae50", [tag: "v2.1.1", sparse: "optimized", depth: 1]},
+ "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"},
+ "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
"inflex": {:hex, :inflex, "1.10.0", "8366a7696e70e1813aca102e61274addf85d99f4a072b2f9c7984054ea1b9d29", [:mix], [], "hexpm", "7b5ccb9b720c26516f5962dc4565fc26f083ca107b0f6c167048506a125d2df3"},
"ja_serializer": {:git, "https://github.com/mbta/ja_serializer.git", "efb1d4489809e31e4b54b4af9e85f0b3ceeb650b", [branch: "master"]},
- "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
+ "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
"jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"},
- "lcov_ex": {:hex, :lcov_ex, "0.2.2", "2dd1ef86ed510ac9c3fe3f11b82cbfd09c92b91b7d6565298932c560f72bd584", [:mix], [], "hexpm", "5e412eddb6a384d2e66cff94eec048ba5c9ed30d6cd9fb5a331456b210de0801"},
+ "lcov_ex": {:hex, :lcov_ex, "0.3.3", "1745a88e46606c4f86408299f54878b7d0cd22ea3e9c54b0018b6ed631a9ce87", [:mix], [], "hexpm", "ea373ec4d2df213357c5a464be16ab08d1e58e61ea2de784a483780c22a1e74a"},
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
- "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
- "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
- "mox": {:hex, :mox, "1.0.1", "b651bf0113265cda0ba3a827fcb691f848b683c373b77e7d7439910a8d754d6e", [:mix], [], "hexpm", "35bc0dea5499d18db4ef7fe4360067a59b06c74376eb6ab3bd67e6295b133469"},
+ "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
+ "mimerl": {:hex, :mimerl, "1.3.0", "d0cd9fc04b9061f82490f6581e0128379830e78535e017f7780f37fea7545726", [:rebar3], [], "hexpm", "a1e15a50d1887217de95f0b9b0793e32853f7c258a5cd227650889b38839fe9d"},
+ "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"},
+ "nimble_ownership": {:hex, :nimble_ownership, "1.0.0", "3f87744d42c21b2042a0aa1d48c83c77e6dd9dd357e425a038dd4b49ba8b79a1", [:mix], [], "hexpm", "7c16cc74f4e952464220a73055b557a273e8b1b7ace8489ec9d86e9ad56cb2cc"},
"oban": {:hex, :oban, "2.18.3", "1608c04f8856c108555c379f2f56bc0759149d35fa9d3b825cb8a6769f8ae926", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "36ca6ca84ef6518f9c2c759ea88efd438a3c81d667ba23b02b062a0aa785475e"},
- "oidcc": {:hex, :oidcc, "3.2.0", "f80a4826a946ce07dc8cbd8212392b4ff436ae3c4b4cd6680fa0d84d0ff2fec1", [:mix, :rebar3], [{:jose, "~> 1.11", [hex: :jose, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.2", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.3.1", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "38fd9092ab5d5d10c71b8011b019316411afe466bef07ba57f57ec3f919278c3"},
+ "oidcc": {:hex, :oidcc, "3.2.4", "0bbe0f6059682dcb3bb70f682ede606779ea7b73337803a05c7d8eb3ae76acc0", [:mix, :rebar3], [{:jose, "~> 1.11", [hex: :jose, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.2", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.3.1", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "984956348f6f833577b7a6cb72b325936cab3fd1c9cf28d7d54773d3ea48a20a"},
"parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"},
- "phoenix": {:hex, :phoenix, "1.7.12", "1cc589e0eab99f593a8aa38ec45f15d25297dd6187ee801c8de8947090b5a9d3", [: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", "d646192fbade9f485b01bc9920c139bfdd19d0f8df3d73fd8eaf2dfbe0d2837c"},
- "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.3", "86e9878f833829c3f66da03d75254c155d91d72a201eb56ae83482328dc7ca93", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d36c401206f3011fefd63d04e8ef626ec8791975d9d107f9a0817d426f61ac07"},
+ "phoenix": {:hex, :phoenix, "1.7.14", "a7d0b3f1bc95987044ddada111e77bd7f75646a08518942c72a8440278ae7825", [: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", "c7859bc56cc5dfef19ecfc240775dae358cbaa530231118a9e014df392ace61a"},
+ "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.2", "3b83b24ab5a2eb071a20372f740d7118767c272db386831b2e77638c4dcc606d", [: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", "3f94d025f59de86be00f5f8c5dd7b5965a3298458d21ab1c328488be3b5fcd59"},
"phoenix_html": {:hex, :phoenix_html, "3.3.4", "42a09fc443bbc1da37e372a5c8e6755d046f22b9b11343bf885067357da21cb3", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "0249d3abec3714aff3415e7ee3d9786cb325be3151e6c4b3021502c585bf53fb"},
- "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.3", "7ff51c9b6609470f681fbea20578dede0e548302b0c8bdf338b5a753a4f045bf", [: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", "f9470a0a8bae4f56430a23d42f977b5a6205fdba6559d76f932b876bfaec652d"},
- "phoenix_live_react": {:hex, :phoenix_live_react, "0.4.2", "8a37f3cccd26c3d992ffd677a7b8ecbd7746980caf560ac5d9c5efb7eb260910", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.11 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}], "hexpm", "eb0fb004afc0904510915b6b3e9458fc3144694dcd5a736d9d2feb00197becdc"},
+ "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.4", "4508e481f791ce62ec6a096e13b061387158cbeefacca68c6c1928e1305e23ed", [: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", "2984aae96994fbc5c61795a73b8fb58153b41ff934019cfb522343d2d3817d59"},
+ "phoenix_live_react": {:hex, :phoenix_live_react, "0.5.0", "8ef46146fcf9957b377e3f3187e85574e6f407b19d822a131501c32e6c16f4b1", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.11 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}], "hexpm", "cb64d778ca26e5cfc89153a0799a43b790cbbb5d6fe025e4e11d97ca5ef8e72d"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"},
- "phoenix_live_view": {:hex, :phoenix_live_view, "0.20.14", "70fa101aa0539e81bed4238777498f6215e9dda3461bdaa067cad6908110c364", [: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", [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", "82f6d006c5264f979ed5eb75593d808bbe39020f20df2e78426f4f2d570e2402"},
+ "phoenix_live_view": {:hex, :phoenix_live_view, "0.20.17", "f396bbdaf4ba227b82251eb75ac0afa6b3da5e509bc0d030206374237dfc9450", [: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", [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", "a61d741ffb78c85fdbca0de084da6a48f8ceb5261a79165b5a0b59e5f65ce98b"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"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"},
- "plug": {:hex, :plug, "1.16.0", "1d07d50cb9bb05097fdf187b31cf087c7297aafc3fed8299aac79c128a707e47", [: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", "cbf53aa1f5c4d758a7559c0bd6d59e286c2be0c6a1fac8cc3eee2f638243b93e"},
- "plug_cowboy": {:hex, :plug_cowboy, "2.7.1", "87677ffe3b765bc96a89be7960f81703223fe2e21efa42c125fcd0127dd9d6b2", [: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", "02dbd5f9ab571b864ae39418db7811618506256f6d13b4a45037e5fe78dc5de3"},
+ "plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [: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", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"},
+ "plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [: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", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"},
"plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"},
"poison": {:hex, :poison, "5.0.0", "d2b54589ab4157bbb82ec2050757779bfed724463a544b6e20d79855a9e43b24", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "11dc6117c501b80c62a7594f941d043982a1bd05a1184280c0d9166eb4d8d3fc"},
- "postgrex": {:hex, :postgrex, "0.17.3", "c92cda8de2033a7585dae8c61b1d420a1a1322421df84da9a82a6764580c503d", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "946cf46935a4fdca7a81448be76ba3503cff082df42c6ec1ff16a4bdfbfb098d"},
+ "postgrex": {:hex, :postgrex, "0.19.2", "34d6884a332c7bf1e367fc8b9a849d23b43f7da5c6e263def92784d03f9da468", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "618988886ab7ae8561ebed9a3c7469034bf6a88b8995785a3378746a4b9835ec"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"react_phoenix": {:hex, :react_phoenix, "1.3.1", "b2abb625ce7304a3b2ac5eea3126c30ef1e1c860f9ef27290ee726ab1fa3a87a", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.11 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}], "hexpm", "a10de67f02f6c5cf04f6987cef7413400d671936b4df97e0b9ac3c227ba27e6b"},
- "sax_map": {:hex, :sax_map, "1.2.1", "e0278054268c70f429084700680bf01c77a99508ea73713c9ed6b7b216e0a5da", [:mix], [{:saxy, "~> 1.3", [hex: :saxy, repo: "hexpm", optional: false]}], "hexpm", "98348ea9777c0577e074cba2e2d769cdd842dce8f79c89d1d59616e428d9cacc"},
- "saxy": {:hex, :saxy, "1.5.0", "0141127f2d042856f135fb2d94e0beecda7a2306f47546dbc6411fc5b07e28bf", [:mix], [], "hexpm", "ea7bb6328fbd1f2aceffa3ec6090bfb18c85aadf0f8e5030905e84235861cf89"},
- "sentry": {:hex, :sentry, "8.0.6", "c8de1bf0523bc120ec37d596c55260901029ecb0994e7075b0973328779ceef7", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.3", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "051a2d0472162f3137787c7c9d6e6e4ef239de9329c8c45b1f1bf1e9379e1883"},
+ "sax_map": {:hex, :sax_map, "1.3.0", "d79ce48edf2c25720e79a2f62e3ee091ebd8b918d0e3a16f58010c7014a07d89", [:mix], [{:saxy, "~> 1.3", [hex: :saxy, repo: "hexpm", optional: false]}], "hexpm", "5f9086c757aae9f951a7ef0139a9ae56586a126c0da150b71d5ec6cd25309d85"},
+ "saxy": {:hex, :saxy, "1.6.0", "02cb4e9bd045f25ac0c70fae8164754878327ee393c338a090288210b02317ee", [:mix], [], "hexpm", "ef42eb4ac983ca77d650fbdb68368b26570f6cc5895f0faa04d34a6f384abad3"},
+ "sentry": {:hex, :sentry, "10.7.1", "33392222d80ccff99c503f972998d2858b4c1e5aca2219a34269b68dacba8e7d", [: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", [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", "56291312397bf2b6afab6cf4f7aa1f27413b0eb2ceeb63b8aab2d7658aaea882"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
"sweet_xml": {:hex, :sweet_xml, "0.7.4", "a8b7e1ce7ecd775c7e8a65d501bc2cd933bff3a9c41ab763f5105688ef485d08", [:mix], [], "hexpm", "e7c4b0bdbf460c928234951def54fe87edf1a170f6896675443279e2dbeba167"},
"table_rex": {:hex, :table_rex, "4.0.0", "3c613a68ebdc6d4d1e731bc973c233500974ec3993c99fcdabb210407b90959b", [:mix], [], "hexpm", "c35c4d5612ca49ebb0344ea10387da4d2afe278387d4019e4d8111e815df8f55"},
- "tailwind": {:hex, :tailwind, "0.2.2", "9e27288b568ede1d88517e8c61259bc214a12d7eed271e102db4c93fcca9b2cd", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "ccfb5025179ea307f7f899d1bb3905cd0ac9f687ed77feebc8f67bdca78565c4"},
+ "tailwind": {:hex, :tailwind, "0.2.4", "5706ec47182d4e7045901302bf3a333e80f3d1af65c442ba9a9eed152fb26c2e", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "c6e4a82b8727bab593700c998a4d98cf3d8025678bfde059aed71d0000c3e463"},
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
- "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"},
- "telemetry_poller": {:hex, :telemetry_poller, "0.5.1", "21071cc2e536810bac5628b935521ff3e28f0303e770951158c73eaaa01e962a", [:rebar3], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4cab72069210bc6e7a080cec9afffad1b33370149ed5d379b81c7c5f0c663fd4"},
- "telemetry_registry": {:hex, :telemetry_registry, "0.3.1", "14a3319a7d9027bdbff7ebcacf1a438f5f5c903057b93aee484cca26f05bdcba", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "6d0ca77b691cf854ed074b459a93b87f4c7f5512f8f7743c635ca83da81f939e"},
- "tesla": {:hex, :tesla, "1.8.0", "d511a4f5c5e42538d97eef7c40ec4f3e44effdc5068206f42ed859e09e51d1fd", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, ">= 1.0.0", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.2", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "10501f360cd926a309501287470372af1a6e1cbed0f43949203a4c13300bc79f"},
+ "telemetry_metrics": {:hex, :telemetry_metrics, "1.0.0", "29f5f84991ca98b8eb02fc208b2e6de7c95f8bb2294ef244a176675adc7775df", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f23713b3847286a534e005126d4c959ebcca68ae9582118ce436b521d1d47d5d"},
+ "telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"},
+ "telemetry_registry": {:hex, :telemetry_registry, "0.3.2", "701576890320be6428189bff963e865e8f23e0ff3615eade8f78662be0fc003c", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7ed191eb1d115a3034af8e1e35e4e63d5348851d556646d46ca3d1b4e16bab9"},
+ "tesla": {:hex, :tesla, "1.13.0", "24a068a48d107080dd7c943a593997eee265977a38020eb2ab657cca78a12502", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, ">= 1.0.0", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.2", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:mox, "~> 1.0", [hex: :mox, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "7b8fc8f6b0640fa0d090af7889d12eb396460e044b6f8688a8e55e30406a2200"},
"tzdata": {:hex, :tzdata, "1.1.2", "45e5f1fcf8729525ec27c65e163be5b3d247ab1702581a94674e008413eef50b", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "cec7b286e608371602318c414f344941d5eb0375e14cfdab605cca2fe66cba8b"},
"ueberauth": {:hex, :ueberauth, "0.10.8", "ba78fbcbb27d811a6cd06ad851793aaf7d27c3b30c9e95349c2c362b344cd8f0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f2d3172e52821375bccb8460e5fa5cb91cfd60b19b636b6e57e9759b6f8c10c1"},
"ueberauth_cognito": {:hex, :ueberauth_cognito, "0.4.0", "62daa3f675298c2b03002d2e1b7e5a30cbc513400e5732a264864a26847e71ac", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:jose, "~> 1.0", [hex: :jose, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.7", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "62378f4f34c8569cd95cc4e7463c56e9981c8afc83fdc516922065f0e1302a35"},
"ueberauth_oidcc": {:hex, :ueberauth_oidcc, "0.4.0", "3fbfbc38735b4dba54ed8bf3e9b80f5054f73cc1ec9af6ae88b7886d25934768", [:mix], [{:oidcc, "~> 3.2.0", [hex: :oidcc, repo: "hexpm", optional: false]}, {:plug, "~> 1.11", [hex: :plug, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.10", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "cdd8517d773cfe499c0b692f795f213b2eb33119afbec34aefd8be0a85c62b21"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
"unzip": {:hex, :unzip, "0.12.0", "beed92238724732418b41eba77dcb7f51e235b707406c05b1732a3052d1c0f36", [:mix], [], "hexpm", "95655b72db368e5a84951f0bed586ac053b55ee3815fd96062fce10ce4fc998d"},
- "wallaby": {:hex, :wallaby, "0.30.6", "7dc4c1213f3b52c4152581d126632bc7e06892336d3a0f582853efeeabd45a71", [:mix], [{:ecto_sql, ">= 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}, {:httpoison, "~> 0.12 or ~> 1.0 or ~> 2.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_ecto, ">= 3.0.0", [hex: :phoenix_ecto, repo: "hexpm", optional: true]}, {:web_driver_client, "~> 0.2.0", [hex: :web_driver_client, repo: "hexpm", optional: false]}], "hexpm", "50950c1d968549b54c20e16175c68c7fc0824138e2bb93feb11ef6add8eb23d4"},
+ "wallaby": {:hex, :wallaby, "0.30.9", "51d60682092c3c428c63b656b818e2258202b9f9a31ec37230659647ae20325b", [:mix], [{:ecto_sql, ">= 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}, {:httpoison, "~> 0.12 or ~> 1.0 or ~> 2.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_ecto, ">= 3.0.0", [hex: :phoenix_ecto, repo: "hexpm", optional: true]}, {:web_driver_client, "~> 0.2.0", [hex: :web_driver_client, repo: "hexpm", optional: false]}], "hexpm", "62e3ccb89068b231b50ed046219022020516d44f443eebef93a19db4be95b808"},
"web_driver_client": {:hex, :web_driver_client, "0.2.0", "63b76cd9eb3b0716ec5467a0f8bead73d3d9612e63f7560d21357f03ad86e31a", [:mix], [{:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:tesla, "~> 1.3", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "83cc6092bc3e74926d1c8455f0ce927d5d1d36707b74d9a65e38c084aab0350f"},
"websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
- "websock_adapter": {:hex, :websock_adapter, "0.5.6", "0437fe56e093fd4ac422de33bf8fc89f7bc1416a3f2d732d8b2c8fd54792fe60", [: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", "e04378d26b0af627817ae84c92083b7e97aca3121196679b73c73b99d0d133ea"},
+ "websock_adapter": {:hex, :websock_adapter, "0.5.7", "65fa74042530064ef0570b75b43f5c49bb8b235d6515671b3d250022cb8a1f9e", [: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", "d0f478ee64deddfec64b800673fd6e0c8888b079d9f3444dd96d2a98383bdbd1"},
}
diff --git a/test/arrow_web/controllers/shape_controller_test.exs b/test/arrow_web/controllers/shape_controller_test.exs
index 69809a55..18cac68e 100644
--- a/test/arrow_web/controllers/shape_controller_test.exs
+++ b/test/arrow_web/controllers/shape_controller_test.exs
@@ -27,13 +27,6 @@ defmodule ArrowWeb.ShapeControllerTest do
filename: "invalid_file.kml"
}
}
- @invalid_whitespace_attrs %{
- name: nil,
- filename: %Plug.Upload{
- path: "test/support/fixtures/kml/invalid_whitespace_shape.kml",
- filename: "invalid_whitespace_shape.kml"
- }
- }
@file_read_fail_attrs %{
name: nil,
filename: %Plug.Upload{
@@ -141,18 +134,6 @@ defmodule ArrowWeb.ShapeControllerTest do
assert html_response(conn, 200) =~ "Components.ShapeViewMap"
end
- @tag :authenticated_admin
- test "renders errors when data is invalid due to invalid whitespace in XML", %{conn: conn} do
- conn = post(conn, ~p"/shapes_upload", shapes_upload: @invalid_whitespace_attrs)
-
- assert html_response(conn, 200) =~
- "Failed to parse shape from kml, no coordinates were found."
-
- assert html_response(conn, 200) =~ "Check your whitespace."
- assert html_response(conn, 200) =~ "new shapes"
- assert html_response(conn, 200) =~ "Components.ShapeViewMap"
- end
-
@tag :authenticated_admin
test "renders errors when file read fails", %{conn: conn} do
conn = post(conn, ~p"/shapes_upload", shapes_upload: @file_read_fail_attrs)
diff --git a/test/arrow_web/controllers/stop_controller_test.exs b/test/arrow_web/controllers/stop_controller_test.exs
index da8ab49c..0c0d66b7 100644
--- a/test/arrow_web/controllers/stop_controller_test.exs
+++ b/test/arrow_web/controllers/stop_controller_test.exs
@@ -40,7 +40,7 @@ defmodule ArrowWeb.StopControllerTest do
conn = post(conn, ~p"/stops", stop: invalid_attrs)
assert redirected_to(conn) == ~p"/stops/new"
- assert get_flash(conn, :errors) ==
+ assert Phoenix.Flash.get(conn.assigns.flash, :errors) ==
{"Error creating stop, please try again", ["Stop id can\'t be blank"]}
end
end
diff --git a/test/arrow_web/try_api_token_auth_test.exs b/test/arrow_web/try_api_token_auth_test.exs
index dcfcbb61..3c5f2f2e 100644
--- a/test/arrow_web/try_api_token_auth_test.exs
+++ b/test/arrow_web/try_api_token_auth_test.exs
@@ -75,7 +75,7 @@ defmodule ArrowWeb.TryApiTokenAuthTest do
token = Arrow.AuthToken.get_or_create_token_for_user("foo@mbta.com")
log =
- capture_log([level: :warn], fn ->
+ capture_log([level: :warning], fn ->
conn =
conn
|> put_req_header("x-api-key", token)
diff --git a/test/support/fixtures/kml/invalid_whitespace_shape.kml b/test/support/fixtures/kml/invalid_whitespace_shape.kml
deleted file mode 100644
index f93e61fd..00000000
--- a/test/support/fixtures/kml/invalid_whitespace_shape.kml
+++ /dev/null
@@ -1,402 +0,0 @@
-
-
-
- May 23 test
-
- RL: Alewife - Harvard - Via Holyoke Gate - Harvard - SPACES
-
-
- -71.14163,42.39551
- -71.14163,42.39551
- -71.14163,42.39551
- -71.14209,42.39643
- -71.14285,42.39624
- -71.14292,42.39623
- -71.14301,42.3962
- -71.14305,42.3963
- -71.14307,42.39637
- -71.14307,42.39642
- -71.14302,42.39647
- -71.14295,42.3965
- -71.14192,42.39672
- -71.14192,42.39672
- -71.14137,42.39684
- -71.1412,42.39688
- -71.14092,42.39694
- -71.14074,42.39698
- -71.14046,42.39704
- -71.1404,42.39706
- -71.14034,42.39708
- -71.1403,42.39713
- -71.14027,42.39717
- -71.14026,42.39723
- -71.14027,42.39729
- -71.14035,42.39752
- -71.14038,42.39759
- -71.14042,42.39765
- -71.14047,42.3977
- -71.14053,42.39774
- -71.1406,42.39777
- -71.14068,42.3978
- -71.14075,42.39781
- -71.14082,42.39782
- -71.1409,42.39782
- -71.14096,42.39783
- -71.14102,42.39784
- -71.14107,42.39786
- -71.14112,42.39788
- -71.14116,42.39791
- -71.14118,42.39794
- -71.14121,42.39797
- -71.14123,42.39802
- -71.14124,42.39807
- -71.14122,42.39817
- -71.14121,42.39827
- -71.14117,42.39839
- -71.14113,42.39852
- -71.14107,42.39865
- -71.14096,42.39891
- -71.14087,42.39902
- -71.14077,42.39911
- -71.14065,42.39922
- -71.14052,42.39931
- -71.14032,42.39942
- -71.14006,42.39954
- -71.13991,42.3996
- -71.13974,42.39966
- -71.13957,42.3997
- -71.13939,42.39974
- -71.13915,42.39977
- -71.13891,42.39979
- -71.13839,42.39984
- -71.1382,42.39985
- -71.138,42.39987
- -71.13781,42.3999
- -71.13762,42.39993
- -71.13746,42.39997
- -71.13729,42.40002
- -71.13714,42.40008
- -71.13699,42.40014
- -71.13674,42.40029
- -71.1366,42.40039
- -71.13648,42.40049
- -71.13638,42.40059
- -71.13625,42.40071
- -71.13613,42.40082
- -71.1361,42.40085
- -71.13604,42.40091
- -71.13596,42.40099
- -71.1359,42.40105
- -71.13588,42.40107
- -71.13579,42.40117
- -71.13567,42.40132
- -71.13567,42.40133
- -71.13538,42.40166
- -71.13523,42.40183
- -71.13506,42.40198
- -71.13478,42.40225
- -71.13456,42.40246
- -71.13444,42.40262
- -71.13442,42.40267
- -71.13435,42.40281
- -71.13431,42.40295
- -71.13429,42.40309
- -71.13429,42.40353
- -71.13429,42.40354
- -71.13429,42.40354
- -71.13429,42.40376
- -71.1343,42.40401
- -71.13431,42.4043
- -71.1343,42.40438
- -71.13432,42.40468
- -71.13433,42.40505
- -71.13434,42.40528
- -71.13434,42.40541
- -71.13432,42.40553
- -71.13431,42.40563
- -71.13428,42.40574
- -71.13424,42.40589
- -71.13419,42.40602
- -71.13414,42.40612
- -71.13409,42.40621
- -71.13396,42.40641
- -71.13388,42.40652
- -71.1338,42.40663
- -71.13369,42.40676
- -71.13362,42.40684
- -71.13355,42.40692
- -71.13347,42.40688
- -71.13297,42.40662
- -71.13285,42.40656
- -71.13281,42.40654
- -71.13261,42.40645
- -71.13217,42.40623
- -71.13209,42.40619
- -71.13199,42.40614
- -71.13164,42.40596
- -71.1314,42.40585
- -71.13133,42.40582
- -71.13128,42.40579
- -71.13094,42.40562
- -71.13071,42.40552
- -71.13033,42.40523
- -71.13026,42.40518
- -71.13018,42.40512
- -71.13016,42.4051
- -71.1297,42.40476
- -71.12968,42.40474
- -71.12968,42.40474
- -71.12961,42.40469
- -71.12918,42.40437
- -71.1291,42.40432
- -71.12866,42.404
- -71.12862,42.40397
- -71.12859,42.40395
- -71.12854,42.40391
- -71.12849,42.40388
- -71.12812,42.40369
- -71.12762,42.40345
- -71.12738,42.40336
- -71.12725,42.40329
- -71.1271,42.40313
- -71.12706,42.40305
- -71.12704,42.40301
- -71.12701,42.40292
- -71.12701,42.40291
- -71.127,42.40288
- -71.12678,42.40243
- -71.12652,42.4018
- -71.12651,42.40178
- -71.12647,42.40169
- -71.12636,42.40144
- -71.12629,42.40129
- -71.12624,42.40118
- -71.12622,42.40112
- -71.12619,42.40105
- -71.12613,42.40098
- -71.12609,42.40093
- -71.12569,42.40043
- -71.12567,42.40041
- -71.12557,42.40028
- -71.12542,42.40009
- -71.12542,42.40009
- -71.12524,42.39986
- -71.12492,42.39947
- -71.12468,42.39916
- -71.12458,42.39904
- -71.12417,42.39852
- -71.12389,42.39819
- -71.12364,42.39789
- -71.12346,42.39767
- -71.12343,42.39763
- -71.12339,42.39759
- -71.1229,42.39697
- -71.12284,42.39689
- -71.12284,42.39689
- -71.12279,42.39679
- -71.12262,42.39658
- -71.12256,42.3965
- -71.1224,42.39624
- -71.12238,42.3962
- -71.12226,42.39599
- -71.12219,42.39586
- -71.12205,42.39561
- -71.12186,42.39533
- -71.12182,42.39527
- -71.1215,42.3948
- -71.12146,42.39474
- -71.12135,42.39458
- -71.12101,42.394
- -71.12094,42.39388
- -71.1209,42.39383
- -71.12082,42.39372
- -71.12049,42.39316
- -71.12038,42.39297
- -71.12031,42.39289
- -71.12025,42.39282
- -71.12022,42.39278
- -71.1198,42.39232
- -71.1198,42.39232
- -71.11938,42.39187
- -71.11914,42.39162
- -71.11909,42.39157
- -71.1192,42.39151
- -71.11942,42.3914
- -71.11957,42.39129
- -71.11967,42.3912
- -71.11991,42.39104
- -71.11996,42.39101
- -71.12001,42.39098
- -71.1203,42.39078
- -71.1203,42.39078
- -71.1208,42.39043
- -71.12087,42.39038
- -71.12096,42.39032
- -71.12105,42.39026
- -71.12097,42.39021
- -71.12072,42.39001
- -71.12053,42.38984
- -71.12051,42.38982
- -71.12008,42.3894
- -71.12004,42.38935
- -71.11992,42.3892
- -71.11987,42.38914
- -71.1198,42.38902
- -71.11973,42.38891
- -71.11971,42.38888
- -71.11967,42.38879
- -71.11964,42.38873
- -71.11961,42.38858
- -71.11953,42.38829
- -71.11951,42.38825
- -71.11948,42.38817
- -71.11946,42.38811
- -71.11939,42.38786
- -71.11934,42.38769
- -71.1193,42.38752
- -71.11926,42.38736
- -71.11924,42.3872
- -71.11924,42.38699
- -71.11924,42.38692
- -71.11925,42.38689
- -71.11925,42.38683
- -71.11926,42.38677
- -71.11927,42.38655
- -71.1193,42.38633
- -71.11931,42.38621
- -71.11935,42.38581
- -71.11938,42.38556
- -71.1194,42.38539
- -71.11943,42.38506
- -71.11944,42.38498
- -71.11945,42.38491
- -71.11946,42.38483
- -71.11946,42.38477
- -71.11948,42.38466
- -71.1195,42.38444
- -71.11953,42.38414
- -71.11956,42.38388
- -71.11956,42.38388
- -71.11956,42.38386
- -71.11957,42.38379
- -71.11958,42.38372
- -71.11958,42.38369
- -71.11962,42.38336
- -71.11975,42.38224
- -71.11979,42.38189
- -71.11979,42.38186
- -71.1198,42.3818
- -71.11981,42.3817
- -71.11981,42.38169
- -71.11985,42.38127
- -71.11987,42.38106
- -71.11989,42.38084
- -71.11994,42.38043
- -71.11997,42.38013
- -71.11997,42.3801
- -71.11999,42.37999
- -71.11999,42.37992
- -71.12004,42.37945
- -71.12005,42.37938
- -71.12009,42.37898
- -71.12011,42.37882
- -71.12014,42.37861
- -71.12014,42.37861
- -71.12017,42.37837
- -71.12021,42.378
- -71.12021,42.3779
- -71.12021,42.37786
- -71.12021,42.37777
- -71.12019,42.37769
- -71.12017,42.3776
- -71.12012,42.37749
- -71.11988,42.37686
- -71.11986,42.37682
- -71.11976,42.37657
- -71.11972,42.37646
- -71.11968,42.37637
- -71.11962,42.37622
- -71.11956,42.3761
- -71.1194,42.37573
- -71.11939,42.37572
- -71.11917,42.37521
- -71.11913,42.37511
- -71.11902,42.37505
- -71.11895,42.37502
- -71.11889,42.37501
- -71.1188,42.37501
- -71.11875,42.37502
- -71.11871,42.37503
- -71.11869,42.37504
- -71.11864,42.37505
- -71.11858,42.37509
- -71.11855,42.37521
- -71.11854,42.37527
- -71.1185,42.37541
- -71.11845,42.37554
- -71.11839,42.37562
- -71.11829,42.37574
- -71.11817,42.37581
- -71.11799,42.37589
- -71.11785,42.37592
- -71.11771,42.37593
- -71.11759,42.37592
- -71.11622,42.37564
- -71.11573,42.37554
- -71.11554,42.37547
- -71.11544,42.37542
- -71.11512,42.37523
- -71.11497,42.37514
- -71.11453,42.37487
- -71.11445,42.37483
- -71.1145,42.37475
- -71.11475,42.37376
- -71.11475,42.37376
- -71.11475,42.37376
- -71.11497,42.37291
- -71.11512,42.37238
- -71.11515,42.37231
- -71.11522,42.37233
- -71.11526,42.37234
- -71.11533,42.37236
- -71.11547,42.3724
- -71.11577,42.37249
- -71.11581,42.3725
- -71.11585,42.37251
- -71.1159,42.37252
- -71.11597,42.37254
- -71.11603,42.37256
- -71.11604,42.37256
- -71.11606,42.37257
- -71.11607,42.37258
- -71.11609,42.37259
- -71.1161,42.3726
- -71.11613,42.37261
- -71.11614,42.37262
- -71.11616,42.37263
- -71.11618,42.37263
- -71.11619,42.37264
- -71.1162,42.37264
- -71.11622,42.37265
- -71.11623,42.37265
- -71.11626,42.37266
- -71.1163,42.37267
- -71.11634,42.37268
- -71.1164,42.3727
- -71.11645,42.37271
- -71.11659,42.37274
- -71.11668,42.37277
- -71.11678,42.3728
- -71.11688,42.37282
- -71.11699,42.37285
- -71.1171,42.37288
- -71.11712,42.37289
- -71.11719,42.37291
- -71.11727,42.37294
- -71.11742,42.37298
- -71.11746,42.37299
-
-
-
-
-
From 88495a7eabe60333b32fa1ec910dd1f5e348a0f7 Mon Sep 17 00:00:00 2001
From: Eddie Maldonado
Date: Tue, 29 Oct 2024 16:15:28 -0400
Subject: [PATCH 4/4] feat: place form and map side by side on shuttle stop
page (#1025)
---
.../live/stop_live/stop_view_live.html.heex | 23 +++++++++++++------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/lib/arrow_web/live/stop_live/stop_view_live.html.heex b/lib/arrow_web/live/stop_live/stop_view_live.html.heex
index 23229170..18d97686 100644
--- a/lib/arrow_web/live/stop_live/stop_view_live.html.heex
+++ b/lib/arrow_web/live/stop_live/stop_view_live.html.heex
@@ -2,10 +2,19 @@
<%= @title %>
-<%= live_react_component("Components.StopViewMap", [stop: @stop_map_props], id: "stop-view-map") %>
-<.stop_form
- form={@form}
- action={@form_action}
- http_action={@http_action}
- trigger_submit={@trigger_submit}
-/>
+
+
+
+ <.stop_form
+ form={@form}
+ action={@form_action}
+ http_action={@http_action}
+ trigger_submit={@trigger_submit}
+ />
+
+ <%= live_react_component("Components.StopViewMap", [stop: @stop_map_props],
+ id: "stop-view-map",
+ container: [class: "col-lg-6"]
+ ) %>
+
+