# credo:disable-for-this-file Credo.Check.Refactor.ModuleDependencies defmodule DevJoy.MixProject do use Mix.Project alias DevJoy.API alias DevJoy.Scene.Asset alias DevJoy.Scene.Challenge alias DevJoy.Scene.Choice alias DevJoy.Scene.Condition alias DevJoy.Scene.Dialog alias DevJoy.Scene.Menu alias DevJoy.Scene.Note alias DevJoy.Scene.Part alias DevJoy.Session @deps [ # Code checking {:credo, "~> 1.7", only: :dev, runtime: false}, {:dialyxir, "~> 1.4", only: :test, runtime: false}, # Documentation {:ex_doc, "~> 0.37", only: :dev, runtime: false}, # Tests {:excoveralls, "~> 0.18", only: :test}, {:esbuild, "~> 0.9", only: :dev}, {:floki, "~> 0.37", only: :test}, expo: "~> 1.1", phoenix_live_view: "~> 1.0" ] @groups_for_modules [ "API & DSL": [DevJoy.Scene, API.Item, API.Notifier, API.Storage], Session: [Session, Session.History, Session.LiveView, Session.Notifier, Session.Storage], Structs: [DevJoy.Character, Asset, Challenge, Choice, Condition, Dialog, Menu, Note, Part] ] @name :dev_joy @source_url "https://gitlab.com/ramurix-software/dev-joy" @version "2.0.0" @spec cli :: Keyword.t() def cli, do: [preferred_envs: [coveralls: :test, "coveralls.html": :test, dialyzer: :test]] @spec project :: Keyword.t() def project do [ aliases: [ "assets.build": ["esbuild module", "esbuild cdn", "esbuild cdn_min", "esbuild main"], "assets.setup": ["esbuild.install --if-missing"], docs: ["docs", &generate_js_docs/1], setup: ["deps.get", "assets.setup", "assets.build"] ], app: @name, deps: @deps, description: "Easier creation of the Visual Novel-like games or presentations.", dialyzer: [plt_add_apps: [:mix]], docs: [ api_reference: false, authors: ["Tomasz Marek Sulima"], extra_section: "Guides", extras: ["README.md": [filename: "introduction", title: "Introduction"]], favicon: "priv/logo.svg", groups_for_docs: [ Delayed: &(&1[:section] == :delayed), "Field types": &(&1[:section] == :field), "Generated using DSL": &(&1[:section] == :generated), Immediate: &(&1[:section] == :immediate), Main: &(&1[:section] == :main), "Session DSL": &(&1[:section] == :session_dsl), "Struct DSL": &(&1[:section] == :struct_dsl) ], groups_for_modules: @groups_for_modules, logo: "priv/logo.svg", main: "introduction", source_ref: "v#{@version}", source_url: @source_url ], elixir: "~> 1.16", elixirc_paths: ["lib"], name: "DevJoy", package: [ exclude_patterns: [~r[.*_test.exs], ~r[lib/test_helper.exs]], files: ~w(.formatter.exs lib LICENSE mix.exs package.json priv README.md), licenses: ["Apache-2.0"], links: %{"GitLab" => @source_url}, maintainers: ["Tomasz Sulima"] ], start_permanent: Mix.env() == :prod, test_coverage: [tool: ExCoveralls], test_paths: ["lib"], version: @version ] end defp generate_js_docs(_args) do Mix.Task.run("app.start") System.cmd("npm", ["run", "docs"], cd: "assets", env: []) end end