Packages

ash

3.3.3
3.29.3 3.29.2 3.29.1 3.29.0 3.28.0 3.27.8 3.27.7 3.27.6 3.27.5 3.27.4 3.27.3 3.27.2 3.27.1 3.27.0 3.26.0 3.25.2 3.25.1 3.25.0 retired 3.24.7 3.24.6 3.24.5 3.24.4 3.24.3 3.24.2 3.24.1 3.24.0 3.23.1 3.23.0 3.22.2 3.22.1 3.22.0 3.21.3 3.21.2 3.21.1 3.21.0 3.20.0 3.19.3 3.19.2 3.19.1 3.19.0 3.18.0 3.17.1 3.17.0 3.16.0 3.15.0 3.14.1 3.14.0 retired 3.13.2 3.13.1 3.13.0 3.12.0 3.11.3 3.11.2 3.11.1 3.11.0 3.10.1 3.10.0 3.9.0 3.8.0 3.7.6 3.7.5 3.7.4 3.7.3 3.7.2 3.7.1 3.7.0 retired 3.6.3 retired 3.6.2 3.6.1 3.6.0 3.5.43 3.5.42 3.5.41 3.5.40 3.5.39 3.5.38 3.5.37 3.5.36 3.5.35 3.5.34 3.5.33 3.5.32 3.5.31 3.5.30 3.5.29 3.5.28 3.5.27 3.5.26 3.5.25 3.5.24 3.5.23 3.5.22 3.5.21 3.5.20 3.5.19 3.5.18 3.5.17 3.5.16 3.5.15 3.5.14 3.5.13 3.5.12 3.5.11 3.5.10 3.5.9 3.5.8 3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.74 retired 3.4.73 3.4.72 3.4.71 3.4.70 3.4.69 3.4.68 3.4.67 3.4.66 3.4.65 3.4.64 3.4.63 3.4.62 3.4.61 3.4.60 3.4.59 3.4.58 3.4.57 3.4.56 3.4.55 3.4.54 3.4.53 3.4.52 3.4.51 3.4.50 3.4.49 3.4.48 3.4.47 3.4.46 3.4.45 3.4.44 3.4.43 3.4.42 3.4.41 3.4.40 3.4.39 3.4.38 3.4.37 3.4.36 3.4.35 3.4.34 3.4.33 3.4.32 3.4.31 3.4.30 3.4.29 3.4.28 3.4.27 3.4.26 3.4.25 3.4.24 3.4.23 3.4.22 3.4.21 3.4.20 3.4.19 3.4.18 3.4.17 3.4.16 3.4.15 3.4.14 3.4.13 3.4.12 3.4.11 3.4.10 3.4.9 3.4.8 3.4.7 3.4.6 3.4.5 3.4.4 3.4.3 3.4.2 3.4.1 3.4.0 3.3.3 3.3.2 3.3.1 3.3.0 3.2.6 3.2.5 3.2.4 3.2.3 3.2.2 3.2.1 3.2.0 3.1.8 3.1.7 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.16 3.0.15 3.0.14 3.0.13 3.0.12 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.4 3.0.3 3.0.2 3.0.1 3.0.0 3.0.0-rc.46 3.0.0-rc.45 3.0.0-rc.44 3.0.0-rc.43 3.0.0-rc.42 3.0.0-rc.41 3.0.0-rc.40 3.0.0-rc.39 3.0.0-rc.38 3.0.0-rc.37 3.0.0-rc.36 3.0.0-rc.35 3.0.0-rc.34 3.0.0-rc.33 3.0.0-rc.32 3.0.0-rc.31 3.0.0-rc.29 3.0.0-rc.28 3.0.0-rc.27 3.0.0-rc.26 3.0.0-rc.25 3.0.0-rc.24 3.0.0-rc.23 3.0.0-rc.22 3.0.0-rc.21 3.0.0-rc.20 3.0.0-rc.19 3.0.0-rc.18 3.0.0-rc.17 3.0.0-rc.16 3.0.0-rc.15 3.0.0-rc.14 3.0.0-rc.13 3.0.0-rc.12 3.0.0-rc.11 3.0.0-rc.10 3.0.0-rc.9 3.0.0-rc.8 3.0.0-rc.7 3.0.0-rc.6 3.0.0-rc.5 3.0.0-rc.4 3.0.0-rc.3 3.0.0-rc.1 3.0.0-rc.0 2.21.15 2.21.14 2.21.13 2.21.12 2.21.11 2.21.10 2.21.9 2.21.8 2.21.7 2.21.6 2.21.5 2.21.4 2.21.3 2.21.2 2.21.1 2.21.0 2.20.3 2.20.2 2.20.1 2.20.0 2.19.14 2.19.13 2.19.12 2.19.11 2.19.10 2.19.9 2.19.8 2.19.7 2.19.6 2.19.5 2.19.4 2.19.3 retired 2.19.2 retired 2.19.1 retired 2.19.0 retired 2.18.2 2.18.1 2.18.0 2.17.24 2.17.23 2.17.22 2.17.21 2.17.20 2.17.19 2.17.18 2.17.17 2.17.16 2.17.15 2.17.14 2.17.13 2.17.12 2.17.11 2.17.10 2.17.9 2.17.8 2.17.7 2.17.6 2.17.5 2.17.4 2.17.3 2.17.2 2.17.1 2.17.0 2.16.1 2.16.0 2.15.20 2.15.19 2.15.18 2.15.17 2.15.16 2.15.15 2.15.14 2.15.13 2.15.12 2.15.11 2.15.10 2.15.9 2.15.8 2.15.7 2.15.6 2.15.5 2.15.4 2.15.2 2.15.1 2.15.0 2.14.21 2.14.20 2.14.19 2.14.18 2.14.17 2.14.16 2.14.15 2.14.14 2.14.13 2.14.12 2.14.11 2.14.10 2.14.9 2.14.8 2.14.7 2.14.6 2.14.5 2.14.4 2.14.3 2.14.2 2.14.1 2.14.0 2.13.4 retired 2.13.3 2.13.2 2.13.1 2.13.0 2.12.1 2.12.0 2.11.11 2.11.10 2.11.9 2.11.8 2.11.7 2.11.6 2.11.5 2.11.4 2.11.3 2.11.2 2.11.1 2.11.0 2.11.0-rc.3 2.11.0-rc.2 2.11.0-rc.1 2.11.0-rc.0 2.10.2 2.10.1 2.10.0 2.9.29 2.9.28 2.9.27 2.9.26 2.9.25 2.9.24 2.9.23 2.9.22 2.9.21 2.9.20 2.9.19 2.9.18 2.9.17 2.9.16 2.9.15 2.9.14 2.9.13 2.9.12 2.9.11 2.9.10 2.9.9 2.9.8 2.9.7 2.9.6 2.9.5 2.9.4 2.9.3 2.9.2 2.9.1 2.9.0 2.8.1 2.8.0 2.7.1 2.7.0 2.6.31 2.6.30 2.6.29 2.6.28 2.6.27 2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 2.6.4 2.6.3 2.6.2 2.6.1 2.6.0 2.5.16 2.5.15 2.5.14 2.5.13 2.5.12 2.5.11 2.5.10 2.5.9 2.5.8 2.5.7 2.5.6 2.5.5 2.5.4 2.5.3 2.5.2 2.5.1 2.5.0 2.5.0-rc.6 2.5.0-rc.5 2.5.0-rc.4 2.5.0-rc.3 2.5.0-rc.2 2.5.0-rc.1 2.5.0-rc.0 2.4.30 2.4.29 2.4.28 2.4.27 2.4.26 2.4.25 2.4.24 2.4.23 2.4.22 2.4.21 2.4.20 2.4.19 2.4.18 2.4.17 2.4.16 2.4.15 2.4.14 2.4.13 2.4.12 2.4.11 2.4.10 2.4.9 2.4.8 2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 2.3.0 2.2.0 2.1.0 2.0.0 2.0.0-rc.15 2.0.0-rc.14 2.0.0-rc.13 2.0.0-rc.12 2.0.0-rc.11 2.0.0-rc.10 2.0.0-rc.9 2.0.0-rc.8 2.0.0-rc.7 2.0.0-rc.6 2.0.0-rc.5 2.0.0-rc.4 2.0.0-rc.3 2.0.0-rc.2 2.0.0-rc.1 2.0.0-rc.0 2.0.0-pre.8 2.0.0-pre.7 2.0.0-pre.6 2.0.0-pre.5 2.0.0-pre.4 2.0.0-pre.3 2.0.0-pre.2 2.0.0-pre.1 2.0.0-pre.0 1.53.3 1.53.2 1.53.0 1.52.0-rc.22 1.52.0-rc.21 1.52.0-rc.20 1.52.0-rc.19 1.52.0-rc.18 1.52.0-rc.17 1.52.0-rc.16 1.52.0-rc.15 1.52.0-rc.14 1.52.0-rc.13 1.52.0-rc.12 1.52.0-rc.11 1.52.0-rc.10 1.52.0-rc.9 1.52.0-rc.8 1.52.0-rc.7 1.52.0-rc.6 1.52.0-rc.5 1.52.0-rc.4 1.52.0-rc.3 1.52.0-rc.2 1.52.0-rc.1 1.52.0-rc.0 1.51.2 1.51.1 retired 1.51.0 1.50.21 1.50.20 1.50.19 1.50.18 1.50.17 1.50.16 1.50.15 1.50.14 1.50.13 1.50.12 1.50.11 1.50.10 1.50.9 1.50.8 1.50.7 1.50.6 1.50.5 1.50.4 1.50.3 1.50.2 1.50.1 1.50.0 1.49.0 1.48.0-rc.30 1.48.0-rc.29 1.48.0-rc.28 1.48.0-rc.27 1.48.0-rc.26 1.48.0-rc.25 1.48.0-rc.24 1.48.0-rc.23 1.48.0-rc.22 1.48.0-rc.21 1.48.0-rc.20 1.48.0-rc.19 1.48.0-rc.18 1.48.0-rc.17 1.48.0-rc.16 1.48.0-rc.15 1.48.0-rc.14 1.48.0-rc.13 1.48.0-rc.12 1.48.0-rc.11 1.48.0-rc.10 1.48.0-rc.9 1.48.0-rc.8 1.48.0-rc.7 1.48.0-rc.6 1.48.0-rc.5 1.48.0-rc.4 1.48.0-rc.3 1.48.0-rc.2 1.48.0-rc.1 1.48.0-rc.0 1.47.12 1.47.11 1.47.10 1.47.9 1.47.8 1.47.7 1.47.6 1.47.5 1.47.4 1.47.3 1.47.2 1.47.1 1.47.0 1.46.13 1.46.12 1.46.11 1.46.10 1.46.9 1.46.8 1.46.7 1.46.6 1.46.5 1.46.4 1.46.3 1.46.2 1.46.1 1.46.0 1.45.0-rc9 1.45.0-rc8 1.45.0-rc7 1.45.0-rc6 1.45.0-rc5 1.45.0-rc4 1.45.0-rc3 1.45.0-rc20 1.45.0-rc2 1.45.0-rc19 1.45.0-rc18 1.45.0-rc17 1.45.0-rc16 1.45.0-rc15 1.45.0-rc14 1.45.0-rc13 1.45.0-rc12 1.45.0-rc11 1.45.0-rc10 1.45.0-rc1 1.45.0-rc0 1.44.13 1.44.12 1.44.11 1.44.10 1.44.9 1.44.8 1.44.7 1.44.6 1.44.5 1.44.4 1.44.3 1.44.2 1.44.1 1.44.0 1.43.12 1.43.11 1.43.10 1.43.9 1.43.8 1.43.7 1.43.6 1.43.5 1.43.4 1.43.3 1.43.2 1.43.1 1.43.0 1.42.0 1.41.12 1.41.11 1.41.10 1.41.9 1.41.8 1.41.7 1.41.6 1.41.5 1.41.4 1.41.3 1.41.2 1.41.1 1.41.0 1.40.0 1.39.7 1.39.6 1.39.5 1.39.4 1.39.3 1.39.2 1.39.1 1.39.0 1.38.0 1.37.2 1.37.1 1.37.0 1.36.22 1.36.21 1.36.19 1.36.18 1.36.17 1.36.16 1.36.15 1.36.14 1.36.13 1.36.12 1.36.11 1.36.10 1.36.9 1.36.8 1.36.7 1.36.6 1.36.5 1.36.4 1.36.3 1.36.2 1.36.0 1.35.1 1.35.0 1.34.9 1.34.8 1.34.7 1.34.6 1.34.5 1.34.4 1.34.3 1.34.2 1.34.1 1.34.0 1.33.0 1.32.2 1.32.1 1.32.0 1.31.1 1.31.0 1.30.2 1.30.1 1.29.0-rc1 1.29.0-rc0 1.28.1 1.28.0 1.27.1 1.27.0 1.26.13 1.26.12 1.26.11 1.26.10 1.26.9 1.26.8 1.26.7 1.26.6 1.26.5 1.26.4 1.26.2 1.26.1 1.26.0 1.25.8 1.25.7 1.25.6 1.25.5 1.25.4 1.25.3 1.25.2 1.25.1 1.25.0 1.24.2 1.24.1 1.24.0 1.23.3 1.23.2 1.23.1 1.23.0 1.22.1 1.22.0 1.20.1 1.20.0 1.19.1 1.19.0 1.18.1 1.18.0 1.17.1 1.17.0 1.16.2 1.15.1 1.15.0 1.14.0 1.13.4 1.13.3 1.13.2 1.13.1 1.13.0 1.12.0 1.11.1 1.11.0 1.10.0 1.9.0 1.8.0 1.7.0 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.1 1.5.0 1.4.1 1.4.0 1.3.1 1.3.0 1.2.1 1.2.0 1.1.3 1.1.2 1.1.0 1.0.3 1.0.2 1.0.1 1.0.0 0.13.1 0.13.0 0.12.0 0.10.0 0.9.1 0.9.0 0.8.0 0.7.0 0.6.5 0.6.4 0.6.3 0.6.2 0.6.1 0.6.0 0.5.2 0.5.1 0.5.0 0.4.0 0.3.0 0.2.0 0.1.9 0.1.8 0.1.3 0.1.1 0.1.0

A declarative, extensible framework for building Elixir applications.

Security advisory: This version has known vulnerabilities. View advisories

Current section

Files

Jump to
ash CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
<!-- changelog -->
## [v3.3.3](https://github.com/ash-project/ash/compare/v3.3.2...v3.3.3) (2024-08-01)
### Bug Fixes:
* roll back bulk update/destroy on before action error
* delete ash_notifications from pdict after reading
## [v3.3.2](https://github.com/ash-project/ash/compare/v3.3.1...v3.3.2) (2024-08-01)
### Bug Fixes:
- [`Ash.Igniter`] properly parse multiple occurrences of :keep arguments
- [calculations] properly key nested calculations and add additional tests
- [calculations] pass relationship path down when merging query loads
- [`mix ash.codegen`] don't set `--name nil` when calling codegen tasks
- [`Ash.Filter`] fix behavior of synthesized joins across data layers
### Improvements:
- [`mix ash.gen.resource`] add `--timestamps` argument to add timestamps to the resource
## [v3.3.1](https://github.com/ash-project/ash/compare/v3.3.0...v3.3.1) (2024-07-30)
### Bug Fixes:
- [`mix ash.gen.domain`] properly parse domain module in `mix ash.gen.domain`
- [`Ash.Resource.Change`, `Ash.Resource.Validation`] properly handle mixed atomic & non-atomic validations/changes
- [`Ash.Filter`] properly find data layer predicates when name is provided as a string
- [relationships] set `accessing_from` and join read action for many_to_many relationships correctly (#1355)
### Improvements:
- [`Ash.Resource.Change`] implement `change/3` automatically if batch callbacks are defined
## [v3.3.0](https://github.com/ash-project/ash/compare/v3.2.6...v3.3.0) (2024-07-27)
### Features:
- [`Ash.Type.File`] Add Ash.Type.File (#1337)
### Bug Fixes:
- [bulk actions] ensure that statuses are set correctly on bulk actions
- [bulk actions] properly transfer process context(tracers) for bulk actions
- [embedded resources] properly display identity/primary key mismatch error on lists of embeds
- [`Ash.Type.NewType`] apply constraints to NewType even when casting an array (#1341)
- [`Ash.Query`] pass reuse_values? true when loading in Ash.Query.apply_to/2 (#1346)
- [code interfaces] honor `skip_unknown_inputs` in code interfaces
- [notifications] don't gather notifications except for in the top level transaction starter
- [generic actions] support `skip_unknown_inputs` on generic actions
- [atomic updates] ensure `changed?` context is set on atomic changesets (we assume it is `true`, its up to extensions to handle)
- [`Ash.Type.CiString`, `Ash.Type.String`] Update string/ci_string generators to ensure min_length (#1335)
- [`Ash`] handle `{record, action, input}` types in `Ash.can?`
- [bulk actions] only call `batch_change` if it is defined, never `change` in bulk create
### Improvements:
- [`mix ash.gen.resource`] better positional argument handling with igniter
- [`Ash.Expr`] use `:utc_datetime_usec` for `now()` return type
- [`mix ash.install`] don't install sat solver in initial installation
- [`Ash.Policy.Authorizer`] validate that a solver exists at compile time when using policies
- [`Ash.Type.Enum`] Expose type t() on Ash.Type.Enum implementations (#1338)
- [`Ash.Resource`] add :\* as a valid value in `skip_unknown_inputs`
- [`Ash.Resource`] add `skip_unknown_inputs` to individual actions
- [embedded resources] add `skip_unknown_inputs` constraint to embedded resources
- [embedded resources] automatically fall back to a default domain when working with embeds
- [`Ash`] handle 3 tuple in `Ash.can?`
- [`Ash.Error`] add `Ash.Error.error_descriptions`
## [v3.2.6](https://github.com/ash-project/ash/compare/v3.2.5...v3.2.6) (2024-07-22)
### Bug Fixes:
- [bulk actions] fallback to `authorize_with` when authorizing bulk destroy actions
- [bulk actions] don't refer to non-existent `batch_change/4`
### Improvements:
- [bulk actions] Replace incorrect function_exported?-checks in bulk-actions, add has-defs for change modules (#1330)
## [v3.2.5](https://github.com/ash-project/ash/compare/v3.2.4...v3.2.5) (2024-07-22)
### Bug Fixes:
- [destroy actions] apply atomic validations on non-bulk destroy actions
- [`Ash.Policy.Info`] add default to private_fields_policy in Ash.Policy.Info (#1329)
- [relating_to_actor] make `relating_to_actor` built-in-check aware of atomics
- [`Ash.Expr`] remove redundant overload of `Ash.Expr.get_path` (#1328)
- [`Ash.Type.NewType`] cast_input/2 of Ash.Type.NewType returning :ok (#1324)
- [`Ash.Reactor`] warnings emitted by removed reactor behaviour function. (#1325)
### Improvements:
- [bulk actions] add `authorize_with` fallback option to bulk actions
- [`Ash.Policy.Authorizer`] allow policy conditions to be applied inside their block
## [v3.2.4](https://github.com/ash-project/ash/compare/v3.2.3...v3.2.4) (2024-07-18)
### Bug Fixes:
- [transaction hooks] fix warning on transaction hooks violating their semantics
## [v3.2.3](https://github.com/ash-project/ash/compare/v3.2.2...v3.2.3) (2024-07-18)
### Bug Fixes:
- [`mix ash.patch.extend`] properly convert extension string into a module
- [`mix ash.patch.extend`] only display available to extend
- [`mix ash.install`] mix igniter.install ash --example case clause error (#1317)
- [multitenancy] only use attribute for filtering when multitenancy strategy == :attribute
### Improvements:
- [`Ash.Resource.Igniter`] Add `Ash.Resource.Igniter.domain` to get the domain of a resource
## [v3.2.2](https://github.com/ash-project/ash/compare/v3.2.1...v3.2.2) (2024-07-17)
### Features:
- [`Ash.Reactor`] Add ash_step wrapper (#1311)
### Bug Fixes:
- [bulk destroys] honor atomic validations in destroy actions using `filter`
- [Ash.Type.Vector] handle casting nil vectors (#1316)
- [Ash.Type] don't override `nil` handling in `Ash.Type.cast_input/3`
## [v3.2.1](https://github.com/ash-project/ash/compare/v3.2.0...v3.2.1) (2024-07-17)
### Bug Fixes:
- properly honor the `include_nil?` option
- store after_action hooks added outside of changes for atomic upgrade
- don't use `type/3` in string interpolation
- properly pass `include_nil?` from when building query aggregates
### Improvements:
- allow skipping initialization of types in unions
## [v3.2.0](https://github.com/ash-project/ash/compare/v3.1.8...v3.2.0) (2024-07-15)
### Features:
- [field policies] Allow field policies to hide private fields (#1289)
Use the `private_fields :include | :show | :hide` option in the `field_policies` section of your resource to control how private fields are handled by field policies.
For example:
```elixir
# hide all private fields when authorizing
field_policies :hide
# the current behavior. Private fields are ignored by field policies
field_policies :show
# private fields can have field policies like any other field
field_policies :include
```
### Improvements:
- [`Ash.Domain.Igniter`] add `Ash.Domain.Igniter.list_domains/1`
- [`Ash.Resource.Igniter`] add `Ash.Resource.Igniter.list_resources/1`
## [v3.1.8](https://github.com/ash-project/ash/compare/v3.1.7...v3.1.8) (2024-07-14)
### Bug Fixes:
- [bulk actions] use `unpaginated_read` when simulating streaming for low limit queries
## [v3.1.7](https://github.com/ash-project/ash/compare/v3.1.6...v3.1.7) (2024-07-14)
### Bug Fixes:
- [Ash.Query] don't use `:same` return type for most operators
- [Ash.Query] don't use returns as basis type unless explicitly allowed
## [v3.1.6](https://github.com/ash-project/ash/compare/v3.1.5...v3.1.6) (2024-07-14)
### Bug Fixes:
- [Ash.Query] ensure `today` has properly configured returns type
- [Ash.Type] module type apply_constraints for nil fix (#1313)
## [v3.1.5](https://github.com/ash-project/ash/compare/v3.1.4...v3.1.5) (2024-07-14)
### Bug Fixes:
- [Ash.Type] don't specify that `get_path` is a predicate function
### Improvements:
- [Ash.Expr] add `Ash.Expr.determine_type(mod, children)`
- [Ash.Query] add return typing to functions
## [v3.1.4](https://github.com/ash-project/ash/compare/v3.1.3...v3.1.4) (2024-07-13)
### Bug Fixes:
- [code interface] properly omit destroyed result in code interfaces
- [Ash.Type.Integer] properly compare `expr` to `min` with `min` integer constraint
- [Ash.Reactor] Make action ctx-values from reactor-ctx take precedence if set. (#1308)
### Improvements:
- [Ash.Resource.Change] support returning a list of atomics from atomic change callbacks
- [Ash.Type] add `cast_atomic_constraints` callback and use it in core types
- [Ash.Expr] improve type signature for `if/3`
- [Ash.Expr] simpler and/or short circuiting
## [v3.1.3](https://github.com/ash-project/ash/compare/v3.1.2...v3.1.3) (2024-07-11)
### Bug Fixes:
- [bulk actions] ensure that errors in queries do not raise in atomic upgrades/single atomics
- [Ash.Type.Integer] use correct contraint when validating min int (#1298)
- [Ash.Filter] don't refer to private attributes when parsing filter inputs that refer to relationships (#1280)
### Improvements:
- [Ash.Query] add `strict?` option to `Ash.Query.load` (#1302)
## [v3.1.2](https://github.com/ash-project/ash/compare/v3.1.1...v3.1.2) (2024-07-10)
### Bug Fixes:
- [bulk actions] ensure that manual action configurations are honored for bulk actions
## [v3.1.1](https://github.com/ash-project/ash/compare/v3.1.0...v3.1.1) (2024-07-10)
### Bug Fixes:
- [ash.install] installer doesn't need to add spark as a dependency, just run its installer
## [v3.1.0](https://github.com/ash-project/ash/compare/v3.0.16...v3.1.0) (2024-07-09)
### Features:
- [Generators] add `mix ash.install` (call with `mix igniter.install ash`)
- [Generators] add `mix ash.gen.resource`
- [Generators] add `mix ash.gen.base_resource`
- [Generators] add `mix ash.gen.domain`
- [Generators] add `mix ash.extend`
- [Ash.Type.UUIDv7] Add built in `Ash.Type.UUIDv7` type, and `uuid_v7_primary_key` builder
### Bug Fixes:
- [atomics] sort primary key changes ahead of others in atomic changes
- [Ash.Changeet] fix typespec for Changeset.around_transaction/2 (#1292)
- [multitenancy] ensure tenancy is always enforced on create/update/destroy actions
- [loading relationships] lateral join on `from_many? true` relationships
- [calculations] don't reuse calculations/aggregates if `authorize?` is true
- [aggregates] ensure aggregate context is fully configured in `Ash.aggregate`
- [bulk actions] properly transfer changeset.context on streamed batch changesets
- [bulk actions] ensure notifications are dispatched from bulk actions
- [lazy loading] lazy-loading logic for calculations/aggregates was inversed (#1275)
- [error handling] properly match on async task exceptions
- [policies] ensure `context` is available in policy template expressions
- [policies] ensure forbidden errors behave the same when using implicit bulk version of code interface functions
- [manual relationships] compare keys in manual relationships when using 'complex' types (#1270)
- [Ash.Filter] cover more cases in filter input parsing (#1261)
- [has_one relationships] automatically set `from_many?` if a `has_one` has a `sort` applied
- [Ash.Filter] fix match error when synthesizing joins across data layers
- [Ash.DataLayer.Ets] properly support multitenancy when referencing relationships
- [Ash.Type.Union] initialize & validate each subtype of a union
### Improvements:
- [Ash.Type.Enum] allow overriding `cast_stored/2` and `dump_to_native/2`
- [Ash.DataLayer.Simple] support offset in the simple data layer
- [Ash.Changeset] allow after_action hooks in fully atomic changesets
## [v3.0.16](https://github.com/ash-project/ash/compare/v3.0.15...v3.0.16) (2024-06-21)
### Bug Fixes:
- [bulk updates] use the proper opts when calling manual updates in bulk updates
- [pagination] apply pagination at runtime for non lateral join queries
- [multitenancy] consider multitenancy when checking if through-join is unique
- [Ash.Changeset] don't run any `before_action` hooks if changeset is invalidated in prior hook
- [atomic upgrade] only prevent atomic upgrade when hooks were explicitly added
### Improvements:
- [Ash.Error] retain error context on overridden messages
## [v3.0.15](https://github.com/ash-project/ash/compare/v3.0.14...v3.0.15) (2024-06-18)
### Improvements:
- [Ash.Type] add optional `matches_type?/2` callback to `Ash.Type`
- [Ash.Domain] add `backwards_compatible_interface?` option to `use Ash.Domain`
## [v3.0.14](https://github.com/ash-project/ash/compare/v3.0.13...v3.0.14) (2024-06-18)
### Bug Fixes:
- [many-to-many relationships] apply join relationship filter when loading many_to_many relationships
- [Ash.Query] ensure we honor any computed select changes when loading through attributes
### Improvements:
- [Ash.Policy.Authorier] add `subject` and `context` keys to policy context
## [v3.0.13](https://github.com/ash-project/ash/compare/v3.0.12...v3.0.13) (2024-06-17)
### Bug Fixes:
- [parallelism] don't start async limiter tasks if async is disabled
- [Ash.Domain] properly set default timeout to `:infinity`
- [upserts] pass down `identity` when doing upserts, for new feature support
- [Ash.Changeset] ensure that `before_transaction` hook errors fail the operation
- [Ash.Changeset] ensure that `before_transaction` hook errors still trigger `after_transaction` hooks
- [bulk updates] abort bulk updates on before transaction hook errors
## [v3.0.12](https://github.com/ash-project/ash/compare/v3.0.11...v3.0.12) (2024-06-14)
### Bug Fixes:
- [atomic updates] fix expression interpolation for cast_atomic for integer, decimal, float
- [generic actions] set default argument values on generic actions
- [generic actions] support `^arg/1` and similar constructions in filter policies on generic actions
### Improvements:
- [Ash.Resource] set a `module` when validating accepts
## [v3.0.11](https://github.com/ash-project/ash/compare/v3.0.10...v3.0.11) (2024-06-11)
### Bug Fixes:
- [loading through attributes] only apply load through for attributes that are being selected directly
- [relationship loading] ensure we lateral join with `from_many?: true` or any `:many` cardinality relationships
- [create/update/destroy actions] correctly load paginated relationships after create, update, delete (#1229)
- [bulk create/update/destroy] load relationships on bulk operations (#1234)
- [Ash.Type.Atom] return proper `{:ok, value}` from `Ash.Type.Atom.apply_constraints/2`
- [Ash.Filter] fix the compare/2 implementations (#1232)
- [Ash.Filter] return proper value from short-circuit filter hydration
- [Ash.Seed] fix seed not working when :**keep_nil** is generated using seed_input (#1228)
- [Ash.Generator] pass resource to Ash.Seed.seed! in Ash.Generator.seed! (#1227)
### Improvements:
- [Ash.Resource] validate `require_attributes` (error) and `allow_nil_input` (warning) at compile time
- [Ash.Seed] add tenant option to Ash.Seed.seed! (#1230)
## [v3.0.10](https://github.com/ash-project/ash/compare/v3.0.9...v3.0.10) (2024-06-06)
### Bug Fixes:
- [Ash.Union] ensure that union types w/ explicit tags have constraints applied
- [multitenancy] don't update tenant on update, instead enforce it
- [compare/2 validation] Do not compare nil values in `compare` validation (#1223)
- [bulk actions] ensure context is properly set on bulk manual action invocations
### Improvements:
- [Ash.Resource] detect invalid resources placed in relationships on domains verifier
- [Ash.Resource] warn at compile time on types that don't define `atomic_update/2`
## [v3.0.9](https://github.com/ash-project/ash/compare/v3.0.8...v3.0.9) (2024-05-31)
### Bug Fixes:
- [Ash.Filter] use correct boolean operation names in Filter.find/4 (#1214)
- [aggregates] when hydrating nested aggregates, use correct related resource/path pair
- [aggregates] retain `ref_path` when authorizing aggregates
- [relationship loading] ensure that belongs_to relationships are properly not reloaded with `lazy?: true`
- [bulk actions] implement rollback on after hooks for bulk actions
- [bulk actions] check if in transaction before trying to roll it back
### Improvements:
- compatibility with elixir 1.17
## [v3.0.8](https://github.com/ash-project/ash/compare/v3.0.7...v3.0.8) (2024-05-28)
### Bug Fixes:
- [bulk updates] missing `else` caused manual updates not to work with `bulk_update`
- [Ash.Policy.Authorizer] properly compose multiple filter-checks in policy conditions
- [Ash.Policy.Authorizer] properly honor trailing policies that are constantly false
### Improvements:
- [Ash.Notifier] verify notifiers all use the `Ash.Notifier` behaviour
## [v3.0.7](https://github.com/ash-project/ash/compare/v3.0.6...v3.0.7) (2024-05-24)
### Improvements:
- [identities] support `nils_distinct?` on identities
- [identties] support `where` option on `identities`
- [identities] allow calculations in identity keys
## [v3.0.6](https://github.com/ash-project/ash/compare/v3.0.5...v3.0.6) (2024-05-23)
### Bug Fixes:
- [policies] don't raise an error when authorizing against previous values without atomic upgrades
- [calculations] handle subquery-requiring calculations in `calculate/2`, ensuring we have a primary key
- [Ash.DataLayer] resolve mixup between atomic upsert vs update capability of datalayers (#1198)
## [v3.0.5](https://github.com/ash-project/ash/compare/v3.0.4...v3.0.5) (2024-05-23)
### Bug Fixes:
- [mix ash.*] only use `Mix.deps_tree` if defined (its only defined for elixir 1.15+)
### Improvements:
- [atomic upgrade] add `atomic_upgrade?` flag to update/destroy actions
- [atomic upgrade] do not do atomic upgrade by default unless `require_atomic?` is `true`
- [atomic upgrade] allow configuring the read action used by atomic upgrades
## [v3.0.4](https://github.com/ash-project/ash/compare/v3.0.3...v3.0.4) (2024-05-22)
### Bug Fixes:
- [bulk update/destroy] ensure that all notifications are sent
## [3.0.3](https://github.com/ash-project/ash/compare/v3.0.2...3.0.3) (2024-05-22)
### Features:
- [relationship pagination] allow retrieving the count of paginated relationships (#1183)
- [Ash.Reactor] Add `bulk_create` step type.
- [Ash.Reactor] Add `bulk_update` step type. (#1185)
### Bug Fixes:
- [Ash.Actions.Read] properly hydrate and scope sorts with query context
- [Ash.Changeset] handle list of atomic conditions coming from atomic validation implementation (#1194) (#1195)
- [embedded resources] handle nil value for old_values when casting arrays (#1191)
- [Ash.Query] use `Ash.Sort.parse_input/3` in `Ash.Query.sort_input/2`
- [Ash.Resource.Validation.Changing] works correctly in atomics, and can eagerly detect changing (#1178)
- [atomic updates] check the where condition before checking validation atomicity (#1177)
- [bulk actions] don't emit after batch notifications if `notify?: false`
- [Ash.Resource] prefer resource domain over option domain (#1176)
- [bulk update/destroy] don't require domain for empty stream bulk update and destroy (#1175)
- [Ash.Generator] only return valid non nil values items from generator (#1121)
- [bulk destroy] properly validate action when calling bulk destroy
- [code interface] allow all strategies for bulk actions in code interfaces by default
- [code interfaces] honor `get?` for bulk update/bulk destroy
### Improvements:
- [Ash.Query] support anonymous aggregates and calculations in sorts
- [sensitive fields] Implement `show_sensitive?` config (#1180)
- [Ash.Query] support `filter_input` and `sort_input` in `Ash.Query.build/2`
- [Ash.Changeset] add `template_requires_actor` check for changesets
- [bulk update/destroy] don't use queries for streaming if they have hooks
- [Ash.Policy.Check.ChangingAttributes] consider `from: nil` in `changing_attributes/1` check
## [v3.0.2](https://github.com/ash-project/ash/compare/v3.0.1...v3.0.2) (2024-05-15)
### Improvements:
- [Ash.Expr] add pattern matching for clarity on values accepted by `ref/1` and `ref/2`
- [Ash.Expr] add `can_return_nil?/1` callback to Ash expressions, allowing for various optimizations
- [Ash.Type.NewType] raise argument error on unknown options in `Ash.Type.NewType`. Helps with typos & misunderstandings
- [embedded resources] use the `source` configuration for attributes in embedded resources (it was previously just ignored)
- [Ash.Policy.Authorizer] better type specification for checks, to get better autocomplete and compile time validation
- [Ash.Error.Invalid.NoSuchInput] added a `did_you_mean` field and used it in the error message
### Bug Fixes:
- [Ash.Resource] properly persist simple_notifiers (they were being ignored before)
- [code interface] accept single ids in code interface as subject for destroy/update
- [bulk update] ensure that the `changed?` context is set in after action hooks on batches
- [relationships] allow for inferred domains when authorizing join queries
- [Ash.Expr] don't treat `nil` as not a valid value when type casting lists
- [atomic upgrade] keep data's metadata in atomic upgraded update (#1165)
## [v3.0.1](https://github.com/ash-project/ash/compare/v3.0.0...v3.0.1) (2024-05-14)
### Features:
- [Ash.Resource.Change.Builtins] Add `cascade_destroy` to builtin changes.
### Bug Fixes:
- [calculations] calculation eager evaluation bug caused `exists` to eager evaluate when we didn't actually have the related data
- [field policies] fix field policy rewrite errors on non-success cases (#1163)
- [embedded resources] fix embedded resource authorization (#1159) (#1160)
- infinite recursion if query is empty (#1158)
- [Ash.DataLayer.Ets] ensure that changeset filters are honored in ETS destroy/update_query
- [update/destroy actions] don't rollback transactions on stale records, ignore stale records in bulk actions
- [bulk creates] don't check required belongs to fields until after setting them in bulk creation
- [code interface] check require_reference? when generating update code interface (#1152)
## [v3.0.0](https://github.com/ash-project/ash/compare/v3.0.0...2.0)
## 3.0
We are starting the changelog fresh. See `documentation/2.0-CHANGELOG.md` in GitHub for the old changelogs.
### Breaking Changes:
For a guide on adjusting to these breaking changes, see the [upgrade guide](/documentation/topics/development/upgrading-to-3.0.md)
- [Ash.Api] has been renamed to `Ash.Domain`, and references to the concept have been renamed as well, i.e in options and in the DSL
- [Ash] we now call functions on this, isntead of the domain. i.e `Ash.create` and `Ash.read`. The generated functions are now marked as deprecated
- [Ash] remove process context functionality. You can no longer store the actor/tenant in the context with `Ash.set_actor` and so on
- [private?] deprecate `private?: false` in favor of the more explicit `public?: true`
- [default_accept] default `default_accept` is now `[]`
- [action lifecycle] after transaction hooks cannot be added from inside of other lifecycle hooks
- [Ash.NotLoaded] use `%Ash.NotLoaded{}` for unselected values, instead of `nil`
- [require_atomic?] now defaults to `true`, requiring opt-out of atomic behavior
- [authorization] default `api.authorization.authorize` to `:by_default`
- [Ash.Registry] has been removed
- [actions] `domain` must always be known when constructing changesets
- [Ash.Notifier] `requires_original_data?/2` callback defaults to `false`
- [Ash.Notifier.PubSub] default to `previous_values?: false`, allowing notifications to be sent for atomic updates
- [unknown inputs] all action invocations now use `UnknownInput` errors when given an input they don't accept
- [policies] `requires_original_data?/2` callback on checks defaults to `false`
- [Ash.Calculation] has been renamed to `Ash.Resource.Calculation`
- [Ash.Resource.Calculation] "strict mode" has been added and defaults to `true`. This causes only explicitly requested fields from relationships to be loaded
- [Ash.Query.Calculation] positional arguments are now an options list
- [calculations] anonymous function calculations in a resource now take lists and return lists, instead of a single record (like standard calculations do)
- [context] The context argument passed to many different callbacks is now a struct, tailored to that specific context. For example, in a calculation you will receive an `Ash.Resource.Calculation.Context`
- [after_action/before_action] These builtin changes now accept a 3rd context argument
- [picosat_elixir] is now optional (`simple_sat` is now an alternative)
- [Ash.Changeset] `Ash.Changeset.new!` has been removed
- [Ash.Changeset] `Ash.Changeset.new/2` has been removed (`Ash.Changeset.new/1` is still available)
- [Ash.Changeset] `changeset.filters` is now `changeset.filter`
- [Ash.Changeset] reverse order of before action & before transaction hooks. They now run in the action they are added. They used to run in reverse order.
- [Ash.CiString] `Ash.CiString.new/1` returns `nil` on `nil` input
- [belongs_to.attribute_writable?] add `attribute_public?` for controlling publicity, and default `attribute_writable?` to `true`.
- [Ash.Filter.TemplateHelpers] removed, all functions needed for expressions are now defined in `Ash.Expr`
- [Ash.Expr] keyword lists are no longer special cased in ash expressions, and requiring pinning like any other value.
- [Ash.Resource] default read actions are now paginatable with keyset and offset pagination (but pagination is not required)
- [Ash.Resource] default actions require explicit accept lists (or will use `default_accept`). i.e `defaults [:read, create: [:first_name, :last_name]]`
- [Ash.Resource] `simple_notifiers` is now an option to `use Ash.Resource`, instead of being in the DSL at `resource.simple_notifiers`
- [Ash.Flow] has been removed and put in its own package `ash_flow`. It is being deprecated in favor of `Reactor`
- [Ash.Error] the implementation has been extracted out to `Splode`. Defining new `Ash.Error`s is now done by defining a new `Splode.Error`
- [Ash.Query] swap position of sort order and arguments in calculation sorting, i.e instead of `calculation: {:asc, %{...args}}` it is now `calculation: {%{...args}, :asc}`
- [Ash.Resource.Aggregate] add `include_nil?` aggregate option, and default it to `false` (so `list` and `first` aggregates do not consider `nil` values by default)
- [Ash.Policy.FilterCheck] now accepts `context` arguments, like `Ash.Policy.FilterCheckWithContext`
- [Ash.Policy.FilterCheckWithContext] has been removed, use `Ash.Policy.FilterCheck`
### Features:
- [Ash.Type] add new remove_nil_items? array type constraint (#1116)
- [Ash.Query] Paginatable relationships (#1050)
- [Ash.DataLayer] new `calculate/3` callback that allows for data layers to compute the result of expressions outside the context of a query. Used to power `Ash.calculate/3`.
- [validations] new builtin validations, `attributes_present/2` and `attributes_absent/2`
- [multitenancy] configurable multitenancy behaviour on read actions (#1030)
- [Ash.Reactor] Add new `change` step type which can be used to modify changesets.
- [Ash.Changeset] add `Ash.Changeset.update_change/2` function and builtin change (#976)
- [Ash.Domain] code interfaces can now be defined on the domain
- [Ash.Domain] policies can now be defined on the domain, and will run before resource policies
- [Ash.ToTenant] add `Ash.ToTenant`, allowing for passing arbitrary values as tenants
- [Ash] add `Ash.read_first` (like `Ash.read_one`, but applies a limit automatically)
- [Ash] support a second optional `input` option for `create`, `update` and `destroy`, allowing for things like `Ash.create!(Post, %{text: "text"}, opts)`
- [sensitive?] support `sensitive?` option in query aggregate/calculation (#963)
- [Ash.Resource] support `require_reference?: false` on code interfaces, for when an update or destroy action uniquely identifies a record (or for bulk update/destroy)
- [Ash.Resource] notifiers can now be specified for specific actions, using the `notifiers` option
- [mix ash.rollback] delegates to extensions to trigger their rollback tasks
- [Ash.Query] add `Ash.Query.apply_to/3`, to "apply" the query to a set of records (i.e filter, sort, distinct, etc.)
- [Ash.CustomExpression] Use `Ash.CustomExpression` to extend Ash's expression syntax in a data-layer agnostic way
- [code interface] Code interface functions now support bulk actions, in a "do what I mean" way. For example: `Domain.deactive(post)` can also be `Post |> Ash.Query.filter(active == true) |> Domain.deactive()`
### Improvements:
- [Ash.Actions.Sort] allow providing a stream of records to sort, and performance improvements
- [bulk actions] add `read_action` option to bulk actions (#1088)
- [Ash.stream] support streaming with offset, or even _no_ pagination
- [Ash.DataLayer.Ets] add debug logging, similar to ecto query debug logging
- [Ash.DataLayer.Ets] support update_query, destroy_query and `Ash.Changeset.filter/2`
- [Embedded resources] don't add `autogenerated_id` to embeds if they don't have a primary key
- [Ash.Resource] you can now omit the return type of generic actions, indicating it either succeeds or fails, returning `:ok` or `{:error, error}`
- [Ash.Resource] Generic actions can now accept a Reactor module, running it directly. (#993)
- [Ash.Resource] support `allow_nil_input` dsl option in update/destroy actions (#964)
- [Ash.Resource] The `filter` option can now be supplied multiple times in read actions and in relationships. They will be combined with `and`
- [Ash.Resource] private attributes can now be accepted as action inputs
- [Ash.Expr] is now imported automatically into places you will likely use it, like changes, validations, checks and calculations.
- [Ash.Query] is now required automatically in places you will likely use it, as above
- [sortable?] fields may mark themselves as unusable in sorts by using `sortable? false`
- [sensitive?] calculations and aggregates may now also be marked as `sensitive?`
### Bug Fixes:
- [Ash.Type] apply array type `nil_items?` constraint after item constraints are applied (#1115)
- [Ash.DataLayer.Ets] fix ETS data layer's support for lateral joining
- [bulk actions] ensure transaction is rolled back on data layer errors during streaming
- [bulk actions] set `notify?: true` when `return_notifications?: true` is set
- [Ash.Changeset] `attributes_present?/2` -> `attribute_present?/2`
- [Ash.Filter] don't eager evaluate `type/3` because data layers require type information
- [Ash.Changeset] when comparing identities for `manage_relationship`, we now properly cast the values. Before, `"1"` and `1` were not considered equal for integer primary keys/identity fields
- Many more bug fixes were added, but few are relevant enough to list here