- Add a timeout safe guard on parallel parser to ensure nothing is holding the whole parser
- Improved path cost calculation, don't count same sym twice, consider cache in multi-step paths
- Fix deadlock situation on reader planning
p/post-process-parser-plugin
now handles async
- Add
pc/defresolver
helper to define a map resolver - Add
pc/defmutation
helper to define a map mutation - Add
pc/resolver-dispatch-embedded
to dispatch from the resolver map ::pc/resolve
- Add
pc/mutation-dispatch-embedded
to dispatch from the mutation map ::pc/mutate
- Add
pc/batch-restore-sort
helper - Add
pc/reader2
, new algorithm that uses the path planning from pc/parallel
reader - Add
pc/async-reader2
, new algorithm that uses the path planning from pc/parallel
reader - Add symbol validation on factories and resolver creation helpers
- Add
pc/project-parent-query-attributes
to facilitate the creation of dynamic resolvers. - GraphQL integration facilitated using new resolver and mutation maps, more info.
- Fixed
pc/async-reader2
bug missing async read on batch processing - Add
pc/create-thread-pool
with arity 1 to have dynamic thread pool size (managed by core.async) - Working implementation for
clj-http
http driver. Thanks @souenzzo - BREAKING!
::pc/mutations
renamed to ::pc/index-mutations
for consistency, only breaks if you manually fiddled with the mutation index - BREAKING!
pc/connect-plugin
(from beta11) is now a function and works in very different way now, check docs for more info - BREAKING!
pc/register
implementation works differently, check docs for updates - BREAKING!
::pc/resolvers
renamed to ::pc/register
to better describe it
- Support arity 1 on
pc/batch-resolver
- Add
pc/resolver
and pc/mutation
helpers - Fix
p/elide-not-found
to retain meta data (thanks @tony.kay!)
- Connect plugin provide resolvers via
::pc/resolvers
key, making possible to disable their registration - Fix bug in register when registering sequences
- Add
open-ident-reader
to connect - Add
register
to connect - Add support for extra context with
:pathom/context
param on pc/ident-reader
and pc/open-ident-reader
- Add connect built-in resolvers for indexes and resolver weights
- Remove dependency on
clojure.math.combinatorics
(no more compile warnings!) - New plugin wrapper
::wrap-parser2
, like ::wrap-parser
but gets the settings for the parser as second argument - Add support for plugins to inject resolvers
- Add
pc/connect-plugin
- Add
trace/trace-plugin
- More efficient batching on parallel processing
- Fix race condition on parallel parser when some attribute not available could cause all siblings to get not-found
- Support env override at join level
- Improved caching for batch resolvers
- Fix edge case where parallel connect would lock down in a batch processing when initial inputs have to be realized
- Limit max resolver weight to avoid infinite weights
- We only fill all the provided errors when resolver is at tail position, otherwise error only the final field
- Support trace labels
- Custom styles for trace events
- Trace time to flush watchers on parallel parser
- Fix GraphQL network with new removed fulcro dep
- Parallel reader will not mark fields as error if the missing attribute is at the edge of the plan
- Add new
p/query-id
function
- Support
::pc/compute-output
for resolvers with dynamic output - Implement
::pc/compute-output
on GraphQL connect integration to support it on parallel - Support GraphQL mutations without a join query
- Export path as part of trace details
- Fix bad handling of break values on resolver returns during parallel connect read
com.wsscode.pathom.graphql
don't depend on Fulcro anymore- Improve weight recalculation on parallel connect
- Try different paths when some fails during resolver picking
- Fix mutation error propagation on parallel parser
- Report errors on call resolver failure trace
- Expose details data on d3-tree trace
- Move
trace-plugin
impl to trace ns
- 🎉 Parallel parser!
- Parallel connect support
- New tracing support (parsing process details as a event log)
- Algorithms to detect connect paths ahead of time (
pc/compute-paths
) - EDN->GraphQL, use literal value from
::graphql/on
(don't apply js-name
) - Fix many CLJS warnings due to async macros
- new async helpers:
go-promise
, <!maybe
, <!!maybe
join
and join-seq
helpers now enforce that entities are atoms
- Batches will make input distinct to avoid querying same thing multiple times
- Proper cache errors to avoid re-calling resolvers that returned errors
- Fix spec for
::pc/output
to support instrumented calls with unions
- WARNING: before this version, when you return
nil
the value would not be present in the output, from this version it is - Fixes connect dependency case when return contains
nil
values - Default
::p/union-path
will make for convenient use of unions with connect (before it use to trigger an error) - Support indexing unions on connect
- Support inline unions on
query->graphql
- Add
p/update-attribute-param
helper - Add
p/transduce-children
helper
- Fix previous kind implementation
- Support kind as keyword or strings on connect graphql index
- Improved
lift-placeholders
helper, correct merge placeholders
- Fix parent-query on sequence joins
- Fix error handler on mutations when error happens on mutate call (before action is generated)
- Add http driver specification alogn with fetch implementation for cljs and clj.http for clj
- Add new helpers to simplify connect integration with GraphQL
- Add new graphql-network for simple GraphQL integration in the front-end
- GraphQL on connect supports placeholder nodes
- Add
pc/mutation-data
helper
- BREAKING:
::pc/wrap-resolver
is now ::pc/wrap-resolve
- Fix connect compilation on Datomic Ions
- WARNING: Don't trigger errors on connect when inputs can't be met, now it just returns
::p/continue
- Add p/optional-attribute (also aliased as p/?) to mark attribute as optional (currently not used)
- Filter batch entries that don't fulfill the input needs
- Safer catch with Throwable in more places
- Processing sequence doesn't stop on placeholder joins
- Catch Throwable instead of Exception on error plugin
- Fix edge case crash on profile plugin
- Improved algorithm for resolver picking on connect, prioritize already cached resolvers
- Expose plugins in environment, allowing then to be used as part of processing
- Support
::pc/wrap-resolver
plugin - CHANGE:
::pc/args
is now ::pc/params
(there are no features on it, so not breaking, but you must change to get future features)
- Add
sgen/query-props-generator
, this returns an actual generator for a given query. - Support
sgen/transform-generator
to modify generators globally.
- Generators will now strip ui namespaced keys by default (like Fulcro)
- Generators from components now use the component initialization in addition to generated props
- Fix batch queries when batch item input requires resolving
- Fix StackOverflow issue when compiling with
lein-cljsbuild
or figwheel
- Add support for mutations on connect
- Sort
pc/data->shape
results on query - Support easy env providers
- Support
::p/mutate
to define mutation - Add
pc/batch-resolver
helper - Support
::p/mutate
key for mutation setup on parser, in addition to :mutate
- Consistent
ident->id
value on generators - Add
::p/parent-join-key
to env on joins - Many fixes to specs, be happy instrumenting
- Fix
error-str
on CLJS
- Breaking: batch return have a new simpler interface, check docs
- Support N+1 batch optimization on Connect
- Support mutation result customation on generators
- Fix: on connect, reader should continue if resolver doesn't return a requested value
- Fix: sync mutation errors were not returning the result, thanks Mitchel!
- Major improvement on query generators, now every part is fully customizable
- New: common.async
- Breaking: removed old async helpers from
com.wsscode.common.async
- Breaking: removed async namespace
- Breaking: removed connect/spec inference, must be set on
p.connect/add
- Independent parser: pathom now uses internal implementation for the parser
- Async parser: now pathom and all the built-in features have full async support
- Add:
p/ident-join-reader
- Add: connect
pc/resolver-factory
- Add: specs for the EDN query syntax
- Add: specs query AST
- Add: support bounded recursive queries on join
- Add: map-db readers (read like fulcro db->tree)
- Add:
post-process-parser-plugin
helper - Add: sort-plugin
- Connect supports custom dispatch, enabling ClojureScript usage (via
::p.connect/resolver-dispatch
) - Support bounded and unbounded queries to translate using
query->graphql
- Support custom dispatch function to call resolvers on
Connect
- Add:
p/entity-attr
, non throwing version of p/entity-attr!
- Add:
connect.test
namespace for automatic testing of connect
resolvers - Pathom now depends on Fulcro instead of Om.next for primitives
- Error plugin support for mutations
- Add:
raise-mutation-result-plugin
to unwrap the :result
on mutations, making it simpler - Fix: bug on
merge-queries
when merging plain attribute with joined attribute - Add names to plugin functions so they get easier to see on stack traces
- Fix specs, now it can run with instrumentation on
- Add
p/raise-errors
helper - Add
fn-network
on fulcro to create networks from a function
- Plugin engine supports wrapping mutations
- Profile plugin measures mutations
- Add TransformNetwork to fulcro network
- Add
p/elide-items
- Ignore
::p/reader-error
responses on connect processing
- New:
::p/parent-query
support, to enable siblings optimizations - Changed: in graphql ident,
by-
is no longer applicable - Changed: connect index names
- Changed: namespace pathom.merge is deprecated, merge-queries lives on core now
- Renamed:
profile->flame-graph
is now profile->nvc
- Changed: now we use
:key
instead of :dispatch-key
on map reader and map dispatcher - Entity can be an atom, will be automatically deferred when
p/entity
is called. - Add
connect
namespace, connect provides a high level reader to connect attributes for automatic resolving. - Add
gen
namespace containing helpers to do generation based on queries
- New:
p/parser
, this supports the new plugin structure - New:
p/error-handler-plugin
- New:
p/async-plugin
, enabling full async without needing to use specialized readers - New:
p/request-cache-plugin
to do common per-request caching p/entity
accepts second parameter to do ensure args in one step- New:
p/entity!
to get an entity forcing attributes requirement, so you get better error messages when they are not
available - Renamed:
placeholder-node
to placeholder-reader
(old name still works) - New:
p/map-reader*
- New:
::p/union-path
supports computed keys and custom functions - New:
p/entity-attr!
to get a single entity property (can be computed). - Deprecated:
ast-key-id
This is a major change in terms of initialization, instead of
running your om/parser
now you should use p/parser
that supports
the new plugin structure.
- Add async parser helpers
- Fix
js-obj-reader
default js-value-transform
- Use
:dispatch-key
on map-reader
- GraphQL mutation: when given empty subquery, try to infer id
- GraphQL supports ident transform
- Merge queries support
- Add Fulcro network helper - GraphQL network
- Add Fulcro network helper - Batch network
- Add elide-ast-nodes helper
- Async placeholder nodes
- Profile helpers
join-seq
appends item index to ::p/path
- LocalNetwork helper to use local async parser
p/join-seq
always returns a vector- removed
fdef
from specs, currently it was preventing instrumented functions to run, more investigation needed
- Support
p/join
with arity 2, adding entity - Handle union queries on
p/join