macropreviously cljs.spec/mergeEdit
(merge & pred-forms)

Source docstring:
Takes map-validating specs (e.g. 'keys' specs) and
returns a spec that returns a conformed map satisfying all of the
specs.  Successive conformed values propagate through rest of
predicates. Unlike 'and', merge can generate maps satisfying the
union of the predicates.
Source code @ clojurescript:src/main/cljs/cljs/spec/alpha.cljc
(defmacro merge
  [& pred-forms]
  `(merge-spec-impl '~(mapv #(res &env %) pred-forms) ~(vec pred-forms) nil))