Skip to content

Commit f0dcc8c

Browse files
authored
Merge pull request #6 from PagoPlus/feat/inspect-before-publishing#86b37qg8h
[FEAT] review before publishing (CU #86b37qg8h)
2 parents c7636bd + cfecd0b commit f0dcc8c

File tree

9 files changed

+114
-58
lines changed

9 files changed

+114
-58
lines changed

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 MedFlow
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# NumscriptEx
2-
NumscriptEx is a library that allows its users to check and run Numscripts in Elixir. And if you don't know what are
3-
Numscripts, here a quick explanation:
2+
NumscriptEx is a library that allows its users to check and run Numscripts in Elixir. If this is your first time hearing about
3+
Numscripts, here is a quick explanation:
44

55
[Numscript](https://docs.formance.com/numscript/) is a DSL made by [Formance](https://www.formance.com/)
66
that simplifies complex financial transactions with scripts that are easy to read,
@@ -20,11 +20,11 @@ end
2020
```
2121
### Configuration
2222
NumscriptEx needs some external assets ([Numscript-WASM](https://github.com/PagoPlus/numscript-wasm)),
23-
and you can configure said assets if you want.
23+
and you can override the default version.
2424

2525
Available configurations:
26-
- `:version`: is the release version to be downloaded;
27-
- `:retries`: number of download retries in case of failure.
26+
- `:version` the binary release version to use (see [numscript-wasm releases](https://github.com/PagoPlus/numscript-wasm/releases/)).
27+
- `:retries` number of times to retry the download in case of a network failure.
2828

2929
Ex:
3030
```elixir
@@ -47,7 +47,7 @@ A numscript needs some other data aside the script itself to run correctly, and
4747
`Numscriptex.Run` solves this problem.
4848

4949
If you want to know what exactly these additional data are, you can see the
50-
[numscript playground](https://playground.numscript.org/?template=simple-send) for examples.
50+
[Numscript Playground](https://playground.numscript.org/?template=simple-send) for examples.
5151

5252
The abstraction is made by creating a struct:
5353
```elixir
@@ -58,27 +58,23 @@ iex> %Numscriptex.Run{
5858
...> }
5959
```
6060
Where:
61-
- `balances`: are a map with the account's assets balances;
62-
- `metadata`: metada variables;
63-
- `variables`: variables used inside the script.
61+
- `:balances` a map with the account's assets balances.
62+
- `:metadata` [metada variables](https://docs.formance.com/numscript/reference/metadata);
63+
- `:variables` [variables](https://docs.formance.com/numscript/reference/variables) used inside the script.
6464

65-
You can read more about Metadata clicking [here](https://docs.formance.com/numscript/reference/metadata)
66-
and more about Variables clicking [here](https://docs.formance.com/numscript/reference/variables)
67-
68-
And to create a new struct, you can use the `put/3` or `put!/3` functions. Ex:
65+
And to create a new struct, you can use the `Numscriptex.Run.put/3` or `Numscriptex.Run.put!/3` functions. Ex:
6966
```elixir
7067
iex> variables = %{"order" => "orders:2345"}
7168
...> balances = %{"orders:2345" => %{"USD/2" => 1000}}
72-
...>
7369
...> metadata = %{
7470
...> "merchants:1234" => %{"commission" => "15%"},
7571
...> "orders:2345" => %{"merchant" => "merchants:1234"}
7672
...> }
7773
...>
7874
...> Numscriptex.Run.new()
79-
...> |> Numscriptex.Run.put!(:balances, balances)
80-
...> |> Numscriptex.Run.put!(:metadata, metadata)
81-
...> |> Numscriptex.Run.put!(:variables, variables)
75+
...> |> Numscriptex.Run.put!(:balances, balances)
76+
...> |> Numscriptex.Run.put!(:metadata, metadata)
77+
...> |> Numscriptex.Run.put!(:variables, variables)
8278
```
8379

8480
Will return:
@@ -97,7 +93,7 @@ iex> %Numscriptex.Run{
9793
Kindly reminder: you will always need a valid `Numscriptex.Run` struct to successfully execute your scripts.
9894

9995
### Check
100-
To use `check/1` you just have to pass your numscript as it's argument. Ex:
96+
To use `Numscriptex.check/1` you just have to pass your numscript as it's argument. Ex:
10197

10298
```elixir
10399
iex> "tmp/script.num"
@@ -140,10 +136,9 @@ iex> {:ok, %{
140136
...> }
141137
...> }
142138
```
143-
`:script` is the only key that will always return if your script is valid, the
144-
other three are optional.
139+
The `:script` is the only field that will always return if your script is valid, the other three are optional.
145140
### Run
146-
To use `run/2` your first argument must be your script (the same you used in `check/1`), and the second must be the `%Numscriptex.Run{}` struct. Ex:
141+
To use `Numscriptex.run/2` your first argument must be your script (the same you used in `Numscriptex.check/1`), and the second must be the `%Numscriptex.Run{}` struct. Ex:
147142

148143
```elixir
149144
iex> Numscriptex.run(script, struct)
@@ -187,4 +182,6 @@ iex> %{
187182
```
188183

189184
## License
190-
TODO
185+
Copyright (c) 2025 MedFlow
186+
187+
This library is MIT licensed. See the [LICENSE](https://github.com/PagoPlus/numscriptex/blob/main/README.md) for details.

lib/numscriptex.ex

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
defmodule Numscriptex do
22
@moduledoc """
3-
NumscriptEx is a library that allows its users to check and run [numscripts](https://docs.formance.com/numscript/)
3+
NumscriptEx is a library that allows its users to check and run [Numscripts](https://docs.formance.com/numscript/)
44
via Elixir.
55
66
Want to check if your script is valid and ready to go? Use the `check/1` function.
@@ -14,6 +14,8 @@ defmodule Numscriptex do
1414

1515
require AssetsManager
1616

17+
AssetsManager.ensure_wasm_binary_is_valid()
18+
1719
@type check_log() :: CheckLog.t()
1820

1921
@type check_result() :: %{
@@ -49,12 +51,8 @@ defmodule Numscriptex do
4951
optional(:details) => any()
5052
}
5153

52-
AssetsManager.ensure_wasm_binary_is_valid()
53-
5454
@doc """
55-
`version/0` simply shows a map with both Numscript-WASM and NumscriptEx versions.
56-
57-
Ex:
55+
`version/0` simply shows a map with both [Numscript-WASM](https://github.com/PagoPlus/numscript-wasm) and NumscriptEx versions. Ex:
5856
5957
```elixir
6058
iex> Numscriptex.version()
@@ -83,7 +81,7 @@ defmodule Numscriptex do
8381
Ex:
8482
8583
```elixir
86-
iex> script = "send [USD/2 100] ( source = @foo destination = @bar)"
84+
iex> script = "send [USD/2 100] (source = @foo destination = @bar)"
8785
iex> Numscriptex.check(script)
8886
{:ok, %{script: script}}
8987
```
@@ -106,11 +104,11 @@ defmodule Numscriptex do
106104

107105
@doc """
108106
To use `run/2` your first argument must be your script, and the second must
109-
be a `%Numscriptex.Run{}` (go to Numscriptex.Run module to see more) struct.
107+
be a `%Numscriptex.Run{}` (go to `Numscriptex.Run` module to see more) struct.
110108
Ex:
111109
112110
```elixir
113-
iex> script = "send [USD/2 100] ( source = @foo destination = @bar)"
111+
iex> script = "send [USD/2 100] (source = @foo destination = @bar)"
114112
...> balances = %{"foo" => %{"USD/2" => 500, "EUR/2" => 300}}
115113
...>
116114
...> struct =

lib/numscriptex/balances.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
defmodule Numscriptex.Balances do
22
@moduledoc """
33
`Numscriptex.Balances` is responsible for building the account's final balance
4-
after running your [numscript](https://docs.formance.com/numscript/), so you
4+
after running your [Numscript](https://docs.formance.com/numscript/), so you
55
can see the results of all transactions.
66
"""
77

88
@doc """
9-
Receives the account assets (balance field from `%Numscriptex.Run{}`), and the
10-
postings that are generated after running the numscript transaction.
9+
Receives the account assets (balance field from `%Numscriptex.Run{}`), and the
10+
postings that are generated after running the numscript transaction.
1111
1212
The result will be a map contaning the initial and final balances of each
1313
account assets. Ex:
@@ -28,7 +28,7 @@ defmodule Numscriptex.Balances do
2828
...> "source" => "foo"
2929
...> }
3030
...> ]
31-
...>
31+
...>
3232
...> Numscriptex.Balances.put(account_assets, postings)
3333
[
3434
%{
@@ -144,7 +144,7 @@ defmodule Numscriptex.Balances do
144144
end
145145
end
146146

147-
def maybe_drop_balance(balances) do
147+
defp maybe_drop_balance(balances) do
148148
Enum.reject(balances, fn balance ->
149149
balance["initial_balance"] == 0 and
150150
balance["final_balance"] == 0

lib/numscriptex/check_log.ex

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,24 @@ defmodule Numscriptex.CheckLog do
1111
line: nil,
1212
message: nil
1313

14+
@typedoc """
15+
Type that represents `Numscriptex.CheckLog` struct.
16+
17+
## Fields
18+
* `:character` the character position where the log occurred
19+
* `:level` the log level
20+
* `:line` the line where the log occur
21+
* `:message` the log message
22+
"""
1423
@type t() :: %__MODULE__{
15-
character: integer(),
16-
level: atom(),
17-
line: integer(),
24+
character: pos_integer(),
25+
level: log_levels(),
26+
line: pos_integer(),
1827
message: binary()
1928
}
2029

30+
@type log_levels() :: :error | :warning | :hint | :info
31+
2132
@doc """
2233
Get a map with log data about a checked numscript.
2334

lib/numscriptex/run.ex

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
defmodule Numscriptex.Run do
22
@moduledoc """
3-
A [numscript](https://docs.formance.com/numscript/) needs some other data aside from
4-
the script itself to run correctly, and `Numscriptex.Run` solves this problem.
5-
6-
If you want to know what exactly these additional fields are, you can learn more on
7-
[numscript playground](https://playground.numscript.org/?template=simple-send)
8-
and the [numscript docs](https://docs.formance.com/numscript/).
3+
A Numscript needs some other data aside from the script itself to run correctly,
4+
and `Numscriptex.Run` solves this problem. If you want to know what exactly these
5+
additional fields are, you can learn more on [Numscript Playground](https://playground.numscript.org/?template=simple-send) and the [Numscript Docs](https://docs.formance.com/numscript/).
96
"""
107

118
@derive JSON.Encoder
@@ -25,9 +22,10 @@ defmodule Numscriptex.Run do
2522
@typedoc """
2623
Type that represents `Numscriptex.Run` struct.
2724
28-
`:balances`: the account's assets balances.
29-
`:metadata`: metadata variables.
30-
`:variables`: variables used inside the script.
25+
## Fields
26+
* `:balances` a map with account's assets balances
27+
* `:metadata` [metada variables](https://docs.formance.com/numscript/reference/metadata)
28+
* `:variables` [variables](https://docs.formance.com/numscript/reference/variables) used inside the script
3129
"""
3230
@type t() :: %__MODULE__{
3331
variables: map(),
@@ -51,15 +49,15 @@ defmodule Numscriptex.Run do
5149
def new, do: %__MODULE__{}
5250

5351
@doc """
54-
Puts the chosen value under the field key on the `Numscriptex.Run` struct as
52+
Puts the chosen value under the field key on the `Numscriptex.Run` struct as
5553
long both are valid.
5654
5755
```elixir
5856
iex> struct = Numscriptex.Run.new()
5957
...> balances = %{"foo" => %{"USD/2" => 500, "EUR/2" => 300}}
6058
...>
6159
...> Numscriptex.Run.put(struct, :balances, balances)
62-
{:ok,
60+
{:ok,
6361
%Numscriptex.Run{
6462
balances: %{"foo" => %{"USD/2" => 500, "EUR/2" => 300}},
6563
variables: %{},
@@ -84,7 +82,7 @@ defmodule Numscriptex.Run do
8482
do: {:error, :invalid_field, %{details: "The field '#{field}' does not exists."}}
8583

8684
def put(_run_struct, _field, value) when not is_map(value),
87-
do: {:error, :invalid_value, %{details: "Values argument must be a map."}}
85+
do: {:error, :invalid_value, %{details: "Argument `value` must be a map."}}
8886

8987
def put(%__MODULE__{} = run_struct, :balances, value) do
9088
{:ok, Map.replace(run_struct, :balances, Utilities.normalize_keys(value, :string))}
@@ -102,7 +100,7 @@ defmodule Numscriptex.Run do
102100
...> balances = [%{"foo" => %{"USD/2" => 500, "EUR/2" => 300}}]
103101
...>
104102
...> Numscriptex.Run.put!(struct, :balances, balances)
105-
** (ArgumentError) Values argument must be a map.
103+
** (ArgumentError) Argument `value` must be a map.
106104
```
107105
"""
108106
@spec put!(t(), atom(), map()) :: t() | no_return()

mix.exs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
defmodule Numscriptex.MixProject do
22
use Mix.Project
33

4+
@source_url "https://github.com/PagoPlus/numscriptex"
5+
@version "0.1.0"
6+
47
def project do
58
[
69
app: :numscriptex,
7-
version: "0.1.0",
8-
elixir: "~> 1.17",
10+
version: @version,
11+
elixir: "~> 1.18",
912
start_permanent: Mix.env() == :prod,
13+
description: "Numscript support for Elixir",
1014
aliases: aliases(),
1115
deps: deps(),
16+
package: package(),
17+
docs: docs(),
1218
test_coverage: [tool: ExCoveralls],
1319
preferred_cli_env: [
1420
"coveralls.html": :test,
@@ -30,6 +36,7 @@ defmodule Numscriptex.MixProject do
3036
[
3137
{:wasmex, "~> 0.9.2"},
3238
{:excoveralls, "~> 0.18", only: :test},
39+
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
3340
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
3441
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}
3542
]
@@ -44,4 +51,22 @@ defmodule Numscriptex.MixProject do
4451
]
4552
]
4653
end
54+
55+
defp docs do
56+
[
57+
main: "readme",
58+
name: "NumscriptEx",
59+
suorce_ref: "v#{@version}",
60+
source_url: @source_url,
61+
extras: ["README.md"]
62+
]
63+
end
64+
65+
defp package do
66+
%{
67+
licenses: ["MIT"],
68+
links: %{"GitHub" => @source_url},
69+
maintaners: ["Vinicius Costa", "Fernando Mumbach"]
70+
}
71+
end
4772
end

mix.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,21 @@
33
"castore": {:hex, :castore, "1.0.10", "43bbeeac820f16c89f79721af1b3e092399b3a1ecc8df1a472738fd853574911", [:mix], [], "hexpm", "1b0b7ea14d889d9ea21202c43a4fa015eb913021cb535e8ed91946f4b77a8848"},
44
"credo": {:hex, :credo, "1.7.10", "6e64fe59be8da5e30a1b96273b247b5cf1cc9e336b5fd66302a64b25749ad44d", [: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", "71fbc9a6b8be21d993deca85bf151df023a3097b01e09a2809d460348561d8cd"},
55
"dialyxir": {:hex, :dialyxir, "1.4.5", "ca1571ac18e0f88d4ab245f0b60fa31ff1b12cbae2b11bd25d207f865e8ae78a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b0fb08bb8107c750db5c0b324fa2df5ceaa0f9307690ee3c1f6ba5b9eb5d35c3"},
6+
"earmark_parser": {:hex, :earmark_parser, "1.4.42", "f23d856f41919f17cd06a493923a722d87a2d684f143a1e663c04a2b93100682", [:mix], [], "hexpm", "6915b6ca369b5f7346636a2f41c6a6d78b5af419d61a611079189233358b8b8b"},
67
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
8+
"ex_doc": {:hex, :ex_doc, "0.36.1", "4197d034f93e0b89ec79fac56e226107824adcce8d2dd0a26f5ed3a95efc36b1", [:mix], [{:earmark_parser, "~> 1.4.42", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "d7d26a7cf965dacadcd48f9fa7b5953d7d0cfa3b44fa7a65514427da44eafd89"},
79
"excoveralls": {:hex, :excoveralls, "0.18.3", "bca47a24d69a3179951f51f1db6d3ed63bca9017f476fe520eb78602d45f7756", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "746f404fcd09d5029f1b211739afb8fb8575d775b21f6a3908e7ce3e640724c6"},
810
"file_system": {:hex, :file_system, "1.0.1", "79e8ceaddb0416f8b8cd02a0127bdbababe7bf4a23d2a395b983c1f8b3f73edd", [:mix], [], "hexpm", "4414d1f38863ddf9120720cd976fce5bdde8e91d8283353f0e31850fa89feb9e"},
911
"finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"},
1012
"hpax": {:hex, :hpax, "1.0.1", "c857057f89e8bd71d97d9042e009df2a42705d6d690d54eca84c8b29af0787b0", [:mix], [], "hexpm", "4e2d5a4f76ae1e3048f35ae7adb1641c36265510a2d4638157fbcb53dda38445"},
1113
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
14+
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
15+
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
16+
"makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"},
1217
"mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
1318
"mint": {:hex, :mint, "1.6.2", "af6d97a4051eee4f05b5500671d47c3a67dac7386045d87a904126fd4bbcea2e", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "5ee441dffc1892f1ae59127f74afe8fd82fda6587794278d924e4d90ea3d63f9"},
1419
"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},
20+
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
1521
"nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"},
1622
"req": {:hex, :req, "0.5.8", "50d8d65279d6e343a5e46980ac2a70e97136182950833a1968b371e753f6a662", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "d7fc5898a566477e174f26887821a3c5082b243885520ee4b45555f5d53f40ef"},
1723
"rustler": {:hex, :rustler, "0.35.1", "ec81961ef9ee833d721dafb4449cab29b16b969a3063a842bb9e3ea912f6b938", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}, {:toml, "~> 0.6", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "3713b2e70e68ec2bfa8291dfd9cb811fe64a770f254cd9c331f8b34fa7989115"},

0 commit comments

Comments
 (0)