2023-01-26
2023-01-26
-
Breaking: Rhyolite.Frontend.Cookie now always Base64 encodes cookies
-
change taskWorker to not manage the hasRun flag. For the old behavior, use
taskWorker1
which adds back the at-most-once execution behavior. The old_task_hasRun
field of Task is a separate argument. -
Task type no longer uses lenses for field accessors. use field labels or regular functions instead.
-
Fix
Rhyolite.DB.Beam.current_timestamp_
for PostgreSQL server instances whose time zone is not set to UTC. -
Add helper types for beam code, namely
WrapColumnar
andWrapNullable
. -
Add beam orphan instances for some functor types, such as
Product
andProxy
. -
Bump obelisk 1.0.0.0 and reflex-platform (0.9.2.0)
-
Add rhyolite-account-types and rhyolite-account-backend for use with beam-based rhyolite projects
- Moved groundhog-legacy's
Rhyolite.Account
module toRhyolite.Account.Groundhog.Types
- Moved groundhog-legacy's
-
Added Beam versions of
Rhyolite.Task.Groundhog.Worker.taskWorker
andRhyolite.Task.Groundhog.Task
, inRhyolite.Task.Groundhog.Worker
andRhyolite.Task.Beam
respectively. -
Removed
Rhyolite.Request.Common
, now using functions from Aeson directly. Usedecode'
instead ofdecodeValue'
. -
Bump vessel to 0.2.1.0 (pre-release)
-
Add mapAuthenticatedV
-
Extend AuthenticatedV to have a personal view component in addition to private and public ones. Personal views are similar to private ones
in that they require a token to access, but are computed separately per-user.
They're specifically for the case that we expect different users' views to have nothing in common with one another. -
Breaking changes:
- Rename
Rhyolite.Frontend.App.openWebSocket'
toopenWebSocket
and remove the previous definition ofopenWebSocket
. To get the same output as before:(_appWebSocket_notification x, _appWebSocket_response x)
. - Remove the
rhyolite-backend-snap
package. It has been released as snap-stream. Use that package instead. - Remove the
backend-db
package. See the groundhog-legacy migration guide and the notes below:- Remove
Rhyolite.Backend.DB.PsqlSimple.Orphans
. Changes have been moved our fork of postgresql-simple. - Rename
PostgresRaw
toPsql
and move it topsql-simple-class
. - Move Psql (formerly PostgresRaw) instance for groundhog's
DbPersist
to psql-simple-groundhog. - Remove
fromIdRow
fromRhyolite.Backend.DB.PsqlSimple
- Move
traceQuery
andtraceExecute
to psql-simple-class - Use
postgresql-simple-interpolate
for quasiquotated postgresql-simple queries. The following function names have changed:- queryQ -> iquery
- executeQ -> iexecute
- executeQ_ -> iexecute_
- traceQueryQ -> itraceQuery (defined in psql-simple-class)
- traceExecuteQ -> itraceExecute (defined in psql-simple-class)
- traceExecuteQ_ -> itraceExecute_ (defined in psql-simple-class)
- Remove
Rhyolite.Backend.DB.PsqlSimple
as all of its functionality has been moved elsewhere. - Move instances from
Database.Groundhog.Postgresql.Orphans
toRhyolite.DB.Groundhog.Orphans
in groundhog-legacy. - Move
Network.PushNotification.Worker
togroundhog-legacy
and rename it toRhyolite.Network.PushNotification.Worker
. - Move
Rhyolite.Backend.DB
togroundhog-legacy
and rename it toRhyolite.DB.Groundhog
. - Move the
PostgresLargeObject
class topsql-simple-class
and move its groundhog-based instances togroundhog-legacy
.withStreamedLargeObject
no longer requires groundhog, but does require a connection. UseliftWithConn
to use it with groundhog.
- Move
Rhyolite.Backend.DB.Serializable
toDatabase.PostgreSQL.Serializable
inpsql-serializable
and move its groundhog-based instances togroundhog-legacy
'sRhyolite.DB.Groundhog.Serializable
module. - Move
Rhyolite.Backend.Schema
andRhyolite.Backend.Schema.Class
toRhyolite.DB.Groundhog.Schema
andRhyolite.DB.Groundhog.Schema.Class
ingroundhog-legacy
. - Move
Rhyolite.Schema.Task
andRhyolite.Backend.Schema.Task
toRhyolite.Task.Groundhog
, and moveRhyolite.Backend.TaskWorker
toRhyolite.Task.Groundhog.Worker
, both ingroundhog-legacy
. - Move
Rhyolite.Backend.Schema.TH
toRhyolite.DB.Groundhog.TH
ingroundhog-legacy
.
- Remove
- Remove
Rhyolite.Map.Monoidal
. For=:
useData.Map.Monoidal.singleton
instead, and forrestrictKeys
use monoidal-containers >= 0.6.1.0. - Remove rhyolite-aeson-orphans. It has been renamed and moved to bytestring-aeson-orphans and is now used as a dependency.
- Remove the aeson orphan instances for Alt, Any and Down.
- Move
Rhyolite.Backend.Listen
to its own projectrhyolite-notify-listen
. The module is now calledRhyolite.DB.NotifyListen
.insertAndNotify
and related classes and functions can now be found in the groundhog-legacy package in theRhyolite.DB.NotifyListen.Groundhog
module, and innotify-listen-beam
for beam versions. The variousnotify
functions now requirePsql m
. - Remove Rhyolite.HList.
- Remove Data.MonoidMap. It has been moved to monoid-map and is now used as a dependency.
- Narrow the type of
signWithKey
so that the input type matches the output's phantom type parameter. - Move
Rhyolite.Backend.Email
andRhyolite.Email
toRhyolite.Email
in the newrhyolite-email
package.- Provide more error information in the interface for sending an email in
rhyolite-email
. - The
EmailEnv
type has been changed toEmailConfig
, which is a structured record type instead of a flat tuple.
- Provide more error information in the interface for sending an email in
- Move
LargeObjectId
topsql-simple-class
. - Remove the
Rhyolite.TH
module. Usefile-embed
instead. - Move
Rhyolite.Backend.EmailWorker
toRhyolite.DB.Groundhog.EmailWorker
ingroundhog-legacy
. Change the schema forQueuedEmail
to contain a JSON blob of theMail
object instead of the rendered email bytestring. See the groundhog-legacy migration guide for more information. - Move the
Account
type togroundhog-legacy-types
and move associated backend functionality toRhyolite.DB.Groundhog.Account
ingroundhog-legacy
. - Move
Signed
andMonadSign
tosigned-data
. MovesignWithKey
,readSignedWithKey
,SignT
, etc tosigned-data-clientsession
. Move groundhog instances forMonadSign
andSignT
toRhyolite.DB.Groundhog.Orphans
. - Move
Account
togroundhog-legacy-types
. Move backend code for accounts, e.g.,ensureAccountExists
toRhyolite.Account.Groundhog
ingroundhog-legacy
. - Move
Rhyolite.Schema
togroundhog-legacy-types
. - Rename
datastructures
tosemimap
since it only contains SemiMap. - Move
Rhyolite.Frontend.Widget
,Rhyolite.Frontend.Form
, andRhyolite.Frontend.Modal.*
torhyolite-widgets
.
- Rename
-
New:
- Add a
Psql
instance for beam'sPg
- Add a
-
Version bumps:
- vessel 0.2.0.0
2021-11-18
- Fixed a bug in
handleAuthMapQuery
where tokens were always validated
2021-11-16
- Rhyolite.Concurrent: add taggedWorker to make it easier to determine the source of error messages
- Bump groundhog
- Bump obelisk (develop as of 2021-04-19) and reflex-platform (0.7.1.0)
- Remove rhyolite-logging and use monad-logger-extras in rhyolite-db instead.
LoggingEnv
is replaced byLogger
. - Remove
runPrerenderedRhyoliteWidget
. UserunRhyoliteWidget
instead. runObeliskRhyoliteWidget
now also returns a DynamicAppWebSocket
.- Emails
- separate build and send for widget email
- Update widget emails for newer routes.
- Use a record for email configuration.
- Add a function for email with a StaticWidget
- Simple authenticated queries
ErrorV
vessel captures logic for possibly failing queriesAuthMapV
gathers queries associated to different identities so that they can be processed together.AuthenticatedV
distinguishes between public queries that need no authentication and private queries which do.
2020-04-28
- Bump Obelisk to version 0.8 which includes a bump to reflex-platform and nixpkgs 19.09
2020-01-10
- Add
mapModalTM
,mapModalT
andmapModalTM
functions for changing the underlying monads ofModalT
. - Fix bug in
functorToWire
causingSelectedCount
of0
to be considered non-mempty. - Fix regression in rhyolite-frontend so that it builds in GHCJS again
2019-12-20
- Move
Rhyolite.Backend.Logging
to its own projectrhyolite-logging
and re-export. - Add
Rhyolite.Backend.DB.Serializable
for doing PostgreSQL transactions inSERIALIZABLE
isolation with automatic retrying on serialization errors. - Breaking change: Switch
runDb
to use theSerializable
monad for all transactions. This monad is not a transformer and has very few instances. Notably, liftingIO
into it must be done manually, and only with great care. - Add
runDbReadOnlyRepeatableRead
toRunDb
to make streaming reads easier. Notably, this transaction mode allowsMonadIO
because it will never retry. - Fix thread-safety bug in
firebaseWorker
. - Breaking change: Rework
MonadSign
to look a lot more likeMonadReader
so that its instances can more easily avoidMonadIO
. - Breaking change: Functions in
Rhyolite.Backend.EmailWorker
now have a constraint requiring thatSerializable
be the base monad. - Add
PostgresRaw
andPostgresLargeObject
instances toSignT
. - Bump
postgresql-simple
to avoidWARNING: There is no transaction in progress
when there is a serialization error.
2019-10-20
- Deprecated runPrerenderedRhyoliteWidget, use runRhyoliteWidget instead.
- Use GHC 8.6. This necessitated bumps to
- dependent-sum-aeson-orphans
- gargoyle
- groundhog
- obelisk
- postgresql-lo-stream
- reflex-platform
- vessel
- Convert many places using
fail
to useerror
directly to avoidMonadFail
constraint - Remove many instances from
Backend.DB.PsqlSimple.Orphans
that were upstreamed topostgresql-simple
2019-08-27
- Improve error message on parse failure in certain database instances
2019-08-19
- Added
runObeliskRhyoliteWidget
for integration with obelisk applications.
2019-08-02
- Remove
Rhyolite.Backend.Snap
. That module has been made obsolete by Obelisk. - Frontend.App: Use reflex's
matchResponsesWithRequests
instead ofidentifyTags
(now deleted). Change the identifier used byTaggedRequest
andTaggedResponse
to anInt
- Remove
mapRequesterT
. This has been upstreamed to reflex aswithRequesterT
- Remove Frontend.Request and Frontend.WebSocket
2019-08-01
- Use
HasId
,Id
, and related types/functions from database-id-class and database-id-groundhog. Remove the implementations in Rhyolite.Schema and Rhyolite.Backend.Schema - Remove Rhyolite.Backend.DB.TH since the code there was redundant with Rhyolite.Backend.Schema.TH
- Convert all dependencies in default.nix to thunks in
dep/
- Update to use monoidal-containers 0.5
- Add a test that builds all the rhyolite submodules to
test/
- Remove
withDb
, which can now be found in gargoyle-postgresql-connect
2019-06-14
- Add
Rhyolite.Frontend.Modal.*
modules for conveniently creating modals that do not require the use ofz-index
to position correctly. - Add
withLoggingMinLevel
function inRhyolite.Backend.Logging
which allows you to pick the fallback filter when no other filters match. - Bump obelisk to a version that no longer uses
*Tag
classes. - Remove the "HasView" and "HasRequest" classes, and the general concept of having a type level "app" identifier. Instead, everything is explicitly parametrised on query and request types directly, and the query type is no longer required to be a Functor/Align/etc. so that Vessel becomes an option for defining queries and views.
- Remove the "Request" class, as it has been subsumed by more general machinery. You can use deriveArgDict from constraints-extras and deriveJSONGADT from aeson-gadt-th on your request datatypes to obtain the same powers (and more).
- In its place, there is a Request type synonym which stands for (ForallF ToJSON r, Has ToJSON r, FromJSON (Some r), Has FromJSON r).
- Added standardPipeline as a good example of a last argument you can use for serveDbOverWebsockets, in the case that you have a Functor-style query/view type. It now uses condense/disperse from the Vessel library.
- Added vesselPipeline similarly for the case where you're using a functor-parametric container type (such as Vessel) for your queries and views.
- Added a DiffQuery type class which allows us to specify how queries are subtracted. We were doing this in an ad-hoc fashion based on Align instances before, but the generalisation of query types meant that we could no longer assume this was an option.
- If you have a Functor-style query/view, the 'standardDiffQuery' function can be used to implement the 'DiffQuery' instance for it.
- If you're using Vessel, to implement DiffQuery you can use subtractV which is a consequence of the View typeclass.
- Add alternative to groundhog's
==.
, which has severe performance issues before version 0.10 (to which we can't yet upgrade). SeeRhyolite.Backend.DB.===.
. - Add
validationDropdown
andvalidationTextArea
- Add an extra type parameter
v
specifying the widget value type (typicallyText
) toValidationConfig
- Add
mkValidationConfig
which is likedefValidationConfig
but takes the initial value - Add
validationDropdownChangeEvent
that returns the change event of the ValidationDropdown
- Add an extra type parameter
- Remove the "HasView" and "HasRequest" classes, and the general concept of having a type level "app" identifier. Instead, everything is explicitly parametrised on query and request types directly, and the query type is no longer required to be a Functor/Align/etc. so that Vessel becomes an option for defining queries and views.
- Remove the "Request" class, as it has been subsumed by more general machinery. You can use deriveArgDict from constraints-extras and deriveJSONGADT from aeson-gadt-th on your request datatypes to obtain the same powers (and more).
- In its place, there is a Request type synonym which stands for (ForallF ToJSON r, Has ToJSON r, FromJSON (Some r), Has FromJSON r).
- Added standardPipeline as a good example of a last argument you can use for serveDbOverWebsockets, in the case that you have a Functor-style query/view type. It now uses condense/disperse from the Vessel library.
- Added vesselPipeline similarly for the case where you're using a functor-parametric container type (such as Vessel) for your queries and views.
- Added a DiffQuery type class which allows us to specify how queries are subtracted. We were doing this in an ad-hoc fashion based on Align instances before, but the generalisation of query types meant that we could no longer assume this was an option.
- If you have a Functor-style query/view, the 'standardDiffQuery' function can be used to implement the 'DiffQuery' instance for it.
- If you're using Vessel, to implement DiffQuery you can use subtractV which is a consequence of the View typeclass.
- Bump obelisk to a version that no longer uses
*Tag
classes
2019-05-08
- Add NeverNull instance for our Json newtype that encodes things as JSON in the DB.
- Add change-tracking DB notifications. See
HasChangeNotification
in Rhyolite.Backend.Listen. - Fix bug in
runRhyoliteWidget
andrunPrerenderedRhyoliteWidget
when things were explicitly requested 0 times. - Fix
mapAuth
to ensure that queries are correctly subtracted from the view selector when switching accounts. - Add
validationInputWithFeedback
which separates the widget providing feedback on why their input wasn't valid, allowing it to be placed separately in the DOM. - Create a
RawTask
, useful for jobs where it's inconvenient to track "job complete" separate from the other job ready conditions.
v0.1.0.0
- Add a server-side worker to handle sending of push notifications
- Disallow using ExceptT and similar monads to host runDb calls
- Add
mapAuth
to rhyolite frontend to allow mapping of application credentials into an "authenticated" subwidget - Update frontend for obelisk's new hydation feature
- Add Rhyolite.Frontend.Widget to collect useful widgets like
extensibleListWidget
- a widget for editing a list of values - Add Rhyolite.Frontend.Form, a collection of widgets to help with form validation
- Backend notifications are now typed. This is a breaking change: you'll need to specify your expected notification as a GADT and supply the appropriate GADT constructor when constructing notifications
- Add a worker for handling unqueued tasks that the backend must run. See
Rhyolite.Backend.TaskWorker