- Add
reset-parallel-env
helper to support recursive calls on parallel parser - Boundary interface support around all parsers, same as in Pathom 3
- Fix wildcard usage at the root part of the query
- Union branches are not present on paths
- Support merge data params in
env-placeholder-reader
- Setup
clj-kondo
linter exports
- Add timestamp to pool chan message
- Bump
com.wsscode/async
to 1.0.12
- Remove direct depedency on core.async, leave to wsscode async
- Move
defresolver
validation to resolver
to fix validation in macro forms
- Fix validation on
defresolver
- Validate keys with specs in
options
part of defresolver
- Port
defresolver
from Pathom 3, supports implicit inputs and outputs.
- Core async related bug fixes.
- Bump EQL to 1.0.0 to remove hard dependency on test.check
- Fix sequential unions on async and parallel parsers
- Fix inline unions on graphql mutation subquery
- Add node tracing data on
reader3
for tooling support - Fixed
::pcp/requires
on AND
nodes - Fixed planning ancestors finding
- Fix collapse case for dynamic resolvers
- Fix issue on foreign parsers that breaks the specs because of a vector key in the errors map
- Ensure remote errors are propagated back to source parser
- Handle fatal errors when calling foreign parser
- New Advanced Graph Query Planner
- Add
p/placeholder-key?
helper - Add
::p/async-parser?
to env, its value is true
for async parsers - Add
::p/map-of-maps
support for sub-query on map values - Optimized processing of reader2 and fixes
- On default union branch, skip break values
- Fix parallel parser issue with sorted-maps that have numeric keys on it
pc/reader2
will return ::p/not-found
instead of an error when dependency links are missing::p/env
is automatically removed from mutations that return it and have no query
- Fix bounded recursion on parallel parser
- Connect mutations add ::pc/mutation-ast to the env
- When a union path is taken, add the union path to
::p/path
- Fix join with augmented env when entity is an atom
- Support docstring on
pc/defresolver
macro
- Filter GraphQL mutation join queries
- Connect process with skip a resolver in case the desired key is already fulfilled
- Add
com.wsscode.pathom.sugar
namespace with new helpers to quickly define parsers - Improve handling of external watcher responses in parallel reader
- Add new resolver definition helpers:
constantly-resolver
, single-attr-resolver
and single-attr-resolver2
- Add ::p/root-query to environment
- Small change for performance on previous fix
- Fix
java.lang.UnsupportedOperationException
on external wait situation
- Add a mechanism to retry long running external waiting on connect parallel reader.
- Fixed issue that made resolvers stuck when depending on a external data in middle of resolver chain
- Fixed counting behavior on max-key-iterations
- Reduced default max-key-iterations to 5
- Support
::p/final
on p/map-reader
for short circuit processing
- Fixed issue #105, when a resolver gets an error but another concurrent gets a valid value after, the later must be used as the response
::pp/processing-recheck-timer
off by default
- Add new
::pp/processing-recheck-timer
option to parallel parser
- Looser spec on
::pc/transform
- Use
contains?
instead of find
in map reader to support wider range of custom maps - BREAKING: Fixed specs, when processing a plan path, use
::pc/plan-path
instead of ::pc/plan
in the env, which is the correct name
- Support tempid? on pathom graphql config, thanks @codonnell!
- Fix return of parallel timeout
- Enable conditional removal of specs using closure defines
{com.wsscode.pathom.misc.INCLUDE_SPECS false}
- Fix
pc/data->shape
breaking when data has complex keys - Fix alias on
p/join-seq-parallel
optimized runs
- Add
p/params
to get params from env - Include params in cache key
- Support custom inner parser for GraphQL processing
- *** Add attributes index ***
- Fix on join env, ensure ast and query are preserved
- Add
p/ast-properties
- Customize async cache channel size via
::p/async-request-cache-ch-size
- Pathom remote works with sync and async parsers
- Implement
abort
on fulcro network - Add docstrings to parsers, check it to learn about knobs you can use to tune the parser.
- Add
p/elide-special-outputs
plugin to simplity elision of pathom output specials (::p/reader-error and ::p/not-found) - Add
p/map-select
, a quick way to run EQL selections on maps
- Add config options for
graphql-network
to support custom headers, thanks @Joe Lane! - Move core.async and test.check to main dependencies
- Add missing specs for:
::pc/resolve
, ::pc/resolver
, ::pc/mutate
and ::pc/mutation
- Add
com.wsscode.pathom.connect.graphql2
ns, using raw graphql translations - Add support for
::gql/alias
- Fix error propagation for uncached resolvers
- Fix timeout issue case when chained dependencies cause an error in the middle
- Add support for
:pathom/context
on mutations, see https://wilkerlucio.github.io/pathom/#_mutation_output_context
- Increase default
::pp/max-key-iterations
to 10 p/transduce-maps
check if map is native (fixes issue were fulcro tempids were losing data)
- Fix
compute-paths
generating invalid results
- Add
p/pre-process-plugin
- Fix edge case on compute-paths that could miss a possible path
- Improved counting of attribute loops in parallel parser
- Reduce size of
pc/async-reader2
to support debugging - Improvements to http diplomat on clojure, thanks @souenzzo!
- Fix p/error-str returning a type instead of string when error has no message or data
- Fix on generative: normalize nested placeholders properly
- Fix: don't capture mutation exception at parser level
- Fix on generative, don't apply transform on join results
- Fix
p/remove-query-wild-card
to maintain query meta - Query generators support custom rules from query meta
- Query generator proper constraints placeholder nodes
- Fix compute-paths bug when user has more than 3 inputs on a resolver
p/swap-entity
now runs the function when entity is not an atom and return the result- Faster performance for list processing when query doesn't have a join
- Optimize parallel list processing when entity is data complete upfront
- Use edn-query-language library for EQL parsing
- Add
pc/alias-resolver
and pc/alias-resolver2
helpers p/request-cache-plugin
is now always native, no need to require it manually- New strategy to ensure same cached resolver is never called twice
- Js fetch adds trace details about http requests
- Support
::pc/transform
in pc/resolver
and pc/mutation
- Add
pc/transform-batch-resolver
helper - Add
pc/transform-auto-batch
helper - Add support for alias output properties
- Add fulcro union branch to fulcro network helpers
- Add
pc/project-query-attributes
- Fix
p/cached
regarding nil
values, they were considering nil
a non cached value
- 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