set shell := ["bash", "-eu", "-o", "pipefail", "-c"]

default:
    @just --list

fmt:
    moon fmt
    moon -C ../selene-core fmt
    moon -C ../examples fmt inventory
    moon -C ../examples-web fmt inventory/web
    moon -C tests/target-matrix fmt

check:
    moon check --target js --deny-warn
    moon check --target native --deny-warn
    moon -C ../selene-core check src/xaml_view --target js --deny-warn
    moon -C ../selene-core check src/xaml_view --target native --deny-warn
    moon -C ../examples check inventory --target js --deny-warn
    moon -C ../examples check inventory --target native --deny-warn
    moon -C ../examples-web check inventory/web --target js --deny-warn
    moon -C tests/target-matrix check src/inventory_view src/inventory_layout src/component_composition --target js --deny-warn
    moon -C tests/target-matrix check src/inventory_view src/inventory_layout src/component_composition --target native --deny-warn

test:
    moon test src/parser --target js
    moon test src/embedded_emitter --target native
    moon cram test -- --renderer diff --no-color --prepend-test-file-paths=tests/cli/setup.t docs/cli tests/cli/process-contract.md
    moon -C ../selene-core test src/xaml_view --target js
    moon -C tests/target-matrix test src/inventory_view src/inventory_layout src/component_composition --target js

bench-embedded-view:
    moon -C tests/target-matrix bench src/inventory_view --target js --release --no-parallelize

build-examples:
    moon -C ../examples-web build inventory/web --target js --release

generate-examples:
    moon -C ../examples info inventory/view_model --target js
    cd .. && moon run selene-xaml/src/cmd/selene-xaml --target native -- generate examples/inventory/xaml --mbti examples/inventory/view_model/pkg.generated.mbti --out-dir examples/inventory
    moon -C ../examples info inventory/view --target js

generate-component-fixture:
    moon -C tests/target-matrix info src/player_menu_model --target native
    moon run src/cmd/selene-xaml --target native -- generate fixtures/player-menu/ui_xaml --mbti tests/target-matrix/src/player_menu_model/pkg.generated.mbti --out-dir tests/target-matrix/src/generated/ui_views

capture-example-inventory:
    moon -C ../examples-web build inventory/web --target js --release
    cd tests/browser && npm ci && npm run capture-inventory

profile-example-inventory:
    moon -C tests/target-matrix build src/inventory_performance --target js --release
    cd tests/browser && npm ci && npm run profile-inventory

test-all: check test build-examples
    moon test src/parser --target native
    moon -C ../selene-core test src/xaml_view --target native
    moon -C tests/target-matrix test src/inventory_view src/inventory_layout src/component_composition --target native
    cd tests/browser && npm ci && npm test
