 
   @typedoc "Option values used by the `start*` functions"
   @type option :: {:name, name}
+
+  @typedoc "The supervisor flags returned on init"
+  @type sup_flags() :: %{
+          strategy: strategy(),
+          intensity: non_neg_integer(),
+          period: pos_integer()
+        }
 
   @typedoc "The supervisor reference"
   @type supervisor :: pid | name | {atom, node}

  init callback to return the proper supervision flags.
  """
  @callback init(init_arg :: term) ::
              {:ok, {:supervisor.sup_flags(), [:supervisor.child_spec()]}}
              | :ignore

  @typedoc "Return values of `start_link` functions"

  process and exits not only on crashes but also if the parent process exits
  with `:normal` reason.
  """
  @spec start_link(
          [
            child_spec()
            | {module, term}
            | module
            | (old_erlang_child_spec :: :supervisor.child_spec())
          ],
          [option | init_option]
        ) :: {:ok, pid} | {:error, {:already_started, pid} | {:shutdown, term} | term}
  def start_link(children, options) when is_list(children) do
    {sup_opts, start_opts} = Keyword.split(options, [:strategy, :max_seconds, :max_restarts])
    start_link(Supervisor.Default, init(children, sup_opts), start_opts)
