Mayel de Borniol 2024-03-17 14:26:46 +00:00
parent 80c1db51e7
commit 8505db3ca9
15 changed files with 174 additions and 63 deletions

View file

@ -8,7 +8,7 @@ jobs:
docs:
name: Generate docs (upon new release)
runs-on: ubuntu-latest
container: hexpm/elixir:1.16.2-erlang-26.2.3-alpine-3.19.1
container: hexpm/elixir:1.16.2-erlang-26.2.2-alpine-3.19.1
env:
FLAVOUR: cooperation
FLAVOUR_PATH: flavours/cooperation

View file

@ -20,7 +20,7 @@ jobs:
FLAVOUR: ${{ matrix.flavour }}
DOCKER_REPO: bonfire
ALPINE_VERSION: 3.19.1
ERLANG_VERSION: 26.2.3
ERLANG_VERSION: 26.2.2
ELIXIR_VERSION: 1.16.2
steps:
-

View file

@ -14,8 +14,8 @@ jobs:
strategy:
matrix:
flavour: ['classic'] # 'community', 'cooperation'
otp: ['26.2.3', '25.2.3']
elixir: ['1.16.2', '1.14.5']
otp: ['26.2.2', '25.2.3']
elixir: ['1.16.2'] # '1.14.5'
# ^ test with latest versions + oldest supported (i.e. versions available in debian stable)
env:
FLAVOUR: ${{matrix.flavour}}

View file

@ -11,7 +11,7 @@ jobs:
test_classic_flavour:
name: Test classic flavour
runs-on: ubuntu-latest
container: hexpm/elixir:1.16.2-erlang-26.2.3-alpine-3.19.1
container: hexpm/elixir:1.16.2-erlang-26.2.2-alpine-3.19.1
env:
FLAVOUR: classic
MIX_ENV: test

View file

@ -1,6 +1,6 @@
# You can use asdf or [mise](https://github.com/jdx/mise) to install these
# NOTE: see upgrade instructions in .tool-versions.env
erlang 26.2.3
erlang 26.2.2
elixir 1.16.2-otp-26
# erlang 25.3.2.8
# elixir 1.13.4-otp-25

View file

@ -211,8 +211,7 @@ config :sentry,
# NOTE: enabling errors with `Found two source files in different source root paths with the same relative path`
enable_source_code_context: false,
root_source_code_paths:
([project_root] ++ Bonfire.Mixer.dep_paths(Bonfire.Mixer.deps_names_for(:bonfire)))
|> IO.inspect(),
[project_root] ++ Bonfire.Mixer.dep_paths(Bonfire.Mixer.deps_names_for(:bonfire)),
source_code_exclude_patterns: [
~r/\/flavours\//,
~r/\/extensions\//,
@ -224,6 +223,24 @@ config :sentry,
context_lines: 15,
tags: %{app_version: Mix.Project.config()[:version]}
for dep <-
Bonfire.Mixer.mess_other_flavour_dep_names(flavour)
|> IO.inspect(
label:
"NOTE: these extensions are not part of the #{flavour} flavour and will be available but disabled by default"
) do
config dep,
modularity: :disabled
end
if System.get_env("WITH_API_GRAPHQL") != "yes" do
config :bonfire_api_graphql,
modularity: :disabled
else
config :bonfire_api_graphql,
modularity: true
end
# include Bonfire-specific config files
for config <- "bonfire_*.exs" |> Path.expand(__DIR__) |> Path.wildcard() do
# IO.inspect(include_config: config)

View file

@ -1,10 +1,5 @@
import Config
if System.get_env("WITH_API_GRAPHQL") != "yes" do
config :bonfire_api_graphql,
modularity: :disabled
end
config :bonfire_social, Bonfire.Social.Pins, modularity: :disabled
config :bonfire, :ui,

View file

@ -6,6 +6,7 @@ import Config
IO.puts("🔥 Welcome to Bonfire!")
flavour = System.get_env("FLAVOUR", "classic")
host = System.get_env("HOSTNAME", "localhost")
server_port = String.to_integer(System.get_env("SERVER_PORT", "4000"))
public_port = String.to_integer(System.get_env("PUBLIC_PORT", "4000"))

View file

@ -3,9 +3,6 @@ import Config
config :bonfire_ui_topics,
modularity: :disabled
config :bonfire_api_graphql,
modularity: :disabled
# Please note that most of these are defaults meant to be overridden by instance admins in Settings rather than edited here
config :bonfire, :ui,
# end theme

View file

@ -1,8 +1,5 @@
import Config
# config :bonfire_api_graphql,
# modularity: :disabled
# Please note that most of these are defaults meant to be overridden by instance admins in Settings rather than edited here
config :bonfire, :ui,
theme: [

View file

@ -1,8 +1,5 @@
import Config
# config :bonfire_api_graphql,
# modularity: :disabled
# Please note that most of these are defaults meant to be overridden by instance admins in Settings rather than edited here
config :bonfire, :ui,
theme: [

View file

@ -18,9 +18,11 @@ if not Code.ensure_loaded?(Mess) do
opts = opts(opts)
(sources || sources(opts[:use_local_forks?]))
# |> IO.inspect()
|> enum_deps()
# |> IO.inspect(label: "enum_deps")
|> deps_packages(extra_deps, opts)
# |> IO.inspect(label: "deps_packages")
end
defp sources(true), do: [path: "deps.path", git: "deps.git", hex: "deps.hex"]
@ -49,8 +51,16 @@ if not Code.ensure_loaded?(Mess) do
# |> IO.inspect(label: "opts for #{File.cwd!}")
end
defp enum_deps({k, v}) do
read(v, k)
defp enum_deps({:disabled, sublist}) do
sublist
|> Enum.flat_map(&enum_deps/1)
|> Enum.map(&Map.put(&1, :disabled, true))
# |> IO.inspect(label: "disabled")
end
defp enum_deps({kind, path}) do
maybe_read(path, kind)
end
defp enum_deps(sublist) when is_list(sublist) do
@ -133,7 +143,7 @@ if not Code.ensure_loaded?(Mess) do
if opts[:use_local_forks?] and File.exists?(path) do
[path, "#{config_dir}deps.flavour.path"]
|> Enum.flat_map(&read(&1, :path))
|> Enum.flat_map(&maybe_read(&1, :path))
|> Enum.flat_map(&dep_spec(&1, opts))
else
IO.warn("did not load #{path}")
@ -141,7 +151,7 @@ if not Code.ensure_loaded?(Mess) do
end
end
defp read(path, kind) when is_binary(path), do: have_read(File.read(path), path, kind)
defp maybe_read(path, kind) when is_binary(path), do: have_read(File.read(path), path, kind)
defp have_read({:error, :enoent}, _path, _kind) do
# IO.puts("Could not find #{path} in #{File.cwd!()}")
@ -156,35 +166,42 @@ if not Code.ensure_loaded?(Mess) do
defp dep_spec(%{"package" => ""}, _opts), do: []
defp dep_spec(%{"package" => p, "value" => v, :kind => :hex}, _opts),
do: pkg(p, v, override: true)
defp dep_spec(%{"package" => p, "value" => v, :kind => :hex} = params, _opts),
do: pkg(p, v, override: true, runtime: !params[:disabled])
defp dep_spec(%{"package" => p, "value" => v, :kind => :path}, opts) do
defp dep_spec(%{"package" => p, "value" => v, :kind => :path} = params, opts) do
umbrella_path = opts[:umbrella_path]
if umbrella_path && String.starts_with?(v, umbrella_path) do
if opts[:umbrella_root?] do
pkg(p, from_umbrella: true, override: true, path: "../../#{v}")
pkg(p,
from_umbrella: true,
override: true,
path: "../../#{v}",
runtime: !params[:disabled]
)
# |> IO.inspect(label: "from_umbrella: #{p}")
else
pkg(p, in_umbrella: true, override: true)
pkg(p, in_umbrella: true, override: true, runtime: !params[:disabled])
# |> IO.inspect(label: "in_umbrella: #{p}")
end
else
pkg(p, path: v, override: true)
pkg(p, path: v, override: true, runtime: !params[:disabled])
end
end
defp dep_spec(%{"package" => p, "value" => v, :kind => :git}, _opts), do: git(v, p)
defp dep_spec(%{"package" => p, "value" => v, :kind => :git} = params, _opts),
do: git(v, p, !params[:disabled])
defp git(line, p) when is_binary(line),
do: git(Regex.named_captures(@git_branch, line), p)
defp git(line, p, runtime) when is_binary(line),
do: git(Regex.named_captures(@git_branch, line), p, runtime)
defp git(%{"branch" => "", "repo" => r}, p),
do: pkg(p, git: r, override: true)
defp git(%{"branch" => "", "repo" => r}, p, runtime),
do: pkg(p, git: r, override: true, runtime: runtime)
defp git(%{"branch" => b, "repo" => r}, p),
do: pkg(p, git: r, branch: b, override: true)
defp git(%{"branch" => b, "repo" => r}, p, runtime),
do: pkg(p, git: r, branch: b, override: true, runtime: runtime)
defp pkg(name, opts), do: [{String.to_atom(name), opts}]
defp pkg(name, version, opts), do: [{String.to_atom(name), version, opts}]

View file

@ -55,9 +55,13 @@ if not Code.ensure_loaded?(Bonfire.Mixer) do
|> Enum.map(&dep_name/1)
end
def deps_names(deps \\ deps()) do
def deps_names_list(deps \\ deps(), as_atom \\ true) do
deps
|> Enum.map(&dep_name/1)
|> Enum.map(&dep_name(&1, as_atom))
end
def deps_names(deps \\ deps()) do
deps_names_list(deps, false)
|> Enum.join(" ")
end
@ -126,40 +130,109 @@ if not Code.ensure_loaded?(Bonfire.Mixer) do
def flavour(config), do: System.get_env("FLAVOUR") || config[:default_flavour]
def config_path(_config_or_flavour \\ nil, filename),
do: Path.expand(Path.join(["config", filename]))
def config_path(path \\ nil, filename),
do: Path.expand(Path.join([path || "config", filename]))
# flavour_path(config_or_flavour)
def forks_path(), do: System.get_env("FORKS_PATH", "extensions/")
def mess_sources(config_or_flavour) do
def mess_sources(flavour) do
mess_source_files(System.get_env("WITH_FORKS", "1"), System.get_env("WITH_GIT_DEPS", "1"))
|> enum_mess_sources(config_or_flavour)
|> maybe_all_flavour_sources(flavour, System.get_env("WITH_ALL_FLAVOUR_DEPS", "1"))
# |> IO.inspect(label: "messy")
end
defp enum_mess_sources({k, v}, config_or_flavour) do
{k, config_path(config_or_flavour, v)}
def mess_other_flavour_deps(current_flavour \\ System.get_env("FLAVOUR", "classic")) do
current_flavour_sources =
mess_source_files(System.get_env("WITH_FORKS", "1"), System.get_env("WITH_GIT_DEPS", "1"))
current_flavour_deps =
enum_mess_sources(current_flavour_sources)
# |> IO.inspect(label: "current_mess_sources")
|> Mess.deps([], [])
|> deps_names_list()
# |> IO.inspect(label: "current_flavour_deps", limit: :infinity)
other_flavours_sources = other_flavour_sources(current_flavour_sources, current_flavour)
# |> IO.inspect(label: "other_flavours_sources")
Mess.deps(other_flavours_sources, [], [])
# |> IO.inspect(label: "other_flavours_deps")
|> Enum.reject(fn
{dep, _} -> dep in current_flavour_deps
{dep, _, _} -> dep in current_flavour_deps
end)
# |> IO.inspect(label: "other_flavour_deps")
end
defp enum_mess_sources(sublist, config_or_flavour) when is_list(sublist) do
def mess_other_flavour_dep_names(current_flavour \\ System.get_env("FLAVOUR", "classic")) do
mess_other_flavour_deps(current_flavour)
|> deps_names_list()
end
defp maybe_all_flavour_sources(
existing_sources,
current_flavour,
"1" = _WITH_ALL_FLAVOUR_DEPS
) do
enum_mess_sources(existing_sources) ++
[disabled: other_flavour_sources(existing_sources, current_flavour)]
end
defp maybe_all_flavour_sources(existing_sources, _flavour, _not_WITH_ALL_FLAVOUR_DEPS) do
enum_mess_sources(existing_sources)
end
def other_flavour_sources(
existing_sources \\ mess_source_files(
System.get_env("WITH_FORKS", "1"),
System.get_env("WITH_GIT_DEPS", "1")
),
current_flavour \\ System.get_env("FLAVOUR", "classic")
) do
flavour_paths =
for path <- "flavours/*/config/" |> Path.wildcard() do
path
end
|> Enum.reject(&(&1 == "flavours/#{current_flavour}/config"))
# |> IO.inspect(label: "creams")
Enum.map(
flavour_paths,
&(List.first(existing_sources)
|> enum_mess_sources(&1))
)
end
defp enum_mess_sources(sublist, path \\ nil)
defp enum_mess_sources(sublist, path) when is_list(sublist) do
sublist
|> Enum.map(&enum_mess_sources(&1, config_or_flavour))
|> Enum.map(&enum_mess_sources(&1, path))
end
defp mess_source_files("0", "0"),
defp enum_mess_sources({k, v}, path) do
{k, config_path(path, v)}
end
defp mess_source_files("0" = _not_WITH_FORKS, "0" = _not_WITH_GIT_DEPS),
do: [[hex: "deps.flavour.hex"], [hex: "deps.hex"]]
defp mess_source_files("0", "1"),
defp mess_source_files("0" = _not_WITH_FORKS, "1" = _WITH_GIT_DEPS),
do: [[git: "deps.flavour.git", hex: "deps.flavour.hex"], [git: "deps.git", hex: "deps.hex"]]
defp mess_source_files("1", "0"),
defp mess_source_files("1" = _WITH_FORKS, "0" = _not_WITH_GIT_DEPS),
do: [
[path: "deps.flavour.path", hex: "deps.flavour.hex"],
[path: "deps.path", hex: "deps.hex"]
]
defp mess_source_files("1", "1"),
defp mess_source_files("1" = _WITH_FORKS, "1" = _WITH_GIT_DEPS),
do: [
[path: "deps.flavour.path", git: "deps.flavour.git", hex: "deps.flavour.hex"],
[path: "deps.path", git: "deps.git", hex: "deps.hex"]
@ -328,9 +401,11 @@ if not Code.ensure_loaded?(Bonfire.Mixer) do
is_list(spec) && spec[:git] && !spec[:commit]
end
def dep_name(dep) when is_tuple(dep), do: elem(dep, 0) |> dep_name()
def dep_name(dep) when is_atom(dep), do: Atom.to_string(dep)
def dep_name(dep) when is_binary(dep), do: dep
def dep_name(dep, as_atom \\ false)
def dep_name(dep, as_atom) when is_tuple(dep), do: elem(dep, 0) |> dep_name(as_atom)
def dep_name(dep, false) when is_atom(dep), do: Atom.to_string(dep)
def dep_name(dep, true) when is_binary(dep), do: String.to_existing_atom(dep)
def dep_name(dep, _), do: dep
def dep_path(dep, force? \\ false)

11
mix.exs
View file

@ -5,6 +5,9 @@ defmodule Bonfire.Umbrella.MixProject do
use Mix.Project
alias Bonfire.Mixer
@default_flavour "classic"
@flavour System.get_env("FLAVOUR") || @default_flavour
# we only behave as an umbrella im dev/test env
@use_local_forks System.get_env("WITH_FORKS", "1") == "1"
ext_forks_path = Mixer.forks_path()
@ -117,11 +120,11 @@ defmodule Bonfire.Umbrella.MixProject do
]
# TODO: put these in ENV or an external writeable config file similar to deps.*
@default_flavour "classic"
@config [
# note that the flavour will automatically be added where the dash appears
version: "0.9.10-beta.5",
elixir: ">= #{System.get_env("ELIXIR_VERSION", "1.13.4")}",
flavour: @flavour,
default_flavour: @default_flavour,
logo: "assets/static/images/bonfire-icon.png",
guides: [
@ -212,13 +215,13 @@ defmodule Bonfire.Umbrella.MixProject do
]
],
deps:
Mess.deps(Mixer.mess_sources(@default_flavour), @extra_deps,
Mess.deps(Mixer.mess_sources(@flavour), @extra_deps,
use_local_forks?: @use_local_forks,
use_umbrella?: @use_umbrella?,
umbrella_root?: @use_local_forks,
umbrella_path: @umbrella_path
)
|> IO.inspect(limit: :infinity)
# |> IO.inspect(limit: :infinity)
]
def config, do: @config
@ -246,7 +249,7 @@ defmodule Bonfire.Umbrella.MixProject do
config_path: "config/config.exs",
releases: [
bonfire: [
runtime_config_path: Mixer.config_path(config(), "runtime.exs"),
runtime_config_path: Mixer.config_path("runtime.exs"),
# should BEAM files should have their debug information, documentation chunks, and other non-essential metadata?
strip_beams: false,
applications: [

View file

@ -1,5 +1,6 @@
%{
"absinthe": {:hex, :absinthe, "1.7.6", "0b897365f98d068cfcb4533c0200a8e58825a4aeeae6ec33633ebed6de11773b", [:mix], [{:dataloader, "~> 1.0.0 or ~> 2.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.2.1", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0 or ~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7626951ca5eec627da960615b51009f3a774765406ff02722b1d818f17e5778"},
"absinthe_client": {:git, "https://github.com/bonfire-networks/absinthe_client", "6fba146bba117db18b783610e5e7c1271924cc35", [branch: "master"]},
"absinthe_error_payload": {:hex, :absinthe_error_payload, "1.1.4", "502ff239148c8deaac028ddb600d6502d5be68d24fece0c93f4c3cf7e74c1a4d", [:make, :mix], [{:absinthe, "~> 1.3", [hex: :absinthe, repo: "hexpm", optional: false]}, {:ecto, "~> 3.1", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm", "9e262ef2fd4a2c644075e0cdde2573b1f713c0676ab905c8640eaa8a882b2aca"},
"absinthe_phoenix": {:hex, :absinthe_phoenix, "2.0.2", "e607b438db900049b9b3760f8ecd0591017a46122fffed7057bf6989020992b5", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:absinthe_plug, "~> 1.5", [hex: :absinthe_plug, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.5", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "d36918925c380dc7d2ed7d039c9a3b4182ec36723f7417a68745ade5aab22f8d"},
"absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"},
@ -9,6 +10,7 @@
"argon2_elixir": {:hex, :argon2_elixir, "4.0.0", "7f6cd2e4a93a37f61d58a367d82f830ad9527082ff3c820b8197a8a736648941", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "f9da27cf060c9ea61b1bd47837a28d7e48a8f6fa13a745e252556c14f9132c7f"},
"arrows": {:hex, :arrows, "0.1.1", "c414e21173115987578bda1bf35a60cde228a16d7e52d9f6c76e1c8914c22c79", [:mix], [], "hexpm", "ce6de75d7cb43a032e9856826c5bace8f43434ee574e4a6a412f9d3b3931062e"},
"assert_value": {:hex, :assert_value, "0.10.4", "0f0e528f048734e1b9c7ed947696a18d387cb052b68c20d973ed28ee03623b5a", [:mix], [], "hexpm", "802784272bbff2c257b04b264c02fddc072a625502d615f111dd4769f6b1d2c0"},
"astro": {:hex, :astro, "1.0.0", "b42e028ada7ff20dded85f778092e607cb98847e7b8db4608733d2d415757235", [:mix], [{:geo, "~> 3.0", [hex: :geo, repo: "hexpm", optional: false]}, {:tz_world, "~> 1.0", [hex: :tz_world, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: true]}], "hexpm", "fda3e3adc52144b3f4e799f97af6931bb5b9cc4099b8213246ffdca191b823bd"},
"bamboo": {:hex, :bamboo, "2.3.0", "d2392a2cabe91edf488553d3c70638b532e8db7b76b84b0a39e3dfe492ffd6fc", [:mix], [{:hackney, ">= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.4 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "dd0037e68e108fd04d0e8773921512c940e35d981e097b5793543e3b2f9cd3f6"},
"bamboo_campaign_monitor": {:hex, :bamboo_campaign_monitor, "0.1.0", "e4b60354a2186c75e9a338fdd932e027b8bbeba9c274245546291429671e8753", [:mix], [{:bamboo, ">= 1.2.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:hackney, ">= 1.6.5", [hex: :hackney, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "5b60a27ab2b8596f274f22d3cb8bd8d8f3865667f1ec181bfa6635aa7646d79a"},
"bamboo_mailjet": {:hex, :bamboo_mailjet, "0.1.0", "8f1a6e2df2548544bc74f3d9fb9dfe7112ffeff5f8c0fc4ebece94364655e636", [:mix], [{:bamboo, "~> 1.2", [hex: :bamboo, repo: "hexpm", optional: false]}], "hexpm", "cb213439a14dfe0f8a54dbcb7b40790399d5207025378b64d9717271072e8427"},
@ -49,6 +51,7 @@
"bonfire_messages": {:git, "https://github.com/bonfire-networks/bonfire_messages", "669586ca419abbaf5046c8de12a78ee0da5f7c85", []},
"bonfire_open_id": {:git, "https://github.com/bonfire-networks/bonfire_open_id", "d4677da6303ddd6d45231c97f5de78926b2f5711", [branch: "main"]},
"bonfire_open_science": {:git, "https://github.com/bonfire-networks/bonfire_open_science", "0965ca8cae674ba2b641d684c345180dbbc30eb2", [branch: "main"]},
"bonfire_pages": {:git, "https://github.com/bonfire-networks/bonfire_pages", "5109facd7ecaeaa7faab15d01388b7886c86d596", [branch: "main"]},
"bonfire_posts": {:git, "https://github.com/bonfire-networks/bonfire_posts", "92d40004ab1948370b737a7f72757df72e0b252a", []},
"bonfire_search": {:git, "https://github.com/bonfire-networks/bonfire_search", "dacc7bc88957a54fb8dbe3c3f82af7618c8e68ca", [branch: "main"]},
"bonfire_social": {:git, "https://github.com/bonfire-networks/bonfire_social", "83251c8c955ee605062dcefd5806917ee64bee44", [branch: "main"]},
@ -60,6 +63,7 @@
"bonfire_ui_moderation": {:git, "https://github.com/bonfire-networks/bonfire_ui_moderation", "f945aa4a281013c7454155b6d7ab942b7a68da0f", []},
"bonfire_ui_posts": {:git, "https://github.com/bonfire-networks/bonfire_ui_posts", "8cd9784c02dc5bf891798d2563ff624ea3f1960e", []},
"bonfire_ui_reactions": {:git, "https://github.com/bonfire-networks/bonfire_ui_reactions", "8b7c46f11a5cb094e70df636f486b5847c932964", []},
"bonfire_ui_reflow": {:git, "https://github.com/bonfire-networks/bonfire_ui_reflow", "23727455ad89639251dd69b30a40f72aaa51b1fd", [branch: "main"]},
"bonfire_ui_social": {:git, "https://github.com/bonfire-networks/bonfire_ui_social", "168eb9fe9c6c3c5b3abffe4282152a21db8343be", [branch: "main"]},
"bonfire_ui_social_graph": {:git, "https://github.com/bonfire-networks/bonfire_ui_social_graph", "ddfb90866718e68aed56b8d49d4c84d142e149df", []},
"boruta": {:hex, :boruta, "2.3.2", "6e4d8a3e9056e8fc90af1057c5334eef21a2a78e4da4dda992067b786a3057d4", [:mix], [{:ecto_sql, ">= 3.5.2", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ex_json_schema, "~> 0.6", [hex: :ex_json_schema, repo: "hexpm", optional: false]}, {:finch, "~> 0.16", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:joken, "~> 2.0", [hex: :joken, repo: "hexpm", optional: false]}, {:jose, "~> 1.11", [hex: :jose, repo: "hexpm", optional: false]}, {:nebulex, "~> 2.0", [hex: :nebulex, repo: "hexpm", optional: false]}, {:owl, "~> 0.8.0", [hex: :owl, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:puid, "~> 1.0", [hex: :puid, repo: "hexpm", optional: false]}, {:secure_random, "~> 0.5", [hex: :secure_random, repo: "hexpm", optional: false]}, {:shards, "~> 1.0", [hex: :shards, repo: "hexpm", optional: false]}], "hexpm", "6fa1cdca9ac3d4660b6f6454edd7e1b730077e05bb19a232465eecaae17880c1"},
@ -144,10 +148,14 @@
"floki": {:hex, :floki, "0.35.4", "cc947b446024732c07274ac656600c5c4dc014caa1f8fb2dfff93d275b83890d", [:mix], [], "hexpm", "27fa185d3469bd8fc5947ef0f8d5c4e47f0af02eb6b070b63c868f69e3af0204"},
"flow": {:hex, :flow, "0.15.0", "503717c0e367b5713336181d5305106840f64abbad32c75d7af5ef1bb0908e38", [:mix], [{:gen_stage, "~> 0.14.0", [hex: :gen_stage, repo: "hexpm", optional: false]}], "hexpm", "d7ecbd4dd38a188494bc996d5014ef8335f436a0b262140a1f6441ae94714581"},
"forecastr": {:git, "https://github.com/bonfire-networks/forecastr", "84235e51e4cd36ca4df03a24718b4367e296c053", []},
"formula2": {:hex, :formula2, "0.1.0", "034c82015bffbf178b697f5c4c4b1020e58854bada138f839d8184ce0ffd5ef8", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:stream_data, "~> 0.5", [hex: :stream_data, repo: "hexpm", optional: false]}], "hexpm", "c0ef724f3b5db0eed4ede3f927868648bbaf889475a66769f424dc733ac6505b"},
"furlex": {:git, "https://github.com/bonfire-networks/furlex", "d4ab3a3627003f46e28f9c1e700cffc28125ac73", [branch: "main"]},
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
"gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm", "8453e2289d94c3199396eb517d65d6715ef26bcae0ee83eb5ff7a84445458d76"},
"geo": {:hex, :geo, "3.6.0", "00c9c6338579f67e91cd5950af4ae2eb25cdce0c3398718c232539f61625d0bd", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "1dbdebf617183b54bc3c8ad7a36531a9a76ada8ca93f75f573b0ae94006168da"},
"geo_postgis": {:hex, :geo_postgis, "3.6.0", "dbb7874ac04515235bc8e018a3bf4b1b6f3833a870b3371cfa81c983152969f2", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:geo, "~> 3.6", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm", "0fa927b52a2bb17ad8526657ece025867277148c9206c87e165c85a57e56f5f9"},
"geocoder": {:hex, :geocoder, "1.1.6", "3c2907c07eb6b006d2fdcec4875aedac25ee15debf3c8fa656d9fda497d2c014", [:mix], [{:geohash, "~> 1.2", [hex: :geohash, repo: "hexpm", optional: false]}, {:httpoison, "~> 2.1", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:towel, "~> 0.2.2", [hex: :towel, repo: "hexpm", optional: false]}], "hexpm", "ace06d0f17c09b40245d25aff57df3e69c04c7adcb279af1297593d03bfa27d5"},
"geohash": {:hex, :geohash, "1.2.2", "4e95a65594afde96ba8c003d43947eb06e97b1a4ad25a21f863922918e3819e8", [:mix], [], "hexpm", "98ed91f7e4682f71a21cb9eeec7ca70e2f578f600c1c9335cc6c55b1b9a30ee2"},
"gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"},
"git_cli": {:hex, :git_cli, "0.3.0", "a5422f9b95c99483385b976f5d43f7e8233283a47cda13533d7c16131cb14df5", [:mix], [], "hexpm", "78cb952f4c86a41f4d3511f1d3ecb28edb268e3a7df278de2faa1bd4672eaf9b"},
"git_diff": {:hex, :git_diff, "0.6.4", "ec53ebf8bf83b4527d938d6433e3686b47a3e2a23135a21038f76736c16bb6e0", [:mix], [], "hexpm", "9e05563c136c91e960a306fd296156b2e8d74e294ae60961e69a36e118023a5f"},
@ -209,7 +217,7 @@
"neuron": {:hex, :neuron, "5.1.0", "dd321d5c2d9c03706ee7161ab49f8af634bfd1becb6fb95d8caa28bc95b6c655", [:mix], [{:httpoison, "~> 1.0 or ~> 2.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "23cddb0e0dd9c0eea247bc5b4bc3e1f8b52dbaf63f1637623920ec0b2385b6ce"},
"nimble_csv": {:hex, :nimble_csv, "1.2.0", "4e26385d260c61eba9d4412c71cea34421f296d5353f914afe3f2e71cce97722", [:mix], [], "hexpm", "d0628117fcc2148178b034044c55359b26966c6eaa8e2ce15777be3bbc91b12a"},
"nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"},
"nimble_ownership": {:hex, :nimble_ownership, "0.2.1", "3e44c72ebe8dd213db4e13aff4090aaa331d158e72ce1891d02e0ffb05a1eb2d", [:mix], [], "hexpm", "bf38d2ef4fb990521a4ecf112843063c1f58a5c602484af4c7977324042badee"},
"nimble_ownership": {:hex, :nimble_ownership, "0.3.1", "99d5244672fafdfac89bfad3d3ab8f0d367603ce1dc4855f86a1c75008bce56f", [:mix], [], "hexpm", "4bf510adedff0449a1d6e200e43e57a814794c8b5b6439071274d248d272a549"},
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
"nimble_pool": {:hex, :nimble_pool, "1.0.0", "5eb82705d138f4dd4423f69ceb19ac667b3b492ae570c9f5c900bb3d2f50a847", [:mix], [], "hexpm", "80be3b882d2d351882256087078e1b1952a28bf98d0a287be87e4a24a710b67a"},
"nodeinfo": {:git, "https://github.com/bonfire-networks/nodeinfo", "243bc8cac91b981db43223e65f4c7f13b687d625", [branch: "main"]},
@ -270,19 +278,21 @@
"recon": {:hex, :recon, "2.5.4", "05dd52a119ee4059fa9daa1ab7ce81bc7a8161a2f12e9d42e9d551ffd2ba901c", [:mix, :rebar3], [], "hexpm", "e9ab01ac7fc8572e41eb59385efeb3fb0ff5bf02103816535bacaedf327d0263"},
"redirect": {:hex, :redirect, "0.4.0", "98b46053504ee517bc3ad2fd04c064b64b48d339e1e18266355b30c4f8bb52b0", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.3 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "dfa29a8ecbad066ed0b73b34611cf24c78101719737f37bdf750f39197d67b97"},
"remote_ip": {:hex, :remote_ip, "1.1.0", "cb308841595d15df3f9073b7c39243a1dd6ca56e5020295cb012c76fbec50f2d", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "616ffdf66aaad6a72fc546dabf42eed87e2a99e97b09cbd92b10cc180d02ed74"},
"req": {:hex, :req, "0.4.13", "6fde45b78e606e2a46fc3a7e4a74828c220cd0b16951f4321c1214f955402d72", [:mix], [{:aws_signature, "~> 0.3.2", [hex: :aws_signature, repo: "hexpm", optional: true]}, {: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]}, {:nimble_ownership, "~> 0.2.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "e01a596b74272de799bc57191883e5d4d3875be63f0480223edc5a0086bfe31b"},
"req": {:hex, :req, "0.4.14", "103de133a076a31044e5458e0f850d5681eef23dfabf3ea34af63212e3b902e2", [:mix], [{:aws_signature, "~> 0.3.2", [hex: :aws_signature, repo: "hexpm", optional: true]}, {: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]}, {:nimble_ownership, "~> 0.2.0 or ~> 0.3.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "2ddd3d33f9ab714ced8d3c15fd03db40c14dbf129003c4a3eb80fac2cc0b1b08"},
"rewrite": {:hex, :rewrite, "0.10.0", "5d756b6dc67679e7156ff6055f9654be02dbaeb177aaf1ff6af7ee8da8718248", [:mix], [{:glob_ex, "~> 0.1", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:sourceror, "~> 0.13", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "68d7808cf549e7bf51b0119a8edc14d50970bad479115249030baa580c1d7b50"},
"rustler_precompiled": {:hex, :rustler_precompiled, "0.7.1", "ecadf02cc59a0eccbaed6c1937303a5827fbcf60010c541595e6d3747d3d0f9f", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "b9e4657b99a1483ea31502e1d58c464bedebe9028808eda45c3a429af4550c66"},
"scribe": {:hex, :scribe, "0.10.0", "90e61b21fee884f58b955d1f45d7fa3e75f161ecb62bad8af6087aef3955c74f", [:mix], [{:pane, "~> 0.2", [hex: :pane, repo: "hexpm", optional: false]}], "hexpm", "3829da9c6a28b2105f0ec50e40f447bf768fb7d96717fbfceb602573f1a3c62e"},
"secure_random": {:hex, :secure_random, "0.5.1", "c5532b37c89d175c328f5196a0c2a5680b15ebce3e654da37129a9fe40ebf51b", [:mix], [], "hexpm", "1b9754f15e3940a143baafd19da12293f100044df69ea12db5d72878312ae6ab"},
"sentry": {:hex, :sentry, "10.1.0", "5d73c23deb5d95f3027fbb09801bd8e787065be61f0065418aed3961becbbe9f", [: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]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.3", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f4319e7491133046912b4cf7cbe6f5226b309275d1a6d05386cce2ac7f97b2d2"},
"shards": {:hex, :shards, "1.1.0", "ed3032e63ae99f0eaa6d012b8b9f9cead48b9a810b3f91aeac266cfc4118eff6", [:make, :rebar3], [], "hexpm", "1d188e565a54a458a7a601c2fd1e74f5cfeba755c5a534239266d28b7ff124c7"},
"simple_slug": {:hex, :simple_slug, "0.1.1", "d966384a6dd03dd7103b03ef50831410cfc943a69ded12c80c403c83eb122f6c", [:mix], [], "hexpm", "477c19c7bc8755a1378bdd4ec591e4819071c72353b7e470b90329e63ef67a72"},
"sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"},
"sobelow": {:hex, :sobelow, "0.12.2", "45f4d500e09f95fdb5a7b94c2838d6b26625828751d9f1127174055a78542cf5", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2f0b617dce551db651145662b84c8da4f158e7abe049a76daaaae2282df01c5d"},
"solid": {:hex, :solid, "0.15.2", "6921af98a3a862041bb6af72b5f6e094dbf0242366b142f98a92cabe4ed30d2a", [:mix], [{:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "18b062b04948b7f7b99ac4a9360681dac7e0bd142df5e62a7761696c7384be45"},
"sourceror": {:hex, :sourceror, "1.0.1", "ec2c41726d181adce888ac94b3f33b359a811b46e019c084509e02c70042e424", [:mix], [], "hexpm", "28225464ffd68bda1843c974f3ff7ccef35e29be09a65dfe8e3df3f7e3600c57"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
"statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"},
"stream_data": {:hex, :stream_data, "0.6.0", "e87a9a79d7ec23d10ff83eb025141ef4915eeb09d4491f79e52f2562b73e5f47", [:mix], [], "hexpm", "b92b5031b650ca480ced047578f1d57ea6dd563f5b57464ad274718c9c29501c"},
"surface": {:hex, :surface, "0.11.2", "97f9e0a390d4383ad54d604fd173c558206f7bb66799e0c3225835e0b860086d", [:mix], [{:phoenix_html, "~> 3.3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19.0 or ~> 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.0.0", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "71c49daad5b043c5601ca3ee1459f4794287db508f2d33dde5d973bb0e6971cb"},
"sweet_xml": {:hex, :sweet_xml, "0.7.4", "a8b7e1ce7ecd775c7e8a65d501bc2cd933bff3a9c41ab763f5105688ef485d08", [:mix], [], "hexpm", "e7c4b0bdbf460c928234951def54fe87edf1a170f6896675443279e2dbeba167"},
"table_rex": {:hex, :table_rex, "4.0.0", "3c613a68ebdc6d4d1e731bc973c233500974ec3993c99fcdabb210407b90959b", [:mix], [], "hexpm", "c35c4d5612ca49ebb0344ea10387da4d2afe278387d4019e4d8111e815df8f55"},
@ -296,9 +306,11 @@
"thousand_island": {:hex, :thousand_island, "1.3.5", "6022b6338f1635b3d32406ff98d68b843ba73b3aa95cfc27154223244f3a6ca5", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2be6954916fdfe4756af3239fb6b6d75d0b8063b5df03ba76fd8a4c87849e180"},
"timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"},
"tls_certificate_check": {:hex, :tls_certificate_check, "1.21.0", "042ab2c0c860652bc5cf69c94e3a31f96676d14682e22ec7813bd173ceff1788", [:rebar3], [{:ssl_verify_fun, "~> 1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "6cee6cffc35a390840d48d463541d50746a7b0e421acaadb833cfc7961e490e7"},
"towel": {:git, "https://github.com/CyrusOfEden/towel", "7a9632f6450593176db387c8202580b626b57760", []},
"twinkle_star": {:git, "https://github.com/bonfire-networks/twinkle_star", "bd793b68502276fd38fd8c9dd88b901506a58589", []},
"typed_struct": {:hex, :typed_struct, "0.3.0", "939789e3c1dca39d7170c87f729127469d1315dcf99fee8e152bb774b17e7ff7", [:mix], [], "hexpm", "c50bd5c3a61fe4e198a8504f939be3d3c85903b382bde4865579bc23111d1b6d"},
"tz": {:hex, :tz, "0.26.5", "bfe8efa345670f90351c5c31d22455d0307c5d9895fbdede7deeb215a7b60dbe", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:mint, "~> 1.5", [hex: :mint, repo: "hexpm", optional: true]}], "hexpm", "c4f9392d710582c7108b6b8c635f4981120ec4b2072adbd242290fc842338183"},
"tz_world": {:hex, :tz_world, "1.3.2", "15d331ad1ff22735dfcc8c98bfc7b2a9fdc17f1f071e31e21cdafe2d9318a300", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:geo, "~> 1.0 or ~> 2.0 or ~> 3.3", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "d1a345e07b3378c4c902ad54fbd5d54c8c3dd55dba883b7407fe57bcec45ff2a"},
"tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
"unsafe": {:hex, :unsafe, "1.0.2", "23c6be12f6c1605364801f4b47007c0c159497d0446ad378b5cf05f1855c0581", [:mix], [], "hexpm", "b485231683c3ab01a9cd44cb4a79f152c6f3bb87358439c6f68791b85c2df675"},