 (alter-meta! #'->ContextData assoc :private true)
 (alter-meta! #'map->ContextData assoc :private true)
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Public Api
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; --- Helpers
+
+(defn- assoc-conj!
+  {:internal true :no-doc true}
+  [map key val]
+  (assoc! map key
+          (if-let [cur (get map key)]
+            (if (vector? cur)
+              (conj cur val)
+              [cur val])
+            val)))
+
+;; --- Public Api
 
 (defn context
   "A catacumba context constructor."

           ratpack.registry.Registry
           java.util.Optional))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Types
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defrecord DefaultContext [])
(defrecord ContextData [payload])

        result (transient {})]
    (reduce (fn [acc key]
              (let [values (.getAll files key)]
                (reduce #(assoc-conj! %1 (keyword key) %2) acc values)))
            result
            (.keySet files))
    (reduce (fn [acc key]
              (let [values (.getAll form key)]
                (reduce #(assoc-conj! %1 (keyword key) %2) acc values)))
            result
            (.keySet form))
      (persistent! result)))
