mirror of
https://github.com/ash-project/ash_oban.git
synced 2024-09-08 04:50:51 +12:00
docs: update docs with new spark cheat sheets, and organize everything
This commit is contained in:
parent
bff2ed51fe
commit
f73cc6b452
7 changed files with 241 additions and 84 deletions
|
@ -11,7 +11,9 @@
|
|||
## ...or adjusted (e.g. use one-line formatter for more compact credo output)
|
||||
# {:credo, "mix credo --format oneline"},
|
||||
|
||||
{:check_formatter, command: "mix spark.formatter --check"}
|
||||
{:check_formatter, command: "mix spark.formatter --check"},
|
||||
{:check_cheat_sheets, command: "mix spark.cheat_sheets --check"},
|
||||
{:doctor, false}
|
||||
|
||||
## custom new tools may be added (mix tasks or arbitrary commands)
|
||||
# {:my_mix_task, command: "mix release", env: %{"MIX_ENV" => "prod"}},
|
||||
|
|
119
documentation/dsls/DSL:-AshOban.cheatmd
Normal file
119
documentation/dsls/DSL:-AshOban.cheatmd
Normal file
|
@ -0,0 +1,119 @@
|
|||
# DSL: AshOban
|
||||
|
||||
Tools for working with AshOban triggers.
|
||||
|
||||
|
||||
## oban
|
||||
|
||||
|
||||
### Nested DSLs
|
||||
* [triggers](#oban-triggers)
|
||||
* trigger
|
||||
|
||||
|
||||
### Examples
|
||||
```
|
||||
oban do
|
||||
api AshOban.Test.Api
|
||||
|
||||
triggers do
|
||||
trigger :process do
|
||||
action :process
|
||||
where expr(processed != true)
|
||||
worker_read_action(:read)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### Options
|
||||
| Name | Type | Default | Docs |
|
||||
| --- | --- | --- | --- |
|
||||
| `api`* | `module` | | The Api module to use when calling actions on this resource |
|
||||
|
||||
|
||||
## oban.triggers
|
||||
|
||||
|
||||
### Nested DSLs
|
||||
* [trigger](#oban-triggers-trigger)
|
||||
|
||||
|
||||
### Examples
|
||||
```
|
||||
triggers do
|
||||
trigger :process do
|
||||
action :process
|
||||
where expr(processed != true)
|
||||
worker_read_action(:read)
|
||||
end
|
||||
end
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
## oban.triggers.trigger
|
||||
```elixir
|
||||
trigger name
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Examples
|
||||
```
|
||||
trigger :process do
|
||||
action :process
|
||||
where expr(processed != true)
|
||||
worker_read_action(:read)
|
||||
end
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Arguments
|
||||
| Name | Type | Default | Docs |
|
||||
| --- | --- | --- | --- |
|
||||
| `name` | `atom` | | A unique identifier for this trigger. |
|
||||
### Options
|
||||
| Name | Type | Default | Docs |
|
||||
| --- | --- | --- | --- |
|
||||
| `action`* | `atom` | | The action to be triggered. Defaults to the identifier of the resource plus the name of the trigger |
|
||||
| `scheduler_queue` | `atom` | | The queue to place the scheduler job in. The same queue as job is used by default (but with a priority of 1 so schedulers run first). |
|
||||
| `scheduler_cron` | `String.t \| false` | "* * * * *" | A crontab configuration for when the job should run. Defaults to once per minute ("* * * * *"). Use `false` to disable the scheduler entirely. |
|
||||
| `stream_batch_size` | `pos_integer` | | The batch size to pass when streaming records from using `c:Ash.Api.stream!/2`. No batch size is passed if none is provided here, so the default is used. |
|
||||
| `queue` | `atom` | | The queue to place the worker job in. The trigger name is used by default. |
|
||||
| `record_limit` | `pos_integer` | | If set, any given run of the scheduler will only ever schedule this many items maximum |
|
||||
| `worker_priority` | `non_neg_integer` | 2 | A number from 0 to 3, where 0 is the highest priority and 3 is the lowest. |
|
||||
| `scheduler_priority` | `non_neg_integer` | 3 | A number from 0 to 3, where 0 is the highest priority and 3 is the lowest. |
|
||||
| `max_scheduler_attempts` | `pos_integer` | 1 | How many times to attempt scheduling of the triggered action. |
|
||||
| `max_attempts` | `pos_integer` | 1 | How many times to attempt the job. After all attempts have been exhausted, the scheduler may just reschedule it. Use the `on_error` action to update the record to make the scheduler no longer apply. |
|
||||
| `read_metadata` | `(any -> any)` | | Takes a record, and returns metadata to be given to the update action as an argument called `metadata`. |
|
||||
| `state` | `:active \| :paused \| :deleted` | :active | Describes the state of the cron job. See the getting started guide for more information. The most important thing is that you *do not remove a trigger from a resource if you are using oban pro*. |
|
||||
| `read_action` | `atom` | | The read action to use when querying records. Defaults to the primary read. This action *must* support keyset pagination. |
|
||||
| `worker_read_action` | `atom` | | The read action to use when fetching the individual records for the trigger. Defaults to `read_action`. If you customize this, ensure your action handles scenarios where the trigger is no longer relevant. |
|
||||
| `where` | ``any`` | | The filter expression to determine if something should be triggered |
|
||||
| `on_error` | `atom` | | An update action to call after the last attempt has failed. See the getting started guide for more. |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Introspection
|
||||
|
||||
Target: `AshOban.Trigger`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -63,6 +63,15 @@ defmodule AshOban do
|
|||
identifier: :name,
|
||||
imports: [Ash.Filter.TemplateHelpers],
|
||||
transform: {Trigger, :transform, []},
|
||||
examples: [
|
||||
"""
|
||||
trigger :process do
|
||||
action :process
|
||||
where expr(processed != true)
|
||||
worker_read_action(:read)
|
||||
end
|
||||
"""
|
||||
],
|
||||
schema: [
|
||||
name: [
|
||||
type: :atom,
|
||||
|
@ -77,14 +86,13 @@ defmodule AshOban do
|
|||
type: {:or, [:string, {:literal, false}]},
|
||||
default: "* * * * *",
|
||||
doc: """
|
||||
A crontab configuration for when the job should run. Defaults to once per minute (\"* * * * *\").
|
||||
Use `false` to disable the scheduler entirely.
|
||||
A crontab configuration for when the job should run. Defaults to once per minute (\"* * * * *\"). Use `false` to disable the scheduler entirely.
|
||||
"""
|
||||
],
|
||||
stream_batch_size: [
|
||||
type: :pos_integer,
|
||||
doc:
|
||||
"The batch size to pass when streaming records from using `Ash.Api.stream/2`. No batch size is passed if none is provided here, so the default is used."
|
||||
"The batch size to pass when streaming records from using `c:Ash.Api.stream!/2`. No batch size is passed if none is provided here, so the default is used."
|
||||
],
|
||||
queue: [
|
||||
type: :atom,
|
||||
|
@ -114,49 +122,32 @@ defmodule AshOban do
|
|||
type: :pos_integer,
|
||||
default: 1,
|
||||
doc: """
|
||||
How many times to attempt the job.
|
||||
|
||||
Keep in mind: after all of these attempts, the scheduler will likely just reschedule the job,
|
||||
leading to infinite retries. To solve for this, configure an `on_error` action that will make
|
||||
the trigger no longer apply to failed jobs.
|
||||
How many times to attempt the job. After all attempts have been exhausted, the scheduler may just reschedule it. Use the `on_error` action to update the record to make the scheduler no longer apply.
|
||||
"""
|
||||
],
|
||||
read_metadata: [
|
||||
type: {:fun, 1},
|
||||
doc: """
|
||||
Takes a record, and returns additional data of records from the read action.
|
||||
This metadata will be stored in the database and serialized to json before
|
||||
being passed to the update action as an argument called `metadata`.
|
||||
Takes a record, and returns metadata to be given to the update action as an argument called `metadata`.
|
||||
"""
|
||||
],
|
||||
state: [
|
||||
type: {:one_of, [:active, :paused, :deleted]},
|
||||
default: :active,
|
||||
doc: """
|
||||
Describes the state of the cron job.
|
||||
|
||||
See the getting started guide for an explanation on the need for this field.
|
||||
The most important thing is that you *do not remove a trigger from a resource*.
|
||||
Oban's cron jobs are persisted, meaning you will get repeated errors whenever the cron
|
||||
job tries to fire.
|
||||
Describes the state of the cron job. See the getting started guide for more information. The most important thing is that you *do not remove a trigger from a resource if you are using oban pro*.
|
||||
"""
|
||||
],
|
||||
read_action: [
|
||||
type: :atom,
|
||||
doc: """
|
||||
The read action to use when querying records. Defaults to the primary read.
|
||||
|
||||
This action *must* support keyset pagination.
|
||||
The read action to use when querying records. Defaults to the primary read. This action *must* support keyset pagination.
|
||||
"""
|
||||
],
|
||||
worker_read_action: [
|
||||
type: :atom,
|
||||
doc: """
|
||||
The read action to use when fetching the individual records for the trigger.
|
||||
|
||||
This defaults to `read_action`, allowing us to discard records that are no longer relevant.
|
||||
You may need to change this, and if so make sure your action handles the scenario where the
|
||||
trigger is no longer relevant.
|
||||
The read action to use when fetching the individual records for the trigger. Defaults to `read_action`. If you customize this, ensure your action handles scenarios where the trigger is no longer relevant.
|
||||
"""
|
||||
],
|
||||
action: [
|
||||
|
@ -179,11 +170,37 @@ defmodule AshOban do
|
|||
|
||||
@triggers %Spark.Dsl.Section{
|
||||
name: :triggers,
|
||||
entities: [@trigger]
|
||||
entities: [@trigger],
|
||||
examples: [
|
||||
"""
|
||||
triggers do
|
||||
trigger :process do
|
||||
action :process
|
||||
where expr(processed != true)
|
||||
worker_read_action(:read)
|
||||
end
|
||||
end
|
||||
"""
|
||||
]
|
||||
}
|
||||
|
||||
@oban %Spark.Dsl.Section{
|
||||
name: :oban,
|
||||
examples: [
|
||||
"""
|
||||
oban do
|
||||
api AshOban.Test.Api
|
||||
|
||||
triggers do
|
||||
trigger :process do
|
||||
action :process
|
||||
where expr(processed != true)
|
||||
worker_read_action(:read)
|
||||
end
|
||||
end
|
||||
end
|
||||
"""
|
||||
],
|
||||
schema: [
|
||||
api: [
|
||||
type: {:behaviour, Ash.Api},
|
||||
|
@ -197,23 +214,11 @@ defmodule AshOban do
|
|||
@sections [@oban]
|
||||
|
||||
@moduledoc """
|
||||
Dsl documentation for AshOban
|
||||
<!--- ash-hq-hide-start --> <!--- -->
|
||||
|
||||
## DSL Documentation
|
||||
|
||||
### Index
|
||||
|
||||
#{Spark.Dsl.Extension.doc_index(@sections)}
|
||||
|
||||
### Docs
|
||||
|
||||
#{Spark.Dsl.Extension.doc(@sections)}
|
||||
<!--- ash-hq-hide-stop --> <!--- -->
|
||||
Tools for working with AshOban triggers.
|
||||
"""
|
||||
|
||||
use Spark.Dsl.Extension,
|
||||
sections: [@oban],
|
||||
sections: @sections,
|
||||
imports: [AshOban.Changes.BuiltinChanges],
|
||||
transformers: [
|
||||
AshOban.Transformers.SetDefaults,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
defmodule AshOban.Transformers.DefineSchedulers do
|
||||
@moduledoc """
|
||||
Define scheduler and worker modules.
|
||||
"""
|
||||
# Define scheduler and worker modules.
|
||||
@moduledoc false
|
||||
|
||||
use Spark.Dsl.Transformer
|
||||
alias Spark.Dsl.Transformer
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
defmodule AshOban.Transformers.SetDefaults do
|
||||
@moduledoc "Set trigger default values"
|
||||
# Set trigger default values
|
||||
@moduledoc false
|
||||
|
||||
use Spark.Dsl.Transformer
|
||||
alias Spark.Dsl.Transformer
|
||||
|
|
73
mix.exs
73
mix.exs
|
@ -46,14 +46,16 @@ defmodule AshOban.MixProject do
|
|||
end
|
||||
|
||||
defp extras() do
|
||||
"documentation/**/*.md"
|
||||
"documentation/**/*.{md,livemd,cheatmd}"
|
||||
|> Path.wildcard()
|
||||
|> Enum.map(fn path ->
|
||||
title =
|
||||
path
|
||||
|> Path.basename(".md")
|
||||
|> Path.basename(".livemd")
|
||||
|> Path.basename(".cheatmd")
|
||||
|> String.split(~r/[-_]/)
|
||||
|> Enum.map(&String.capitalize/1)
|
||||
|> Enum.map(&capitalize/1)
|
||||
|> Enum.join(" ")
|
||||
|> case do
|
||||
"F A Q" ->
|
||||
|
@ -71,23 +73,19 @@ defmodule AshOban.MixProject do
|
|||
end
|
||||
|
||||
defp groups_for_extras() do
|
||||
"documentation/*"
|
||||
|> Path.wildcard()
|
||||
|> Enum.map(fn folder ->
|
||||
name =
|
||||
folder
|
||||
|> Path.basename()
|
||||
|> String.split(~r/[-_]/)
|
||||
|> Enum.map(&String.capitalize/1)
|
||||
|> Enum.join(" ")
|
||||
|
||||
{name, folder |> Path.join("**") |> Path.wildcard()}
|
||||
end)
|
||||
[
|
||||
Tutorials: [
|
||||
~r'documentation/tutorials'
|
||||
],
|
||||
"How To": ~r'documentation/how_to',
|
||||
Topics: ~r'documentation/topics',
|
||||
DSLs: ~r'documentation/dsls'
|
||||
]
|
||||
end
|
||||
|
||||
defp docs do
|
||||
[
|
||||
main: "AshOban",
|
||||
main: "get-started-with-ash-oban",
|
||||
source_ref: "v#{@version}",
|
||||
logo: "logos/small-logo.png",
|
||||
extra_section: "GUIDES",
|
||||
|
@ -104,11 +102,37 @@ defmodule AshOban.MixProject do
|
|||
extras: extras(),
|
||||
groups_for_extras: groups_for_extras(),
|
||||
groups_for_modules: [
|
||||
AshOban: [
|
||||
AshOban
|
||||
],
|
||||
Utilities: [
|
||||
AshOban.Changes.BuiltinChanges,
|
||||
AshOban.Changes.RunObanTrigger
|
||||
],
|
||||
Authorization: [
|
||||
AshOban.Checks.AshObanInteraction
|
||||
],
|
||||
Introspection: [
|
||||
AshOban.Info,
|
||||
AshOban.Trigger
|
||||
],
|
||||
Testing: [
|
||||
AshOban.Test
|
||||
],
|
||||
Internals: ~r/.*/
|
||||
]
|
||||
]
|
||||
end
|
||||
|
||||
defp capitalize(string) do
|
||||
string
|
||||
|> String.split(" ")
|
||||
|> Enum.map(fn string ->
|
||||
[hd | tail] = String.graphemes(string)
|
||||
String.capitalize(hd) <> Enum.join(tail)
|
||||
end)
|
||||
end
|
||||
|
||||
# Run "mix help compile.app" to learn about applications.
|
||||
def application do
|
||||
[
|
||||
|
@ -123,7 +147,7 @@ defmodule AshOban.MixProject do
|
|||
[]
|
||||
else
|
||||
# See the getting started guide why this is only dev/test
|
||||
[{:oban_pro, "~> 0.14", repo: "oban", only: [:dev]}]
|
||||
[{:oban_pro, "~> 1.0", repo: "oban", only: [:dev]}]
|
||||
end
|
||||
|
||||
oban_dep ++
|
||||
|
@ -132,12 +156,12 @@ defmodule AshOban.MixProject do
|
|||
{:spark, ">= 1.1.3"},
|
||||
{:oban, "~> 2.15"},
|
||||
{:ex_doc, "~> 0.22", only: [:dev, :test], runtime: false},
|
||||
{:ex_check, "~> 0.12.0", only: [:dev, :test]},
|
||||
{:ex_check, "~> 0.12", only: [:dev, :test]},
|
||||
{:credo, ">= 0.0.0", only: [:dev, :test], runtime: false},
|
||||
{:dialyxir, ">= 0.0.0", only: [:dev, :test], runtime: false},
|
||||
{:sobelow, ">= 0.0.0", only: [:dev, :test], runtime: false},
|
||||
{:git_ops, "~> 2.5.1", only: [:dev, :test]},
|
||||
{:excoveralls, "~> 0.13.0", only: [:dev, :test]}
|
||||
{:git_ops, "~> 2.5", only: [:dev, :test]},
|
||||
{:excoveralls, "~> 0.13", only: [:dev, :test]}
|
||||
]
|
||||
end
|
||||
|
||||
|
@ -145,8 +169,15 @@ defmodule AshOban.MixProject do
|
|||
[
|
||||
sobelow: "sobelow --skip",
|
||||
credo: "credo --strict",
|
||||
docs: ["docs", "ash.replace_doc_links"],
|
||||
"spark.formatter": "spark.formatter --extensions AshOban"
|
||||
docs: [
|
||||
"spark.cheat_sheets",
|
||||
"docs",
|
||||
"ash.replace_doc_links",
|
||||
"spark.cheat_sheets_in_search"
|
||||
],
|
||||
"spark.formatter": "spark.formatter --extensions AshOban",
|
||||
"spark.cheat_sheets": "spark.cheat_sheets --extensions AshOban",
|
||||
"spark.cheat_sheets_in_search": "spark.cheat_sheets_in_search --extensions AshOban"
|
||||
]
|
||||
end
|
||||
end
|
||||
|
|
36
mix.lock
36
mix.lock
|
@ -1,43 +1,43 @@
|
|||
%{
|
||||
"ash": {:hex, :ash, "2.9.27", "1900e3a5d2579f4370e24806c66b26268f2a3de2d0713c7552b7de7d38f8d5be", [:mix], [{:comparable, "~> 1.0", [hex: :comparable, repo: "hexpm", optional: false]}, {:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: true]}, {:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:ets, "~> 0.8.0", [hex: :ets, repo: "hexpm", optional: false]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: false]}, {:picosat_elixir, "~> 0.2", [hex: :picosat_elixir, repo: "hexpm", optional: false]}, {:plug, ">= 0.0.0", [hex: :plug, repo: "hexpm", optional: true]}, {:spark, "~> 1.0", [hex: :spark, repo: "hexpm", optional: false]}, {:stream_data, "~> 0.5.0", [hex: :stream_data, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "938b745eacfe80c2ea93ea318693cb37ded534d81b509937b1e081a9cea8875a"},
|
||||
"ash": {:hex, :ash, "2.14.17", "d5b8f3a136d4ecd67645a0c539083c7ba0a35a388fce3f240f1cd16d06031b55", [:mix], [{:comparable, "~> 1.0", [hex: :comparable, repo: "hexpm", optional: false]}, {:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: true]}, {:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:ets, "~> 0.8", [hex: :ets, repo: "hexpm", optional: false]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: false]}, {:picosat_elixir, "~> 0.2", [hex: :picosat_elixir, repo: "hexpm", optional: false]}, {:plug, ">= 0.0.0", [hex: :plug, repo: "hexpm", optional: true]}, {:spark, ">= 1.1.20 and < 2.0.0-0", [hex: :spark, repo: "hexpm", optional: false]}, {:stream_data, "~> 0.5", [hex: :stream_data, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "334efc54934100c1437f4c869148bd29a0fdb4dc5b912b470fdeaf15a718de33"},
|
||||
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
|
||||
"certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"},
|
||||
"comparable": {:hex, :comparable, "1.0.0", "bb669e91cedd14ae9937053e5bcbc3c52bb2f22422611f43b6e38367d94a495f", [:mix], [{:typable, "~> 0.1", [hex: :typable, repo: "hexpm", optional: false]}], "hexpm", "277c11eeb1cd726e7cd41c6c199e7e52fa16ee6830b45ad4cdc62e51f62eb60c"},
|
||||
"credo": {:hex, :credo, "1.7.0", "6119bee47272e85995598ee04f2ebbed3e947678dee048d10b5feca139435f75", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6839fcf63d1f0d1c0f450abc8564a57c43d644077ab96f2934563e68b8a769d7"},
|
||||
"db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"},
|
||||
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"},
|
||||
"ecto": {:hex, :ecto, "3.10.2", "6b887160281a61aa16843e47735b8a266caa437f80588c3ab80a8a960e6abe37", [:mix], [{:decimal, "~> 1.6 or ~> 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", "6a895778f0d7648a4b34b486af59a1c8009041fbdf2b17f1ac215eb829c60235"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.10.1", "6ea6b3036a0b0ca94c2a02613fd9f742614b5cfe494c41af2e6571bb034dd94c", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.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", "f6a25bdbbd695f12c8171eaff0851fa4c8e72eec1e98c7364402dda9ce11c56b"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.1", "a22ed1e7bd3a3e3f197b68d806ef66acb61ee8f57b3ac85fc5d57354c5482a93", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "84b795d6d7796297cca5a3118444b80c7d94f7ce247d49886e7c291e1ae49801"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.35", "437773ca9384edf69830e26e9e7b2e0d22d2596c4a6b17094a3b29f01ea65bb8", [:mix], [], "hexpm", "8652ba3cb85608d0d7aa2d21b45c6fad4ddc9a1f9a1f1b30ca3a246f0acc33f6"},
|
||||
"ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 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", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.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", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"},
|
||||
"elixir_make": {:hex, :elixir_make, "0.7.7", "7128c60c2476019ed978210c245badf08b03dbec4f24d05790ef791da11aa17c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bc19fff950fad52bbe5f211b12db9ec82c6b34a9647da0c2224b8b8464c7e6c"},
|
||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||
"ets": {:hex, :ets, "0.8.1", "8ff9bcda5682b98493f8878fc9dbd990e48d566cba8cce59f7c2a78130da29ea", [:mix], [], "hexpm", "6be41b50adb5bc5c43626f25ea2d0af1f4a242fb3fad8d53f0c67c20b78915cc"},
|
||||
"ex_check": {:hex, :ex_check, "0.12.0", "c0e2919ecc06afeaf62c52d64f3d91bd4bc7dd8deaac5f84becb6278888c967a", [:mix], [], "hexpm", "cfafa8ef97c2596d45a1f19b5794cb5c7f700f25d164d3c9f8d7ec17ee67cf42"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"},
|
||||
"excoveralls": {:hex, :excoveralls, "0.13.4", "7b0baee01fe150ef81153e6ffc0fc68214737f54570dc257b3ca4da8e419b812", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "faae00b3eee35cdf0342c10b669a7c91f942728217d2a7c7f644b24d391e6190"},
|
||||
"ets": {:hex, :ets, "0.9.0", "79c6a6c205436780486f72d84230c6cba2f8a9920456750ddd1e47389107d5fd", [:mix], [], "hexpm", "2861fdfb04bcaeff370f1a5904eec864f0a56dcfebe5921ea9aadf2a481c822b"},
|
||||
"ex_check": {:hex, :ex_check, "0.15.0", "074b94c02de11c37bba1ca82ae5cc4926e6ccee862e57a485b6ba60fca2d8dc1", [:mix], [], "hexpm", "33848031a0c7e4209c3b4369ce154019788b5219956220c35ca5474299fb6a0e"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.30.6", "5f8b54854b240a2b55c9734c4b1d0dd7bdd41f71a095d42a70445c03cf05a281", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bd48f2ddacf4e482c727f9293d9498e0881597eae6ddc3d9562bd7923375109f"},
|
||||
"excoveralls": {:hex, :excoveralls, "0.17.1", "83fa7906ef23aa7fc8ad7ee469c357a63b1b3d55dd701ff5b9ce1f72442b2874", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "95bc6fda953e84c60f14da4a198880336205464e75383ec0f570180567985ae0"},
|
||||
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
||||
"git_cli": {:hex, :git_cli, "0.3.0", "a5422f9b95c99483385b976f5d43f7e8233283a47cda13533d7c16131cb14df5", [:mix], [], "hexpm", "78cb952f4c86a41f4d3511f1d3ecb28edb268e3a7df278de2faa1bd4672eaf9b"},
|
||||
"git_ops": {:hex, :git_ops, "2.5.6", "dd01e0e4aedc69b532860ae72281902b00474f4f729b64193f5350daeec191e5", [:mix], [{:git_cli, "~> 0.2", [hex: :git_cli, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "00ed67de1f83684424196823d66e0f15c26117ee2ea6a3174b84de5b030b4112"},
|
||||
"git_ops": {:hex, :git_ops, "2.6.0", "e0791ee1cf5db03f2c61b7ebd70e2e95cba2bb9b9793011f26609f22c0900087", [:mix], [{:git_cli, "~> 0.2", [hex: :git_cli, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "b98fca849b18aaf490f4ac7d1dd8c6c469b0cc3e6632562d366cab095e666ffe"},
|
||||
"hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~> 2.9.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.3.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", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"},
|
||||
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
|
||||
"jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
|
||||
"jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
|
||||
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [: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", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"},
|
||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
|
||||
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
|
||||
"nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.3.0", "9e18a119d9efc3370a3ef2a937bf0b24c088d9c4bf0ba9d7c3751d49d347d035", [:mix], [], "hexpm", "7977f183127a7cbe9346981e2f480dc04c55ffddaef746bd58debd566070eef8"},
|
||||
"oban": {:hex, :oban, "2.15.0", "27b9c2845cdff30c98c8060b11a64318e79bbc1bd32b8dc95fa59a1580a8d90c", [:mix], [{:ecto_sql, "~> 3.6", [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", "22e181c540335d1dd5c995be00435927075519207d62b3de32477d95dbf9dfd3"},
|
||||
"oban_pro": {:hex, :oban_pro, "0.14.1", "729394796e1e79633bb1083633cb9db5c5ddf2a13ab1cbc081593978348f285f", [:mix], [{:ecto_sql, "~> 3.8", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:libgraph, "~> 0.13", [hex: :libgraph, repo: "hexpm", optional: true]}, {:oban, "~> 2.15.0", [hex: :oban, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}], "oban", "ef5e448ec98faa7f07924548904718d3b7a5c1e3eddd9a5a0c11bf90b9af75c2"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
|
||||
"oban": {:hex, :oban, "2.15.4", "d49ab4ffb7153010e32f80fe9e56f592706238149ec579eb50f8a4e41d218856", [:mix], [{:ecto_sql, "~> 3.6", [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", "5fce611fdfffb13e9148df883116e5201adf1e731eb302cc88cde0588510079c"},
|
||||
"oban_pro": {:hex, :oban_pro, "1.0.2", "fa25f84f24c665f0f812321a35ef37eaa5e6e929782727226becb9ea2cf05eb3", [:mix], [{:ecto_sql, "~> 3.8", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:libgraph, "~> 0.13", [hex: :libgraph, repo: "hexpm", optional: true]}, {:oban, "~> 2.15.4", [hex: :oban, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}], "oban", "65b87d47f08d43c39ad5c026e2c86392296d29c028011d92670baf7032e93760"},
|
||||
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
|
||||
"picosat_elixir": {:hex, :picosat_elixir, "0.2.3", "bf326d0f179fbb3b706bb2c15fbc367dacfa2517157d090fdfc32edae004c597", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "f76c9db2dec9d2561ffaa9be35f65403d53e984e8cd99c832383b7ab78c16c66"},
|
||||
"sobelow": {:hex, :sobelow, "0.12.2", "45f4d500e09f95fdb5a7b94c2838d6b26625828751d9f1127174055a78542cf5", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2f0b617dce551db651145662b84c8da4f158e7abe049a76daaaae2282df01c5d"},
|
||||
"sobelow": {:hex, :sobelow, "0.13.0", "218afe9075904793f5c64b8837cc356e493d88fddde126a463839351870b8d1e", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "cd6e9026b85fc35d7529da14f95e85a078d9dd1907a9097b3ba6ac7ebbe34a0d"},
|
||||
"sourceror": {:hex, :sourceror, "0.13.0", "c6ecc96ee3ae0e042e9082a9550a1989ea40182492dc29024a8d9d2b136e5014", [:mix], [], "hexpm", "d0a819491061cd26bfa4450d1c84301a410c19c1782a6577ce15853fc0e7e4e1"},
|
||||
"spark": {:hex, :spark, "1.1.24", "2506d94e0dfc19d0cc2a85304714cc15441bc1e26165ccdeb0d01227d81be2ac", [:mix], [{:nimble_options, "~> 0.5 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:sourceror, "~> 0.1", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "3008128572374b28cfbe0f78e9d47a54c8e132d68c46f7298dc4824fd301c78b"},
|
||||
"spark": {:hex, :spark, "1.1.36", "a4cc1168fe94c24c90fbb3521921c4d3f9ec86642f84adc6da5ae62426189edd", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.5 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:sourceror, "~> 0.1", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "ce03b3167f85fdc4416c9c5cee4aac4cc0ca8715d115631b68669be5e2e890f7"},
|
||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
|
||||
"stream_data": {:hex, :stream_data, "0.5.0", "b27641e58941685c75b353577dc602c9d2c12292dd84babf506c2033cd97893e", [:mix], [], "hexpm", "012bd2eec069ada4db3411f9115ccafa38540a3c78c4c0349f151fc761b9e271"},
|
||||
"stream_data": {:hex, :stream_data, "0.6.0", "e87a9a79d7ec23d10ff83eb025141ef4915eeb09d4491f79e52f2562b73e5f47", [:mix], [], "hexpm", "b92b5031b650ca480ced047578f1d57ea6dd563f5b57464ad274718c9c29501c"},
|
||||
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
|
||||
"typable": {:hex, :typable, "0.3.0", "0431e121d124cd26f312123e313d2689b9a5322b15add65d424c07779eaa3ca1", [:mix], [], "hexpm", "880a0797752da1a4c508ac48f94711e04c86156f498065a83d160eef945858f8"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
|
||||
|
|
Loading…
Reference in a new issue