clj-commons / hickory

HTML as data
Other
637 stars 52 forks source link

Use of aget breaks under advanced compilation #84

Closed viesti closed 9 months ago

viesti commented 11 months ago

Hickory uses aget for example in

(defn node-type
  [type]
  (aget goog.dom.NodeType type))

which, which current ClojurScript, breaks under advanced compilation, since property names are munged.

Under advanced compilation:

(println "hickory goog.dom.NodeType" goog.dom.NodeType)
=>
hickory goog.dom.NodeType #js {:Fi 1, :zi 2, :Ki 3, :Ai 4, :Hi 5, :Gi 6, :Ji 7, :Bi 8, :Ci 9, :Ei 10, :Di 11, :Ii 12}

when not using advanced compilation:

(println "hickory goog.dom.NodeType" goog.dom.NodeType)
=>
hickory goog.dom.NodeType #js {:ELEMENT 1, :ATTRIBUTE 2, :TEXT 3, :CDATA_SECTION 4, :ENTITY_REFERENCE 5, :ENTITY 6, :PROCESSING_INSTRUCTION 7, :COMMENT 8, :DOCUMENT 9, :DOCUMENT_TYPE 10, :DOCUMENT_FRAGMENT 11, :NOTATION 12}

Should probably use just .- property access instead of aget. aget probably has worked with older ClojureScript, but doesn't work any longer.

viesti commented 11 months ago

Or actually, goog.object/get, as suggested in docs:

(require 'goog.object)
(def obj #js {:foo #js {:bar 2}})

(goog.object/get obj "foo")
;;=> #js {:bar 2} 
danielcompton commented 9 months ago

Fixed by https://github.com/clj-commons/hickory/commits/master/